找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2446|回复: 0
打印 上一主题 下一主题

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
: i1 X, n; y; Q. E! J  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
/ k! T  C6 v2 O/ ~# [  列出数据库:show databases;1 S8 E( g' K- ], {! H& Y$ z0 N
  选择数据库:use databaseName;8 v# J  o* }; l/ Z" g
  列出表格:show tables;5 L7 ~$ |, d0 [# C. @% U& o
  显示表格列的属性:show columns from tableName;
9 F  L3 ?; v1 d8 J2 W  建立数据库:source fileName.txt;0 y1 n+ O6 H8 ~  m4 w
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
$ d5 x8 b/ Z$ r9 n1 F8 A% X  Z  增加一个字段:alter table tabelName add column fieldName dateType;2 {5 m& R* c7 z% H: A& U
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
, i/ P# j; L) t3 N  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
. m0 z. j- l( J, p  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
" p2 c3 f  R# D  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 t& @+ O  ^. e0 Y. B# [$ P
  查询时间:select now();6 o/ F1 t0 ]' C( @: l. T
  查询当前用户:select user();
) H0 V$ j1 z. L: t1 }' I4 K  查询数据库版本:select version();( k0 H' {( }* P4 X
  查询当前使用的数据库:select database();% H) y( i- v+ x, q2 L1 w
  ; P/ e0 H* j. Y7 H1 p/ {6 v, w
  1、删除student_course数据库中的students数据表:  _. d4 k+ z7 ~4 ^: |! x' ~
  rm -f student_course/students.*! }; h* [! q/ s; B. r
  
, Q' F3 o9 l7 a- s$ c, s1 s  2、备份数据库:(将数据库test备份)
' k$ N% E& c- I3 f% h: K! K' M' ]  mysqldump -u root -p test>c:\test.txt
, O- V5 r' T5 }, Q  备份表格:(备份test数据库下的mytable表格)( L- {( q, D7 D. s/ K
  mysqldump -u root -p test mytable>c:\test.txt3 z# r' L( D8 }/ ]
  将备份数据导入到数据库:(导回test数据库)
; }) [: @- c5 @  mysql -u root -p test<c:\test.txt
8 z. v- m1 P/ ]! q' M+ z) r3 M  # A. E, {5 c% i) s2 Q
  3、创建临时表:(建立临时表zengchao)9 e; D+ [+ j( k3 d
  create temporary table zengchao(name varchar(10));
. B) ~; S2 ~# i# C( ^' n( ]( w  
& I7 l8 y- i" S5 O5 l7 @1 b# f2 Q  4、创建表是先判断表是否存在
% u7 {& ?8 x3 z3 f  create table if not exists students(……);) ?( [" v2 Q. a" Q' z2 I! q
  
/ P, M* w. n7 x4 T' V  5、从已经有的表中复制表的结构! g  s) S4 d9 d& b2 w' q
  create table table2 select * from table1 where 1<>1;+ {$ h5 B: G; F
  
! u8 U: p' M. O1 F7 W" q  6、复制表8 ?5 m0 f& U/ P# z
  create table table2 select * from table1;6 ~% H& f; `( Z8 h; c0 Q3 X
    K# l  ?, {2 U6 ~
  7、对表重新命名" [. g6 }9 v& l" Z( o1 T7 h
  alter table table1 rename as table2;. Z5 c* Z* v- |6 X
  
7 K2 O4 K0 Z& L: u* I3 p  8、修改列的类型# b9 U6 T; B7 ]; w3 }8 r) x4 Y. N( i
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
) t' u3 @4 X  g5 \& Y$ g$ w  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned, z* @- e4 P& W. ~2 E: n$ \6 p/ ]
  % z0 i1 T4 a* @8 D3 F
  9、创建索引0 o8 k, u  w# Y- `" {8 z/ p
  alter table table1 add index ind_id (id);2 c" ~/ F1 U$ L, E
  create index ind_id on table1 (id);1 E* d& {% J& E; a2 m, X( `
  create unique index ind_id on table1 (id);//建立唯一性索引
- Z' T) G5 i! y8 L  
9 c9 y  T/ d# c. [. N( ]  10、删除索引
  }; N  V7 e: }6 [3 G  drop index idx_id on table1;  {' ~) {4 F; N
  alter table table1 drop index ind_id;
. L0 C* B2 H7 q1 ~  
2 \8 F9 z" h  q& |  11、联合字符或者多个列(将列id与":"和列name和"="连接)6 y' Y! r5 q$ _9 V4 }8 i
  select concat(id,':',name,'=') from students;+ D( X! f6 u6 N. u5 `
    g1 v/ G* E. g, g+ T: h
  12、limit(选出10到20条)<第一个记录集的编号是0>" A/ s# `% x) M7 V
  select * from students order by id limit 9,10;" H) e+ ?8 Z* n% s6 {
  
3 Y+ `9 z  Q% m# |0 Y  13、MySQL不支持的功能
/ i2 n+ f& b& R! v8 `- N1 q: S  事务,视图,外键和引用完整性,存储过程和触发器! H" O2 ?( E( J# T0 |0 a% Y5 u& W
  
8 b' ~% R1 A4 n/ |5 I; F3 ~+ C  * y8 t/ |  O4 g7 `8 h4 u: I
  14、MySQL会使用索引的操作符号3 T' E% e3 Z% {
  <,<=,>=,>,=,between,in,不带%或者_开头的like
% ?6 q9 o7 R# a& U  , l4 g: a% e- K
  15、使用索引的缺点  Y: e' W5 |1 Q& b4 v: Z- h' `
  1)减慢增删改数据的速度;
" w" D( L  V7 F% r2 s3 G  v: Z" ?  2)占用磁盘空间;
" z' _6 d! o# {4 i( o  3)增加查询优化器的负担;
0 [0 ^( O+ a1 P6 \  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;# J" N9 N  B) W1 |3 G3 |2 c; k/ h
  8 g& {8 t9 N9 g, c6 u; ~, H) Z
  16、分析索引效率1 F  P0 m3 ^( @
  方法:在一般的SQL语句前加上explain;
4 u" y; O( I* r/ r  分析结果的含义:+ I2 T  M# Z1 `& w7 {& v* R9 Q
  1)table:表名;
9 F5 f& s# @1 ~9 h  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
( b( R, V9 Q& V$ t* b- u  3)possible_keys:查询可以利用的索引名;
1 C/ x6 E2 W1 x3 a8 p& F0 ?  4)key:实际使用的索引;+ O% h8 w$ k6 i2 y
  5)key_len:索引中被使用部分的长度(字节);
# c! u" K" P2 O, k5 ^. P( n! s, j  6)ref:显示列名字或者"const"(不明白什么意思);
8 z. y0 x- D6 G9 j% l, I  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;% P5 N# B0 |. T& |& h
  8)extra:MySQL的建议;
  r3 ?! M2 g7 C3 P) i' O/ a7 q2 R  
! c3 ^1 p2 d7 ?; X, A. S  17、使用较短的定长列7 `8 J6 M7 X* ?" \( U+ R
  1)尽可能使用较短的数据类型;
! L8 A! v) A$ u% }  2)尽可能使用定长数据类型;: q! c. K' n" `; d, ?2 z
  a)用char代替varchar,固定长度的数据处理比变长的快些;
, H4 d" y  d% I; s% d- ]/ _  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;7 n  G4 y) W. n" T4 \1 C/ {  _
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
4 E2 x. I$ ?" I5 H$ F& J  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;5 R9 U& W) g9 f9 J0 N
  & `9 D3 P6 B& \$ d/ o* n
  18、使用not null和enum
3 i* P7 U. N: h" w  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;0 n! y; ^( s7 B) ?4 y- G# V
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
  p1 B! M, z* \* B% {  $ a/ @/ y9 ~, m% D" Z8 b
  19、使用optimize table
6 X1 W" u* ?9 j3 Z3 C  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
$ T/ K9 c# `! [4 L  ) ]6 d4 T' i) t0 D0 `. L
  20、使用procedure analyse()1 g0 H, O: }- x; D8 F( _5 I: E, l
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
2 u- g! R* O( J4 Z3 X  select * from students procedure analyse();( p; [& A" v, D7 P- f
  select * from students procedure analyse(16,256);
6 Y0 A4 w5 I! J# i4 h1 A7 J1 q+ _. W  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( k+ v- L1 H" a1 l6 Y% I& l7 [$ w
  . S; n" Z7 [8 m: C$ Z& S* \( ^, T
  21、使用查询缓存
; b( n% ?( H2 }0 N  1)查询缓存的工作方式:$ g) C1 ~  V5 `5 ~
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。" Y9 Q, W( B8 U8 k) J6 e
  2)配置缓存参数:9 X6 C; L2 B/ X; B( E! s& }$ ^
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
5 n; V8 g6 ^" @' o- I  5 a( {8 V! I& A& F; \
  22、调整硬件: e6 r! s% b9 T2 Z* x7 T1 K# o
  1)在机器上装更多的内存;; y2 t0 U0 F" A- j+ K
  2)增加更快的硬盘以减少I/O等待时间;' g0 Q! r5 J" s3 C9 A/ \
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
% E; }9 h& Z: {  3)在不同的物理硬盘设备上重新分配磁盘活动;0 ^0 ?8 t: B& n8 C' z& [" L: ?( M* A
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。# K; w& `1 j  i1 k1 o" V6 ]7 p
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表