标题: mysql常用命令 [打印本页] 作者: admin 时间: 2012-9-13 16:32 标题: mysql常用命令 启动:net start mySql;/ s% u( \4 F; b. S; M0 W
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; * T( E) _9 [2 t: |0 V+ W9 @4 I 列出数据库:show databases; ) |( v- [2 b+ i8 V$ x: w: Y 选择数据库:use databaseName; ! E( e& \! N4 e% z7 z9 w6 o9 L0 v- t 列出表格:show tables;, a% v2 x9 V$ V! ]7 A
显示表格列的属性:show columns from tableName;5 [# E! L( \6 @% }
建立数据库:source fileName.txt; , E' H' ]: V2 @, k6 ~& D 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串; 1 H' I7 X8 k/ k. }) R 增加一个字段:alter table tabelName add column fieldName dateType; 8 K5 i. z5 E. n/ K1 x 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType; 6 N& O! ]. |3 e+ \8 ~2 J2 N 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中; ' w5 K& o6 S3 o/ L/ F) O( ?: f 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password"; 5 \7 y% j* [9 \5 E 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 n7 q) `& n: ^; H M' k+ p
查询时间:select now();% l3 @/ F$ H# ~: j3 u
查询当前用户:select user(); }4 L7 \- N5 }( r
查询数据库版本:select version();9 u* u; o9 u6 l- N' {2 t3 G
查询当前使用的数据库:select database(); N2 f) G% M% Z7 A1 k& ]- ~ l* F4 K7 Q# q: Z% i 1、删除student_course数据库中的students数据表: : J5 w* y7 o7 j2 l5 U, r/ u& y( ~ rm -f student_course/students.* 3 E( H% J( ^2 n 5 P5 f( f- V- T/ r 2、备份数据库:(将数据库test备份)- W2 k1 S4 S! Y. \+ b
mysqldump -u root -p test>c:\test.txt + A: `- @3 v+ O9 q& H 备份表格:(备份test数据库下的mytable表格) 5 {3 ^" b- M) T4 F: E/ ` mysqldump -u root -p test mytable>c:\test.txt5 N. j% p' K' K6 Q% V
将备份数据导入到数据库:(导回test数据库) 7 P" Z- X1 B i0 U% f mysql -u root -p test<c:\test.txt 6 [8 L. ]* ^; \8 G Q 5 @; X+ C0 J+ A# o1 e; X, [ 3、创建临时表:(建立临时表zengchao) # j/ M) d' w! L& N% O& d/ v' T. [4 O create temporary table zengchao(name varchar(10)); # ?/ p# y; j/ A& S; v2 l f, ?0 }- V) A4 Q' e3 R/ T 4、创建表是先判断表是否存在, k6 u; u2 ^% T9 C9 t8 ^
create table if not exists students(……); ! q' A3 J# @) p- i4 V2 { & w, x7 s% f1 J8 H' y
5、从已经有的表中复制表的结构 , N g! Q6 o( L/ c+ \$ r create table table2 select * from table1 where 1<>1;! }5 Y# w! X- H$ x* Q) f/ Z2 n
9 L5 j2 T( @! V, e
6、复制表/ T1 ~; Y# U' M- j9 W
create table table2 select * from table1; 6 ]4 V6 M9 I9 m% U: e1 B ) N1 r, ?: | a2 O
7、对表重新命名 ) D% P5 _3 Y) {+ Q2 U0 E alter table table1 rename as table2;0 Z: Q9 q. F7 D- g/ ?7 u
5 t3 s) f L0 u 8、修改列的类型. z: J# H- R* G& P' e5 q; R5 G
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned + S; d. f) q3 g9 R alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned9 W0 [8 w) [# j& I: \ f
- u/ ?4 @( U! \
9、创建索引1 Q2 x7 D% k2 `/ }0 O
alter table table1 add index ind_id (id);" I' x% C* V6 L8 Y2 H5 U
create index ind_id on table1 (id);7 m. }8 v: v" X
create unique index ind_id on table1 (id);//建立唯一性索引3 G B0 X7 y3 A0 g5 R/ |( k/ ]
$ e# W' f7 ~ \9 H2 @- |% G
10、删除索引9 J$ M' S& Z. |7 q
drop index idx_id on table1;# o7 ?6 l, S9 v& V
alter table table1 drop index ind_id;, c; a4 _% D0 S/ k
% P0 E4 E M0 V4 G7 c/ a5 b$ k: R- _
11、联合字符或者多个列(将列id与":"和列name和"="连接) 4 c9 H9 S: q8 W/ l select concat(id,':',name,'=') from students; , Q. y3 ?) y) M/ b1 Y+ d [' S/ V( b2 P ) [( }7 ?1 ?) I7 s- f
12、limit(选出10到20条)<第一个记录集的编号是0>( e8 J# @" `4 J7 w* W4 @
select * from students order by id limit 9,10; % H, f. e X4 c$ ?8 S; F) G 8 x( l4 V6 @6 t3 d 13、MySQL不支持的功能 . q0 F+ O9 b$ N% e% p6 c 事务,视图,外键和引用完整性,存储过程和触发器 ! U: r8 F l% h$ @# d + n; ]% b5 P5 d+ B * y% A; c7 N! Y G5 K 14、MySQL会使用索引的操作符号 ! C+ p0 K; W0 w0 g; ^$ B+ z <,<=,>=,>,=,between,in,不带%或者_开头的like; P' U/ F/ O5 ?' |! \) M
6 U9 z2 x) L& U6 [ 15、使用索引的缺点 * _( E' K1 k/ b* Q2 e 1)减慢增删改数据的速度; - ^- R6 h, O: z% T 2)占用磁盘空间; / h9 @4 ^6 n& F3 a0 A6 W& Y 3)增加查询优化器的负担;% Z$ _5 ^3 a( j8 l, g
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案; q) P* L& g3 R+ W( \1 i7 V p4 o / y# a: Q; ~9 u6 i3 [. J 16、分析索引效率 ' P- v" }) G, } 方法:在一般的SQL语句前加上explain;! m ]. z7 Y' ^- P* S( H1 h
分析结果的含义:* M! u" e/ M) Z! b% X
1)table:表名; + v. U. S @6 i; m 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;: [: {6 U, T+ {+ n& o& q6 L# g& c
3)possible_keys:查询可以利用的索引名;3 Q, K0 L0 m9 m& z U; h
4)key:实际使用的索引; - B: x1 Z3 N9 k; P 5)key_len:索引中被使用部分的长度(字节); / Q D: |2 L7 ^1 r& a( ~$ H9 q 6)ref:显示列名字或者"const"(不明白什么意思);/ y' X' R4 W1 F3 c, I* q! j, h
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数; 8 t$ u5 V" [9 k 8)extra:MySQL的建议; ; K$ O' K0 z& g: V5 i+ o # V/ X/ X0 @7 Q1 h
17、使用较短的定长列+ O- J% ^- k' |( L/ p# c* M0 L
1)尽可能使用较短的数据类型;5 A7 ?; g' c, D% w1 E" ?
2)尽可能使用定长数据类型; & F7 i$ { Q* c! @$ E a)用char代替varchar,固定长度的数据处理比变长的快些;6 a' d" c( C7 O
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能; - V7 K! t; A6 u* i# ?/ s- d c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了; 3 n) G% J+ c. p M3 [/ U1 Q d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;: I1 W/ \8 e' @
% `; g5 b) l+ {( v P: o4 D
18、使用not null和enum ! R) |' S/ B$ d/ C/ Q3 J$ ? 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询; t8 \, c4 D, ?1 K: R( F* ^ 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的; / ?! z" k& ]' ~2 E ; T2 K9 M6 h. f+ c( [; ?2 y. I! P 19、使用optimize table2 C) j: Q0 C- G: e4 w
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;3 @( l: V' }; Q/ W0 @
4 V, ~0 }8 @. i& t
20、使用procedure analyse()( b0 K h# T8 Z+ Z: C1 w2 G
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:1 h' L3 j& a1 r2 n+ ^# `
select * from students procedure analyse();' K, W0 e; U3 e j: V
select * from students procedure analyse(16,256); 2 |1 ^4 u1 _& u3 ?+ P0 @( g0 { 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;8 F+ g* x2 @2 C& t6 c
" y8 g5 v2 N1 i E% U4 c3 U$ w 21、使用查询缓存* u9 H% x: W9 ]) o4 d f
1)查询缓存的工作方式: 6 o# m+ i3 E; w; v; T 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。 S1 [" }& U' u, b9 J7 U
2)配置缓存参数:# I( i, ?7 H+ y/ k
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。 ( q3 `6 V' ]- B( L7 K0 B 3 m" m8 }+ G9 v: X; n 22、调整硬件 & _3 u" q0 {& p# }7 I/ o( Q, T3 R 1)在机器上装更多的内存;: ?% E) A2 v1 r9 v: m
2)增加更快的硬盘以减少I/O等待时间;" `! i5 \+ i* O0 W" b! N/ L# @
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快; " v6 ?6 |5 h. R" C- f% Y 3)在不同的物理硬盘设备上重新分配磁盘活动; q& l" |" `1 b$ v
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。 $ _* R! e B9 v U r+ Y: y% r4 w