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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;
% |( \7 f9 C. s+ ]3 D  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! L0 @7 P6 I( [# b, [  列出数据库:show databases;: }4 ^0 a) \0 c
  选择数据库:use databaseName;5 N- t, t( N! g5 X8 y" e
  列出表格:show tables;
. n7 Z& l2 X& V' O9 w  显示表格列的属性:show columns from tableName;
. a& i* C% M, `2 P" m, x" x* {  建立数据库:source fileName.txt;
- {+ a8 \% s. ~: Z6 z! R) i8 K2 z* O  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
1 G) i" `* t  n1 ^  增加一个字段:alter table tabelName add column fieldName dateType;
9 R! |+ B7 T( [' D; T  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;* C# r2 V& O8 _* k' n1 }
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
# m/ j: k4 t* m% t" M. \; H  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
* [8 l1 J* l" W( j  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 x" {/ k5 I/ B+ a
  查询时间:select now();
6 }1 O4 ^& ]0 t; T0 {/ h, C  查询当前用户:select user();
' [. w% d$ S3 L! `! T+ `  查询数据库版本:select version();
; r; X" v9 M. u5 e! n, J( O  查询当前使用的数据库:select database();- A8 T5 h; w, f: J. l- J
  0 p9 D& y( z$ y4 C3 \
  1、删除student_course数据库中的students数据表:1 D. ^/ k8 b/ s9 Y+ R& @) `3 N
  rm -f student_course/students.*
. i& x. k0 T2 H1 C$ L6 m  
0 H6 o  ]# M3 V2 M1 c7 l) }  2、备份数据库:(将数据库test备份)
. q7 I# o; u6 Y8 O% D  mysqldump -u root -p test>c:\test.txt
; V" ~! \  p# A) _  备份表格:(备份test数据库下的mytable表格)' d; X% L1 ]" {
  mysqldump -u root -p test mytable>c:\test.txt
, o1 g( S1 @3 u7 K( r  将备份数据导入到数据库:(导回test数据库)6 o- M2 o5 c: f9 b" A8 u5 N
  mysql -u root -p test<c:\test.txt
/ {5 @/ C9 \' n2 c9 I5 `; U: i. R# Y  
0 u; n" ^, R3 w8 O: n! P2 J  3、创建临时表:(建立临时表zengchao)% q5 s* }/ Z) L* r4 ]+ ^8 m
  create temporary table zengchao(name varchar(10));9 F, p& c" g0 t$ u/ y1 V$ H% d
  
% K! @( w( R, S! d, c+ I2 J7 h  4、创建表是先判断表是否存在  L" k5 c% O, \5 E. H
  create table if not exists students(……);
9 c+ ]% r1 L6 L: |7 ^. e& u, ^" \2 G  
$ U. z" ]1 A) U' A: A, f  5、从已经有的表中复制表的结构( o3 u( h4 U0 v& J' x! C+ E
  create table table2 select * from table1 where 1<>1;7 [3 R% Q3 o% L! w& H/ c* W
  + x  I6 x. d6 v4 m' k% J" K
  6、复制表
. N8 q. `7 A1 Y8 P+ w) N# m7 u  create table table2 select * from table1;
- ?+ c) j. `5 c: w' _, ~  $ }5 |/ S5 d$ P$ U
  7、对表重新命名8 ^$ R  x0 |! b; R7 X
  alter table table1 rename as table2;
$ h& C) W3 p6 [( r: x; i! M; @  7 w$ [. T9 s) ?3 ~, T
  8、修改列的类型3 @% i. X8 X" L& C" d& y/ m
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned) _- G8 P3 m7 K# v+ M: K
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
( b2 T( A& T  X) _6 M. X0 i1 S% y    H* m8 S0 g& [2 S, B: D- ?
  9、创建索引
5 S% ]6 B; Z% J  alter table table1 add index ind_id (id);# R# m* V+ [3 U( Z6 |# Y
  create index ind_id on table1 (id);5 ~2 J# H4 [9 i$ e6 A( {& c- t" r
  create unique index ind_id on table1 (id);//建立唯一性索引' O8 R! M% \( ]  G3 b
  
8 a9 K4 t% O6 f# A5 S  10、删除索引7 s5 H0 x7 {& o
  drop index idx_id on table1;
& T' `4 h- }+ y: O  alter table table1 drop index ind_id;+ c0 X5 X1 Y- G# h  y
  8 m0 F3 F' u% k5 V/ k  |
  11、联合字符或者多个列(将列id与":"和列name和"="连接)! q& x3 @; y$ g# u
  select concat(id,':',name,'=') from students;
2 L8 i  R1 I  d6 I+ h7 n* k4 i9 I" w  ; |7 H8 A2 O& [, g& O
  12、limit(选出10到20条)<第一个记录集的编号是0>
5 z& {  f% y0 e" z; L  ^" f  select * from students order by id limit 9,10;
% [, U, k1 e+ Z  $ B, t$ ~+ R/ u" j3 m. }+ z
  13、MySQL不支持的功能1 z# n% w# {/ l
  事务,视图,外键和引用完整性,存储过程和触发器
% O9 v. D* ]# |. I  
/ \9 w& k( C' e: l9 D. {; b+ D6 R  
* ?+ w5 f4 [/ ~" v( y/ l  14、MySQL会使用索引的操作符号
+ m! W. c! `1 K( o  <,<=,>=,>,=,between,in,不带%或者_开头的like
# f  \) C% g! P' v& S  
+ ^. G& @0 a) N0 [: q0 z* _7 B5 L  15、使用索引的缺点
) h# D! Y( L% I6 S3 H  1)减慢增删改数据的速度;+ |' s2 K& E+ N
  2)占用磁盘空间;  ~) ^( w$ _& I' v0 s, Q, q
  3)增加查询优化器的负担;' I- x% i& j6 B$ q. L; ]9 O
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
- g$ k0 V$ X6 u. T( w  ; n6 H" [4 b% \
  16、分析索引效率/ L$ n" h! r' u$ j( S' i
  方法:在一般的SQL语句前加上explain;! S0 W7 z: m$ W4 V7 l
  分析结果的含义:+ V; X' M& g& o( F8 d4 ^
  1)table:表名;! C5 P. ^; h5 y' |" U3 w
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;- N; t: G+ y* g) t, [) S$ F* W
  3)possible_keys:查询可以利用的索引名;
9 _& c* B$ Q( a9 R  4)key:实际使用的索引;
/ F* J  D7 v& E2 v5 j: t  5)key_len:索引中被使用部分的长度(字节);$ S1 i* e) Q# ?( J7 E
  6)ref:显示列名字或者"const"(不明白什么意思);' R8 n" R4 D2 s( _$ A2 D
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
& \1 b' R9 I' k" K$ @" t) y9 R  8)extra:MySQL的建议;
2 P8 u" `& |5 z2 S2 {( x  
0 u4 s  [5 L# a  17、使用较短的定长列
) J8 F7 Q5 h9 @8 \' w  1)尽可能使用较短的数据类型;( k- K; s' B8 w9 G
  2)尽可能使用定长数据类型;
6 U0 ^: Y9 @$ M8 h  a)用char代替varchar,固定长度的数据处理比变长的快些;' n, x9 C7 ^8 |6 N* B
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;' e: t" i' _1 B8 D
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
/ D# ?5 W- A6 \' z# Z  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
# e: c9 r3 x/ {5 _  0 k4 t6 r1 g3 B. G3 c- m
  18、使用not null和enum
3 O( u7 ~3 o' |( H  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
" q! k9 Y# D2 P9 x+ G5 X  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;# _" L1 V$ c3 B& ]9 M4 r8 Z
  
: }3 h7 I3 ~" K9 Q- `  19、使用optimize table, |* z. o3 V1 K6 \! o
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;' Q0 `( R4 E* G$ V8 _' p) H& c/ x
  , t/ z7 F9 K1 `8 U1 z; e, X: c1 k; f
  20、使用procedure analyse()
& m- m9 c* r' q- t2 I  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:5 Y' ~; U# s% w9 Y$ }
  select * from students procedure analyse();+ f+ B: V/ n+ x. l4 n7 A
  select * from students procedure analyse(16,256);
6 u* a7 j6 l+ y0 q; p! M) m  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;+ L6 G, b0 X1 _0 s2 j
  : F/ W/ v; @: i8 q8 W
  21、使用查询缓存4 d- Q, @2 }  i: }
  1)查询缓存的工作方式:, V+ u4 V4 ]- R1 o8 R8 g; S3 g
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。+ T  I& ?0 C2 Y$ D' [( l
  2)配置缓存参数:
" I! ?1 `5 q; b, H0 P+ ^7 ?  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。1 ^3 O0 B  i( \) F+ A
  3 p) u6 x6 e1 l  V% K" S( t
  22、调整硬件
" w/ [( Z. ~* e5 F& d4 p  1)在机器上装更多的内存;
4 }: N( g8 b  j3 W5 @& H  2)增加更快的硬盘以减少I/O等待时间;+ w0 A5 Q. ^. `# Z; q) h$ p" t
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;2 f: }5 w. b& v: n
  3)在不同的物理硬盘设备上重新分配磁盘活动;  }  S: _+ n. k* d2 R2 G2 x
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。  B* j0 {8 [$ m. K$ f8 h
回复

使用道具 举报

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

本版积分规则

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