标题: mysql常用命令 [打印本页] 作者: admin 时间: 2012-9-13 16:32 标题: mysql常用命令 启动:net start mySql;. J, x: [4 P; V! S
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; . h X) @: Q& D6 X4 E/ y6 V' C 列出数据库:show databases; ?, z) i9 d+ A' m- S8 M* i3 ^ 选择数据库:use databaseName;" a3 j4 ?- P' T: C+ A# X
列出表格:show tables; " D8 j0 v2 \$ L$ r 显示表格列的属性:show columns from tableName; _* d. u3 u: J- M* Q; {/ P
建立数据库:source fileName.txt;' |* C( ?% w# Z4 S1 c% A, `1 k1 l
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串; 7 s! Z; ?; s& z9 R% b4 m7 O d* Q+ q 增加一个字段:alter table tabelName add column fieldName dateType;2 @1 F; _( {- L9 @4 P3 o0 V
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType; * w' L- \( G9 C! J6 z2 S/ @6 x# K4 t 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;7 i( d6 k1 V2 p) \; l
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password"; ! J: P% V3 ~/ F) q& w2 Z$ Z( J 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;- A2 Y8 q2 D$ Y; D- ?8 h4 N Z
查询时间:select now(); 2 w" O* l5 }9 p7 {2 L8 L+ q 查询当前用户:select user();* _" J0 C! F5 }! L N
查询数据库版本:select version(); - r1 w) n. I1 h+ ?8 L1 Z' T 查询当前使用的数据库:select database();* d, G- W2 z y3 D, y7 x5 [. s
8 R) r* [; t5 ^' M- L) W3 ?8 ~3 C
1、删除student_course数据库中的students数据表:$ R: |& p+ P0 m5 Z
rm -f student_course/students.*0 q Y' e/ H9 j( Z0 M# A
' _4 h5 W" |; q0 z# N; ?$ F
2、备份数据库:(将数据库test备份) + d! B# w+ w4 [- b mysqldump -u root -p test>c:\test.txt% u& E! B; A5 x$ c8 O
备份表格:(备份test数据库下的mytable表格)* P6 N2 [. N: m; _, _/ A- a
mysqldump -u root -p test mytable>c:\test.txt 5 K$ }* l& B; C) B: v+ p; ^ 将备份数据导入到数据库:(导回test数据库) % A/ ~5 l1 A, O9 y+ o mysql -u root -p test<c:\test.txt0 X7 e5 E$ m+ O
0 K, X4 C2 r0 E2 w" ?; i2 E0 \ 3、创建临时表:(建立临时表zengchao)! J$ ^0 |! k4 p4 Y& e+ Y. H ?! D0 ]2 a
create temporary table zengchao(name varchar(10));5 T5 I" m) V: q! d6 q9 o
; K6 T; P8 X/ T- E
4、创建表是先判断表是否存在 6 f* n6 R% Q- M- D8 [9 x create table if not exists students(……);8 }1 l% z' w0 p0 v. e4 U1 V2 y
0 `0 V. v2 D. `
5、从已经有的表中复制表的结构- V3 B3 l G2 {
create table table2 select * from table1 where 1<>1;+ j: N8 f' G( G- N3 z
8 f6 v9 d+ K. D; U! ?$ @ I 6、复制表 ; u! H4 ^/ I" ]4 x" X- Y create table table2 select * from table1;5 }; H% Q8 j2 ]& f+ k/ c
% F8 ]) n# D2 ? @% {* S+ G
7、对表重新命名 - g" W3 Z' q% A" A% a) k alter table table1 rename as table2; # `1 W+ L( j. O' u8 Y' f ( C3 V9 {- J2 b( C8 x6 m 8、修改列的类型+ v9 ~8 \+ p% v7 \
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned# I- @+ t4 z8 `' _5 V) T* l
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned5 J& I! e: m5 A$ J
% h; H: S9 r3 Q, m' H2 M t- K: ~( i 9、创建索引 $ C6 F% m2 s6 p- q# g! Q2 S A! Z alter table table1 add index ind_id (id);5 T/ J: n8 s* \5 j7 {
create index ind_id on table1 (id);( S9 L0 {' W9 g. k
create unique index ind_id on table1 (id);//建立唯一性索引! P8 h& o$ i, _3 }; @$ b, }
5 g' z y. z/ y; @* b( e
10、删除索引/ \5 R, ?! i' }. S
drop index idx_id on table1; 3 V1 D8 M1 j6 K; L: W8 U" z* E alter table table1 drop index ind_id;. C; W% h! r; B+ l, ]4 a. J
3 ]6 t$ L7 a: i6 i; ]0 Y
11、联合字符或者多个列(将列id与":"和列name和"="连接) 1 b v4 P$ G N1 U3 f1 ^ select concat(id,':',name,'=') from students; 0 t( h& Q& D6 I( [, y$ ^ 4 h/ v, e" D8 Y+ e9 \ 12、limit(选出10到20条)<第一个记录集的编号是0> $ s6 @5 G9 ?) L! T# ]$ S select * from students order by id limit 9,10; 8 f1 d* L' A( D2 [ - H; S, L7 S6 E/ m, a# T 13、MySQL不支持的功能- U2 q1 F3 s1 i* O
事务,视图,外键和引用完整性,存储过程和触发器9 h5 {8 l5 A( X) F8 O
7 s! x! V: B' O. m 0 |! |3 N; C. B- s 14、MySQL会使用索引的操作符号5 D5 D. d/ u# w' L3 l) b8 n
<,<=,>=,>,=,between,in,不带%或者_开头的like, s/ J" }7 W* X- C8 ], E# Z4 C
) t. j6 Y; u' @' o2 z" e, |: V( | 15、使用索引的缺点" n- ?1 d1 B- R6 I9 j# i
1)减慢增删改数据的速度; - I$ s7 x% @7 k7 E7 o2 } 2)占用磁盘空间; . t; n3 _ l/ N 3)增加查询优化器的负担;, j6 w* G2 O3 `; R6 l
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;6 f, L% ^5 Y8 [+ D' U
7 \; g9 w. B( u9 o0 g2 A 16、分析索引效率 6 T2 V. E7 k9 q& f/ _- T' { 方法:在一般的SQL语句前加上explain;& o) \8 O @( e. ?- n
分析结果的含义: 9 }! Z& V6 P. }& p) W( F 1)table:表名;5 b. L0 e1 Y. ^" t# c
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的; 7 d: f* G2 V$ l 3)possible_keys:查询可以利用的索引名; / k0 s8 W i1 L5 u/ v; J" J 4)key:实际使用的索引;! _: L8 [ `% J* \3 y8 f. x
5)key_len:索引中被使用部分的长度(字节);. I2 Z9 d W# ]% O$ r$ t( h/ Q2 W& ^
6)ref:显示列名字或者"const"(不明白什么意思);# C, z# Z+ m- |: @( W
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;0 h* ~! o/ @: ~+ z0 O
8)extra:MySQL的建议; & H$ L; E$ E# `; \" K0 F3 h- E 2 n* e$ U$ H, N 17、使用较短的定长列7 G& A: K2 @3 y( O# O! t
1)尽可能使用较短的数据类型; & J3 Y6 ]; v1 v7 ?' w; H 2)尽可能使用定长数据类型;& M3 u$ F; K+ d! J# s5 X
a)用char代替varchar,固定长度的数据处理比变长的快些;/ T9 c" ]6 b5 r$ L$ e
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能; / A X& T7 ?& G. V c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了; ! O6 j6 t% ?5 y# s; q1 L4 `. d d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;" J7 @/ |- M$ p
4 R7 I Z- F) v# q: m R5 [9 g! i 18、使用not null和enum" n; i5 `: c# L! @4 E w
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;# U) p# r/ i# k' W/ `: N7 \
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;# q: l0 ^) I' N W7 b
+ p6 B. ]- [0 @( p1 h 19、使用optimize table: ~. N4 ?. B+ s& ^& H! A
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;1 ]' X. k4 ^4 x
' w6 [ M1 D" [; [ Z
20、使用procedure analyse() " l0 X, |7 x3 |& D) Q 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:( e. y$ @' w+ Q( D4 @" i5 G3 |; h) Y
select * from students procedure analyse(); $ x3 R. |! i. E3 C; B select * from students procedure analyse(16,256);$ L# d+ a* I# q, |. N
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长; ) i/ M4 J# N" |1 Z2 n2 ` # f/ O. Y, U$ o% g7 T8 o6 j$ {: U 21、使用查询缓存& E. r, X; m1 ^4 |" {9 a/ q2 A6 C
1)查询缓存的工作方式: ) S; I( I. M( x9 p8 d1 C4 y7 ` 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。 . b+ F' `5 G$ W! E5 ] 2)配置缓存参数:5 ]3 r( P. ?! \: Q2 h+ p
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。 * h( S9 f9 q6 M' m7 A2 G " i# M3 g) X8 ]" X2 ?
22、调整硬件 * k5 N/ F3 z' P( \ 1)在机器上装更多的内存;2 A$ I+ h3 T' {
2)增加更快的硬盘以减少I/O等待时间;0 T7 ^7 r8 R$ \0 n7 I
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快; 1 _3 T( g c9 D% ?1 |2 B 3)在不同的物理硬盘设备上重新分配磁盘活动; ' e* h8 E5 U$ N- m 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。' U1 j4 M) c9 ?6 b" A