标题: mysql常用命令 [打印本页] 作者: admin 时间: 2012-9-13 16:32 标题: mysql常用命令 启动:net start mySql;" ~' }7 V& [3 w+ W( N( {: |9 t
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;, x7 Q) q! v" i* Z3 r- V1 q+ ?6 _
列出数据库:show databases; & K5 B3 B, r( M X2 [& B 选择数据库:use databaseName; ) ?: Q% C. M! W Y 列出表格:show tables;) A$ x3 w4 B# \
显示表格列的属性:show columns from tableName; / A; b+ a0 W" S% A 建立数据库:source fileName.txt;, @2 S* M7 k j7 f( f5 r, c
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;8 p/ n, w. s5 j8 x. B9 T/ @7 y$ ^
增加一个字段:alter table tabelName add column fieldName dateType;) j* A5 U! b7 T- o. T- q
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;& l( i: H" b4 J4 I5 r
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;3 e$ a5 u) h$ n- S Y# f
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";. i0 h) [' v3 |9 _1 M
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;% g2 W, r" I7 M6 c2 G4 o) i: |
查询时间:select now(); / ]; H( f1 |4 g( l 查询当前用户:select user();/ N, z7 J; X$ f4 Y
查询数据库版本:select version(); ' `, }# i9 P# o* p% T1 L 查询当前使用的数据库:select database(); 9 ?" k) D$ N4 {9 y' y' F # U/ `# A7 v6 p$ f
1、删除student_course数据库中的students数据表: . b3 |6 n5 K; x) x( l+ B7 z( k; e+ o rm -f student_course/students.* . x' |0 r$ ?: L, V: h9 a+ M 2 n9 \6 P" s B8 z$ @, r
2、备份数据库:(将数据库test备份) ) A$ V" h; E1 n! x* s1 z mysqldump -u root -p test>c:\test.txt % \& d+ M' `1 A: X) ?, v/ O1 o$ ?/ H/ ^ 备份表格:(备份test数据库下的mytable表格)6 f4 n* A/ @3 v/ |
mysqldump -u root -p test mytable>c:\test.txt' f9 C4 t( o, o$ T0 v( x4 a
将备份数据导入到数据库:(导回test数据库) / U5 M! W* l: s7 x* G: y) _ mysql -u root -p test<c:\test.txt% l |4 d$ M& u4 N
: o9 U) z2 T& I
3、创建临时表:(建立临时表zengchao)0 e4 c4 ^5 l: k3 m
create temporary table zengchao(name varchar(10)); " c7 I, d' j. J8 W1 Q! G , }4 g, p! {/ b0 y0 g- V: _' H
4、创建表是先判断表是否存在 ; S9 t* B7 I) \6 u- J3 T create table if not exists students(……);" f4 n- K3 ~: A* v1 d
. o/ H4 F' x6 P) }9 Z
5、从已经有的表中复制表的结构% N6 N% ]1 l: V, U8 Y
create table table2 select * from table1 where 1<>1; 2 y2 I& x% g% x U: j: f H% Q 7 D, R5 ~) n1 a2 o 6、复制表" h( b {* n7 ]) P7 ]' r" {
create table table2 select * from table1;8 \ z2 Y$ p8 f p, Y
& f- ^3 h' e- K7 C& ~! N 7、对表重新命名 , j$ S# V' N* w alter table table1 rename as table2; ! H8 S T5 l9 P, M( j 6 b8 G3 b% y) A" h* k; N
8、修改列的类型8 t$ t4 y9 H- r7 W# {. ?2 R% ^
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned# I7 E, q- h) ^0 z" J6 [
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned# w) Z/ ` \, \; A! g, K2 d
I& L* V. b' D' B
9、创建索引+ k) p+ O& g% K
alter table table1 add index ind_id (id);/ Q# E# w4 M, _6 f1 B m' @; L
create index ind_id on table1 (id);6 ^& C0 D! Y, I: e( J% M' q
create unique index ind_id on table1 (id);//建立唯一性索引 ( ^! c! i2 H/ v6 q' A ; D, Y6 }+ P/ l, T
10、删除索引 0 t4 X; r; F2 _4 K drop index idx_id on table1;) \! ^- b$ a/ z# f u( h! f/ P
alter table table1 drop index ind_id; % B/ b5 M8 J$ k2 k& c6 e 7 N4 P4 z3 w3 M1 o3 n 11、联合字符或者多个列(将列id与":"和列name和"="连接)9 X5 j. T( D; ^/ ?
select concat(id,':',name,'=') from students; # t4 Q f/ ~& N; G w0 `9 P 5 j" ?' p5 |- `" z' g; r# N
12、limit(选出10到20条)<第一个记录集的编号是0> 5 @% h% m/ Z E7 n8 v select * from students order by id limit 9,10;* Z) X: C' B" I1 y
( L0 p8 i; q4 w Y: O 13、MySQL不支持的功能3 ?, M$ ]) w# r$ p2 i w1 T/ h) b
事务,视图,外键和引用完整性,存储过程和触发器% o" ]8 o: L% K$ k3 u
; y1 K$ ^. P0 z) H$ P
1 X* o& Z4 \8 t 14、MySQL会使用索引的操作符号+ s$ g! {' F( b7 q
<,<=,>=,>,=,between,in,不带%或者_开头的like' c* J7 m6 ?6 o( O
, H- p# J8 C4 P9 ]4 u
15、使用索引的缺点9 N- d% @( z/ F; |+ V h4 L
1)减慢增删改数据的速度; 1 C, |5 V {# O0 C @ 2)占用磁盘空间; 7 @1 r1 n; e. j7 M8 ?- B% L& p 3)增加查询优化器的负担; 8 k5 I% f! y/ @: m# _8 E& ]7 E! x 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;3 Z* g+ v2 v4 f" i( v( j" S
8 R9 `$ H" f/ {3 N
16、分析索引效率 1 ]7 {4 v/ y2 r0 O0 L# A 方法:在一般的SQL语句前加上explain;: {# d8 J6 t3 L- [! t: I9 a$ }
分析结果的含义:5 B# U% k) V, E L
1)table:表名; # t0 G/ y" q5 s4 u* {- A$ d 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的; # O r; ]9 l7 F 3)possible_keys:查询可以利用的索引名;+ S" w/ V& V3 `) k: n4 r
4)key:实际使用的索引;9 e9 Q% { j! k$ |# G
5)key_len:索引中被使用部分的长度(字节); . O3 {: P7 m0 v9 n' f 6)ref:显示列名字或者"const"(不明白什么意思);9 m( s+ v7 F9 a# Y
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数; 9 [/ l1 W/ X, O4 j1 c7 x, M 8)extra:MySQL的建议;# K; O4 `( Z. H$ ?+ z1 R0 V! ]9 q
/ d! ~$ n/ v' l) [5 a
17、使用较短的定长列% X! H7 {' \' }) b& b
1)尽可能使用较短的数据类型; 3 f1 ]8 c8 T" n3 E8 a6 D 2)尽可能使用定长数据类型; " C7 i. u, E/ }3 F1 J; H a)用char代替varchar,固定长度的数据处理比变长的快些;. g9 M/ ]" b U7 u' e: D, ~1 X
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能; $ j& Y" f; j9 Y: _* l3 n* a! j c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;; t4 e) t/ P2 ]2 H( v) P( D/ O
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大; - {8 m. l# J$ B. x7 s, p! a6 u( B; S1 J 7 l: W4 B! z$ q! `
18、使用not null和enum 6 ], U$ t! g: l6 u" S( O& _ 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询; / n3 d1 X3 b$ k9 x2 \. G 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;* P3 @/ g8 V2 D
" t5 @2 R/ @% t
19、使用optimize table, |% J" q/ Y6 T4 v+ ~
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表; ' w1 V# y* [0 m9 u - }- z; B8 ?$ h, C$ Q3 d2 j, b
20、使用procedure analyse()% i% V, w, t8 R* e2 a7 d1 }
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如: 6 h6 j2 J8 w! D: ?( F select * from students procedure analyse();. m. x0 I. q7 G: E1 \$ T
select * from students procedure analyse(16,256); ( [- o3 V- B, v4 y. A 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长; 6 g7 n& b4 r& b( Z8 |7 ^ U 2 F; H1 v3 z* w2 f; s
21、使用查询缓存) E8 W' K$ n6 C( I
1)查询缓存的工作方式:, o* |7 D0 n4 w
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。0 D( G7 S, w5 K
2)配置缓存参数: ; J; c2 Y; S$ Y( f& x6 j 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。 0 ?- @) O- y a% O9 { | * E7 H$ F6 m' Z6 [
22、调整硬件 G, E2 b" ]2 Z' h! w. A3 z 1)在机器上装更多的内存;0 ]. n1 m: S" e4 S/ X
2)增加更快的硬盘以减少I/O等待时间;9 S3 Y% k7 p0 O) i" G
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;3 B( G# o+ U. }: u& ~5 k
3)在不同的物理硬盘设备上重新分配磁盘活动; " v- G: I; \, ]. [* n; P) R 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。 . a7 k! }$ ~3 c