启动:net start mySql;: j9 V9 g ?" h, y2 K
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
y/ b- G e4 j8 l9 a 列出数据库:show databases;
' M; o0 s- p Y; j, r5 P h# g 选择数据库:use databaseName;
' W, ]- l; o7 s# E- ]: ] 列出表格:show tables;$ [2 p+ w: V' @* a; z
显示表格列的属性:show columns from tableName;
1 z- M/ f. F* h& F u 建立数据库:source fileName.txt;0 `0 W0 b. ~# J1 P9 W
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;* w2 _8 b& N/ @( |! i! j. L. V
增加一个字段:alter table tabelName add column fieldName dateType;
$ T( A# _ d) t9 w# S7 ?7 j# f- z4 V 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
% ]3 G+ v7 X8 B 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
6 o7 s+ _$ V/ j- m) ^ 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";7 `- I: g+ P+ d$ @. T
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;/ @5 u& V9 A) x# D" t" ?1 B
查询时间:select now();
# p, o: ~! M' w( B$ O 查询当前用户:select user();! `+ b; D, r, S( d% |
查询数据库版本:select version();# T5 q8 r/ B" n6 m
查询当前使用的数据库:select database();8 n+ i a9 |' g U, x4 n
; T. Q8 V7 ], g2 D- Z8 P- r6 W 1、删除student_course数据库中的students数据表:
- _* `8 t0 t1 J" _$ |2 t% O0 c rm -f student_course/students.*9 Q8 C$ Q1 V2 J5 z5 O) J/ l" q
/ j+ u, }$ l' [; E5 a+ i3 c 2、备份数据库:(将数据库test备份)
. w$ {. s5 ]: c" i0 e& I7 B mysqldump -u root -p test>c:\test.txt* o$ k D' c& u6 R
备份表格:(备份test数据库下的mytable表格)9 |- V! U) c, V/ K
mysqldump -u root -p test mytable>c:\test.txt
6 L0 x4 d0 z1 Z; h/ V 将备份数据导入到数据库:(导回test数据库)8 C* c7 ?! \) Z& Y
mysql -u root -p test<c:\test.txt
/ ~9 n1 p1 v+ f. G2 x5 h4 T ?) F
# h. V9 p% t1 O1 T3 E i3 f/ G 3、创建临时表:(建立临时表zengchao)
$ V2 N, n0 G9 z. _, S4 f create temporary table zengchao(name varchar(10));
+ z- d3 J0 h& b- Z, P 2 j: c, j- ]: m( a% K1 y' c k
4、创建表是先判断表是否存在 n, Z3 t' j8 c( N8 w7 ^
create table if not exists students(……);$ x- K* b* ?+ m) t
7 x* B' w; H5 k7 Y
5、从已经有的表中复制表的结构
$ l- s3 ?2 b8 N6 C5 \6 @% K create table table2 select * from table1 where 1<>1;
( o2 q9 W+ n; y3 ^7 g' j 9 d* j: G2 d9 J" m
6、复制表& E) m3 P6 _! M% x+ M) D. J
create table table2 select * from table1;* [2 e9 f6 }, z4 x% Z' W5 Z
( V& _1 F2 p5 E) q0 y7 G4 z& V
7、对表重新命名
3 S& i0 {$ B! j3 k7 _7 D Z alter table table1 rename as table2;
/ ~4 N, D0 T( O6 Q! O/ | 7 |- G! e" D; ~. w( f
8、修改列的类型
4 t3 Y* T9 U [3 V- _7 e6 k alter table table1 modify id int unsigned;//修改列id的类型为int unsigned5 M6 |% l( j6 L" t
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
: F- H0 v5 B4 C# X) w
) B z" g! ?$ V9 |' F% @ 9、创建索引
1 z5 _% x4 d0 k. O( D" H+ k alter table table1 add index ind_id (id);
1 j9 h- x5 ?9 C7 E create index ind_id on table1 (id);5 C8 d% _+ J3 F4 B9 G7 T
create unique index ind_id on table1 (id);//建立唯一性索引' K8 ]. n9 g1 K* V& ~; c0 G8 r
. I4 M, } C* k( ^7 t: i2 t 10、删除索引. H* q ]* z" f! R0 V* I0 I* p
drop index idx_id on table1;, K% r# \- t+ j. C" L: q8 @
alter table table1 drop index ind_id;8 I5 w7 X& U& e" y8 N+ o
8 k" _7 V+ I/ \# `! _% h" g 11、联合字符或者多个列(将列id与":"和列name和"="连接)0 O z3 e) K `" m3 ]# `* v
select concat(id,':',name,'=') from students;5 P! i }& g" d
5 ?8 q, V! A8 ?. ]" I" c! z 12、limit(选出10到20条)<第一个记录集的编号是0>
^( C, Y! H3 R- f+ Z: w' D select * from students order by id limit 9,10;, p2 U9 G$ A! E# ?+ {, V
5 A5 ` ]) x, l% o0 X 13、MySQL不支持的功能/ X, [9 @5 k8 u7 c. _( X+ H( j
事务,视图,外键和引用完整性,存储过程和触发器
* i& Z$ D* h, G4 l, T8 [- |
5 H! j7 J0 ?! m" P9 c" C
D% }/ z0 E7 E1 u 14、MySQL会使用索引的操作符号
" G( B& j c7 K) ^7 x <,<=,>=,>,=,between,in,不带%或者_开头的like! K3 l. z% C! X7 c
1 U! t" N2 W# b' i% t9 d7 A6 i
15、使用索引的缺点7 O5 T7 R, v0 D5 o- e) e
1)减慢增删改数据的速度;
; b1 r( H. P# Y. m ] 2)占用磁盘空间;
+ ^& b6 O9 t9 M ?" ~' l 3)增加查询优化器的负担;0 K3 p$ ~7 [1 T3 C% A& G+ `9 R
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;. ]7 Z' E0 X @5 E1 R
' O4 p9 Y0 K! z* v% ~7 ]0 ? 16、分析索引效率" b! A0 R; C# ^0 X" {
方法:在一般的SQL语句前加上explain;
2 P8 M) B% p# o; E 分析结果的含义:
$ B1 |& b1 a# F& l2 i 1)table:表名;
% z6 P' j& t: w! I9 j 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
, z& J: G) D& L% q0 o 3)possible_keys:查询可以利用的索引名;
+ g4 y$ D' Z6 v. F 4)key:实际使用的索引;
' {! V; P' _& Q q6 r/ I 5)key_len:索引中被使用部分的长度(字节);0 F, G+ f3 k0 d [8 _( W2 w
6)ref:显示列名字或者"const"(不明白什么意思);7 W8 a1 ?# P5 [" Q* v; Z$ Z$ ?
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
; q9 c+ C$ E$ T5 A# c 8)extra:MySQL的建议;
. _* m$ J$ n$ K2 g+ q1 k% Y/ x * w( g) A5 E; q/ d# p
17、使用较短的定长列7 j" h& |( C$ F3 m/ U& k
1)尽可能使用较短的数据类型;& h+ t: z: y+ m1 K
2)尽可能使用定长数据类型;
0 Q% I) s _- P M& L% i a)用char代替varchar,固定长度的数据处理比变长的快些;8 a W# T8 w' _
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;- u) K6 ~+ U! I' _/ M# N0 p+ X0 d
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;9 E( I: K. u- {! A9 j4 I$ Y; l# R
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
( }- E3 w$ ~2 e/ S- b" b) w. O
* M8 q# a C! J 18、使用not null和enum
7 w2 e3 Q, [9 M$ n& z, }3 M 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;% L3 Z" Y* ] G$ [ t/ Q
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;) X% s8 t6 U5 ?7 O& R
* a) d( S5 j; a* _3 S: ~ @% N* X 19、使用optimize table
. }9 Q5 {" R+ g, I( G/ I( R 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
9 _; [+ O/ N A8 P
f0 l0 I- K" y! R0 T( H& r 20、使用procedure analyse(). W4 J/ g4 i7 J1 x/ v
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
7 \) w, t1 p3 z0 I0 f select * from students procedure analyse();0 M# A2 k# @7 n0 v) _
select * from students procedure analyse(16,256);
4 B" m) e5 r% V 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
) Y2 a8 _6 N& U
9 M9 B3 x# r9 [. U( s: ?4 x 21、使用查询缓存% z9 |- w1 a& }& Y- e
1)查询缓存的工作方式:5 a6 z, a( y% \. l* e/ j2 V! h& Y- M; U
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。7 v8 n% Q3 n, g* n: N' {2 ~
2)配置缓存参数:
+ x4 H# G. O3 N8 b 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
@2 U* `6 ~8 u, v% W P1 T % \4 Y2 a) W3 [: c
22、调整硬件* g! ]( r" P+ ?% c
1)在机器上装更多的内存;' f E1 |# ~* h9 ~& M: d
2)增加更快的硬盘以减少I/O等待时间;& q4 [2 i/ e4 q4 u; r4 |
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;+ U# k6 b: T9 f$ ~" _
3)在不同的物理硬盘设备上重新分配磁盘活动;( o2 G' w! L v# I w2 h
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
6 P8 r0 B2 q3 v i |