标题: mysql常用命令 [打印本页] 作者: admin 时间: 2012-9-13 16:32 标题: mysql常用命令 启动:net start mySql; " [% h: l4 Q# x+ C+ Y/ G3 W 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;' P& T4 O) p3 z8 R4 j0 h% H
列出数据库:show databases;8 G* C* T0 I" O: }- _7 v* `
选择数据库:use databaseName; ( J5 r4 p/ n% I) D0 O" U 列出表格:show tables;& V: p/ O. C7 T& \7 N
显示表格列的属性:show columns from tableName; " W% b* E j6 L2 v- s& M& Q 建立数据库:source fileName.txt;9 s. W# `$ W& [! ]0 d5 _ r
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;% R( m0 l% w9 f0 k# F
增加一个字段:alter table tabelName add column fieldName dateType; / K4 T( v- |' X& U 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;& m7 e5 B! n$ k; Q1 F/ _/ ?
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;0 W. g: Z. N3 G6 u
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password"; . Z! _, i) ?0 I4 K: w$ ?8 ^( o5 x# {8 y 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以; 0 O. L) _% }: [% P& b5 m 查询时间:select now(); 5 a( Q s4 S H3 J+ g& G, c 查询当前用户:select user(); ( b; G% }/ L8 h' T9 B" r5 b+ h1 B 查询数据库版本:select version();$ R. \% A8 |6 `2 W8 ]4 n2 V
查询当前使用的数据库:select database();$ k' s( f& ~5 C( u% }4 H
1 O' m$ x: [$ L! _0 r; n
1、删除student_course数据库中的students数据表: 4 ]* s r0 E4 o& X: E2 u n rm -f student_course/students.* + K* z+ k. z* y6 U 8 Z" Z0 ]) ` \- E8 {! o 2、备份数据库:(将数据库test备份) % }3 i1 ~2 m8 I2 c* j mysqldump -u root -p test>c:\test.txt4 W! b; g6 [& c i, N) J
备份表格:(备份test数据库下的mytable表格)/ r. L) }+ u4 O: K3 W3 C1 Y
mysqldump -u root -p test mytable>c:\test.txt 3 I- Z* s0 }! o 将备份数据导入到数据库:(导回test数据库)# G% E# s- r2 A& ]
mysql -u root -p test<c:\test.txt: x/ I; _& j) ^( J. H$ b
# e6 r4 H7 d& x0 y 3、创建临时表:(建立临时表zengchao)* V o; [+ v; s8 K" F% r3 B ~
create temporary table zengchao(name varchar(10));/ b6 M. \8 U, a* e0 n
( B. A& }& v! ~/ S
4、创建表是先判断表是否存在 4 N- J! L. Q- P5 K/ p- c create table if not exists students(……);- P# r+ `& ^ I! Q& }8 U
/ d. D0 b5 E3 l6 w& w, G3 D
5、从已经有的表中复制表的结构/ v' \; h; ^: w
create table table2 select * from table1 where 1<>1; f% f- z; O3 P
6 G& j. M j. K1 G 6、复制表1 _/ Y( S0 z$ R% t2 K
create table table2 select * from table1;+ f" M0 t. J6 G4 t+ E
& r' b% f+ P1 k* E0 A$ m 7、对表重新命名 6 x' c) F/ A9 _) l- S1 g- l alter table table1 rename as table2;- h) H: D! Q- R; f5 E* P2 {
" n+ b/ z6 U8 t9 h
8、修改列的类型+ S4 F% q! m5 w% T7 j
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned( R% Y, ?0 p$ F
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned + H) L% G' S# [) n& Z" J% ~ T % s2 K3 P6 N$ f Y- B. {6 @
9、创建索引" R- }6 s* c; x x' W* v$ @* f
alter table table1 add index ind_id (id);9 S! S R6 p {' i. U) B
create index ind_id on table1 (id); 7 Z7 ~1 ?2 s- ?% ]1 J$ G( p c create unique index ind_id on table1 (id);//建立唯一性索引 " S' g8 H, J1 g+ a Y # \7 s9 A/ ~# W& L 10、删除索引 . p7 E( E, M$ f3 h' O4 E drop index idx_id on table1;% i& l* y5 x3 b' q/ Y8 [
alter table table1 drop index ind_id;+ c. `( d2 F( B3 o+ B" Z7 i& d
1 `. W% k( D/ F; } J 11、联合字符或者多个列(将列id与":"和列name和"="连接) & P$ z6 o& p6 V7 c8 b/ J6 o2 o select concat(id,':',name,'=') from students;$ p0 x& O& q( O! S
0 f, m& Y! Z1 x
12、limit(选出10到20条)<第一个记录集的编号是0> 9 V, ?, s( n% s" G6 ^ select * from students order by id limit 9,10;# j2 t0 R/ {8 m8 U: u( u3 I
$ a q4 n9 _; e
13、MySQL不支持的功能 1 _; F* \0 [% [0 |2 R& w 事务,视图,外键和引用完整性,存储过程和触发器 7 _3 s! }, v& G4 t ; Q* D$ _+ y; P4 L; u 8 a6 r y; M% d- R+ w& p' U9 u2 v 14、MySQL会使用索引的操作符号 & F% r/ o+ T" M <,<=,>=,>,=,between,in,不带%或者_开头的like# V5 Z4 u& P5 e8 h
$ z5 l1 `& q2 c# g9 f
15、使用索引的缺点 * }3 E9 L; P6 }- Y' W 1)减慢增删改数据的速度; 3 _) x8 J0 `' ^# o3 l! ` 2)占用磁盘空间; & S- f8 ?' @9 F5 [6 V0 P1 s 3)增加查询优化器的负担; , ~" Q1 A0 ?, s+ l 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案; - S9 o/ o H; S / J; B# P* j. K9 r( [ 16、分析索引效率 * |! C3 g9 G1 A% X+ E" M) F 方法:在一般的SQL语句前加上explain;& B" p' b+ z" \' M
分析结果的含义:2 m6 a" ~1 o/ n1 a' R2 t' L
1)table:表名; ) U) r4 S q, [) k; s 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的; 9 Z4 X" G5 _6 u) c8 b 3)possible_keys:查询可以利用的索引名; / }- \; a" z2 B9 i8 b 4)key:实际使用的索引;# v4 G2 N, | \ g) T1 v
5)key_len:索引中被使用部分的长度(字节);; K% v+ [( {( S% t( h: Z4 V
6)ref:显示列名字或者"const"(不明白什么意思); + Q% e- K, _& F+ ~ 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数; 7 L Y& I0 l& G; ^& S 8)extra:MySQL的建议;( w( r3 R2 K7 _7 Z
5 x! L- o" P* R 17、使用较短的定长列 % R2 A$ j3 N" i; W8 W0 N$ o 1)尽可能使用较短的数据类型; * z# `2 ]; N! b. m0 E 2)尽可能使用定长数据类型;2 \2 L( D! f8 L5 S
a)用char代替varchar,固定长度的数据处理比变长的快些;3 Q+ M0 |) {( D" ? j' s" e- A
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;6 }% e* j7 f" G6 N- k
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;1 \- _+ b: Z" ?& Z3 R1 a+ b3 j
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;* g- F1 T) \% ~: j) K4 n, [- M' B- x
) [( ^8 q, C; N$ K" T! j/ w
18、使用not null和enum 8 I* k8 S& e' C% r2 T0 V 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;1 W, W8 I r+ B- T; W; C5 t
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的; ) W7 f1 J: Y9 r 3 J6 Z* F2 e) b3 u% } {6 U% h
19、使用optimize table$ W) _. ?3 L, q# @% z0 i
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表; ( }- z6 ?$ @# k5 [# N" M: s' e " Z5 q- N" ?8 J2 g/ \
20、使用procedure analyse()" i3 K h2 a3 W8 x8 h: C M
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如: $ V. q, T7 O% d1 B select * from students procedure analyse();1 o! t5 `2 N+ w3 R g
select * from students procedure analyse(16,256);) s. M( x5 h; M5 \
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长; ' k& d) T4 T* H/ O( U 5 l) t% R5 H1 U; T- Q4 j
21、使用查询缓存& ]; x) A5 h6 V% t# [8 V
1)查询缓存的工作方式:( R$ U* A$ U2 p
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。; [) }. c0 G2 Z$ {2 p7 ]5 f3 A
2)配置缓存参数: 6 r7 }! ~7 w: b: v, n% { 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。' {5 U5 ]6 f5 S" S9 ?2 K
: ^- i) n* X" X* v$ G$ w 22、调整硬件 $ Q+ V. i" U( B! x# L 1)在机器上装更多的内存;9 n" z2 j( w( c% W2 v
2)增加更快的硬盘以减少I/O等待时间; c5 Y8 r$ D. i6 c) r
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快; - `: p' z/ E1 L! l" w 3)在不同的物理硬盘设备上重新分配磁盘活动; # I8 p4 U# j4 G, b. c- V% S 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。5 Z; x) s0 w% q1 n