标题: mysql常用命令 [打印本页] 作者: admin 时间: 2012-9-13 16:32 标题: mysql常用命令 启动:net start mySql;% Z. _- d* G* z% @) u9 O
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; - f& k9 @ z* J3 l 列出数据库:show databases;" i! W# q4 [' r- X
选择数据库:use databaseName; % \: {0 n) M) a# d6 ?) H 列出表格:show tables; ( ]% W% w% \6 d% v4 f+ n3 p 显示表格列的属性:show columns from tableName;! Y& u& m! C9 G% v
建立数据库:source fileName.txt;5 z* W5 V6 u" L: x* B
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串; 1 K5 T2 Q( b" v9 y. ^ 增加一个字段:alter table tabelName add column fieldName dateType;) }: H( X" l p6 h! B
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;+ i" @, U3 D S9 s& F4 _% p0 k
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中; # l2 U- ^( W- u( E" J6 N 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password"; ! h7 x! @, p; S$ L) h 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;5 A# }6 N# E( N5 [" S$ t0 m
查询时间:select now(); / V) M0 p. g' {8 G5 z5 y1 i 查询当前用户:select user(); 0 t! P$ y7 B2 x& e3 q0 X9 P 查询数据库版本:select version(); E+ C1 u. P4 o4 c- M" @4 U 查询当前使用的数据库:select database();1 t( E2 |) ]3 E: d+ ~, t" y
/ B3 v: K7 c$ a0 J' s1 O
1、删除student_course数据库中的students数据表:: L# u8 z0 J9 u1 V& L2 s
rm -f student_course/students.* / b6 f) z/ M! _, J 8 P6 M: p' `; I* H# Y% |9 Z6 h
2、备份数据库:(将数据库test备份) 8 l! t/ A, _6 l8 N* U mysqldump -u root -p test>c:\test.txt " K$ i: T ~) R3 N 备份表格:(备份test数据库下的mytable表格)$ i) B7 s, h1 P9 H3 g! P
mysqldump -u root -p test mytable>c:\test.txt$ B9 V3 r% E, F6 M5 T
将备份数据导入到数据库:(导回test数据库)/ w& v* \3 M3 l9 Z! D
mysql -u root -p test<c:\test.txt - o; l) |6 S* Z! {' K# g% C. Y 4 }; G2 O4 h @& i% W" G
3、创建临时表:(建立临时表zengchao) 9 j( E% `# J. K7 s" _/ ?- p+ n create temporary table zengchao(name varchar(10)); % ^( j. B: r" ]5 b & e5 Z* m& G1 w# `
4、创建表是先判断表是否存在 2 ^, W$ ^9 ~1 j4 t3 f create table if not exists students(……);5 t- ]8 a5 W, @. Q, j3 y$ c
: p) P8 i W/ ? 5、从已经有的表中复制表的结构5 _, w2 L3 {; o; g2 a) G
create table table2 select * from table1 where 1<>1;6 s* J. G- f$ o, H) }9 y& P
t0 d0 Q: {5 x2 o! p1 l! \6 H 6、复制表3 t; m9 `: O. c4 ]
create table table2 select * from table1; # b6 z2 j6 @1 G7 H " x3 Z& V( c1 h- h" F" u5 ]
7、对表重新命名1 U8 p# u3 K1 M: y: e, E
alter table table1 rename as table2;* _/ s6 z9 @9 P: e" F* w9 t( @
6 w7 z- o4 |$ S+ b: ?% S 8、修改列的类型; Y1 L; X7 B& S, n% D+ g
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned 9 g. ~1 N+ Y# r4 X alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned 4 @0 O2 [+ T4 t4 ?$ I" ` ; O% V, A. }! ^8 c& _* _
9、创建索引4 r" d/ F `% |- R- s7 v
alter table table1 add index ind_id (id); # w& Q9 x: G! H1 n) Z9 `" K create index ind_id on table1 (id); , C5 J- f8 k. K8 z create unique index ind_id on table1 (id);//建立唯一性索引 " s3 m% N q! r$ z* Z 5 m$ _* W8 U# M1 o
10、删除索引4 C. B9 z- h0 P5 E! D$ _
drop index idx_id on table1; 8 {* K9 u4 ~, l- k0 v alter table table1 drop index ind_id;) A" s3 h0 Q/ I1 e
& y$ d" q, [/ | 11、联合字符或者多个列(将列id与":"和列name和"="连接)6 X/ U \0 O. e' f
select concat(id,':',name,'=') from students; H" S$ _/ y- m3 u, n$ n; W
* g9 B5 W1 X) R3 ]4 p; J+ p
12、limit(选出10到20条)<第一个记录集的编号是0> . j# B7 @( Q; O* N select * from students order by id limit 9,10; 8 Y" P4 N4 o2 a% Y7 i 4 ~+ _# S( P) ^4 b5 E 13、MySQL不支持的功能! A' F5 K9 a7 Y+ l9 P' U2 V# o
事务,视图,外键和引用完整性,存储过程和触发器8 l2 I4 ?5 N7 S$ b
8 f7 s4 r! K% r0 @8 B , C$ t9 @" @" h+ s! \
14、MySQL会使用索引的操作符号7 l- Y1 |. h0 f# p
<,<=,>=,>,=,between,in,不带%或者_开头的like, X3 g; G6 N9 ]2 e
; |1 }" n2 i* K. n& E9 J- { 15、使用索引的缺点 2 T3 E4 B2 y3 s# o& ] {+ @7 |' n 1)减慢增删改数据的速度; " ]; R h ?- r/ n1 F) k 2)占用磁盘空间; ; o/ M f% ?+ b4 k 3)增加查询优化器的负担; 1 e2 d3 a; e( A1 K* Z( N 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;, I% Z0 D4 Y! }* Q( y2 v0 z
* {5 s3 L9 A1 Z" X1 X4 `& O* X 16、分析索引效率 5 c# m c- L2 J# }3 g5 J 方法:在一般的SQL语句前加上explain;2 f- s# Z4 a5 k) t& P5 e+ n$ F0 a
分析结果的含义: 2 K# N" _8 I5 p/ e; ] 1)table:表名;0 J( V) [7 I' f6 u+ @2 K4 e
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;# ?) X+ y6 G% Z
3)possible_keys:查询可以利用的索引名;' K; J! V: \6 |' g7 [" V. B$ d
4)key:实际使用的索引; # e; l" }: p3 n 5)key_len:索引中被使用部分的长度(字节); & J" `7 L4 w, k7 ?9 A8 ~ 6)ref:显示列名字或者"const"(不明白什么意思);- ?, ~% J, W) u
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数; 2 I- G9 T( d3 i$ o* |& o$ F 8)extra:MySQL的建议;* W) u( t `$ k, e# Y3 D" [: L
% J" N. p. ^5 p$ x# A% ? 17、使用较短的定长列 2 B$ n$ \1 x; ?" @, j& f 1)尽可能使用较短的数据类型; Q' B: R; j. D2 M- E
2)尽可能使用定长数据类型;% R# H. ]/ D, n i
a)用char代替varchar,固定长度的数据处理比变长的快些; . _" J5 C: E V2 f6 L b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;7 P3 C5 Y5 D8 M1 L( H; o# y! t
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了; . c5 F! y$ o' w: b. Z& a d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大; : a6 }- U) H8 Q0 Q. C, g3 @ 8 ? a& ^3 E; L# _; E0 N% k" u" C% z 18、使用not null和enum" i- s/ C7 O# s. X
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;/ O: j; e% X- x) Y' k3 R. e2 F
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的; 6 [" ?2 [# D: X/ Y* ]0 \) S; R - T( G# S; m) @. a" F4 M 19、使用optimize table! t. z" _; L" C; Y9 k) Y7 |+ c) z
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表; ( H$ I: n" ?. A) N& s % v8 k9 n# c. s4 C 20、使用procedure analyse()9 N- _. L) u' F x+ J1 M2 i# w
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如: $ v$ L% B% S+ | select * from students procedure analyse();- y( G& f5 p, `- \8 S
select * from students procedure analyse(16,256);; k# t! j& }- i2 R
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;% u5 L8 w% V+ n- S