启动:net start mySql;- Y' C. n7 j9 K
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
' {! j5 X" |" o 列出数据库:show databases;
+ y! G* M, b/ o. z, w 选择数据库:use databaseName;
2 q4 W' t/ Z, t( w) d+ g 列出表格:show tables;5 k( [3 c: W4 U( X7 E* f
显示表格列的属性:show columns from tableName;
8 W7 O4 M' K8 M1 a: C8 J 建立数据库:source fileName.txt;, z. @* f G- ^- [0 p
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;8 _) Y+ Q% S- p- C: P% E8 x
增加一个字段:alter table tabelName add column fieldName dateType;$ M8 G* |, [3 ]% Q
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
+ l6 A0 h5 k+ R 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;! s. h* M9 e8 I" x7 a, ~
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";# `0 z: a0 o; }0 Z
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;- d, {' y5 `( J7 r/ o) V+ `
查询时间:select now();
/ Q+ I; a* S* }6 y( C7 k 查询当前用户:select user();& i" x5 m7 \! ]3 I
查询数据库版本:select version();
, _; l; O8 F, u" ?6 b: w 查询当前使用的数据库:select database();
" {8 _9 q9 U7 `% ~0 G$ p/ u7 q % e3 d, j4 k4 v7 C* e
1、删除student_course数据库中的students数据表:
) k; I1 ^# O6 V! w$ q; E# A, v6 r rm -f student_course/students.*! k i m; o. B* U& s6 e- D# e
& |3 r( I5 D! Y) u: h) f( \4 ] 2、备份数据库:(将数据库test备份)
k$ ?" \( N3 Q; m mysqldump -u root -p test>c:\test.txt* s5 |' A/ v# p5 m+ `
备份表格:(备份test数据库下的mytable表格) Y H- p" J4 P' I, D
mysqldump -u root -p test mytable>c:\test.txt A- c2 [* b0 L( z+ O9 B3 K
将备份数据导入到数据库:(导回test数据库)
- O2 z7 O5 x) g v6 P5 t mysql -u root -p test<c:\test.txt
4 s) ~3 P' X/ @; g' c% e
; j' j3 n, C5 o. P5 i 3、创建临时表:(建立临时表zengchao)) W+ B: a; `+ ~+ E
create temporary table zengchao(name varchar(10));
) Y6 x& ]/ Y* V: [6 s + \" h! s7 I+ [3 U/ s: Z ~: w. J
4、创建表是先判断表是否存在
- Y) Q$ S( j' \% T0 D create table if not exists students(……);
* ?0 b2 K6 r2 q
" `+ W8 ^, r2 R b 5、从已经有的表中复制表的结构
V9 d! k" t$ O) N create table table2 select * from table1 where 1<>1;- r5 ]0 g0 f% B4 k8 X2 J
0 q+ I1 Q% o# C
6、复制表, H/ t% x a( c6 D+ o9 ~# |
create table table2 select * from table1;
, h6 S4 M9 K) S) V. x$ o
/ b3 P! M9 x+ d4 j, z 7、对表重新命名* N7 y3 n& ]+ H! l z5 [
alter table table1 rename as table2;. ^- z6 }( U7 Y8 ]" W. a' u/ k
( p5 Q) |6 d: L 8、修改列的类型
$ D4 _3 H- R7 P& y0 W2 g alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
8 z$ F" y6 z" ]) c1 m! u- i. z8 T alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned2 J; V9 I+ q2 _& }4 \0 n
" u, [3 e" ^( S) Q! J/ A
9、创建索引8 Z$ M8 G/ @+ y" T4 K
alter table table1 add index ind_id (id);, D& L: ~( H; a; ^
create index ind_id on table1 (id);
" J( m' B, |" ?. c create unique index ind_id on table1 (id);//建立唯一性索引
3 o& Y G, W0 e 5 G J5 i9 b( g' s9 l( q# v: G
10、删除索引
. {8 w2 d- H( h1 i, ~/ u& |' y z drop index idx_id on table1;
0 ^2 q$ J" E( S alter table table1 drop index ind_id;
5 h# ^! `4 V. l. J! J7 ~% z* L5 Z
- Z7 s1 r# g- L4 d, J; J+ A 11、联合字符或者多个列(将列id与":"和列name和"="连接)# O% Z' v) K8 Q0 a7 w$ |3 y& B( `* A
select concat(id,':',name,'=') from students;
- N' y) F) `9 ?4 C2 ? ( a4 |, O0 \1 a1 K" w$ [8 q
12、limit(选出10到20条)<第一个记录集的编号是0>- t, E- ^ @& O+ m; P
select * from students order by id limit 9,10;
8 _/ D7 b7 e, @/ X8 x) c. B 3 d7 G9 Z4 _" _1 u% F5 [
13、MySQL不支持的功能
; C* Z0 S& i5 c3 V% z4 u+ A) z& d/ k 事务,视图,外键和引用完整性,存储过程和触发器; S! u; d& ?& W6 j4 S: @/ ]
3 n0 W$ i& V: y; J! G" v' A
C7 g0 @ z2 l/ \# s$ v 14、MySQL会使用索引的操作符号4 @: D& w0 l) E+ i7 N+ B4 u
<,<=,>=,>,=,between,in,不带%或者_开头的like. H# V8 l9 T7 D( O! b" j2 I4 z
% H" J* W2 m0 z8 r( X, {4 i) ~9 @6 } 15、使用索引的缺点" P. E% Y8 ]3 f* _& ]4 w1 F
1)减慢增删改数据的速度;
6 N, E- V% N& k 2)占用磁盘空间;1 _( c! J: e! ~% a: t7 c+ m1 e: Q
3)增加查询优化器的负担;& V# J* _# m2 R7 y" I8 ~
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
) p" W6 c6 h; n" D4 v/ y3 G: R & z Y% y% U+ G6 w! f/ c9 o
16、分析索引效率
D" i' D, M, G+ { 方法:在一般的SQL语句前加上explain;1 G, F1 k* \" m, k% `! @8 ~3 |
分析结果的含义:, @9 T% m% B# S- R* w' s1 ] h# [/ O* Y
1)table:表名;
' j+ R" N7 E6 I$ b8 d" x 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;7 Y% B* a1 @( k+ s# e1 M
3)possible_keys:查询可以利用的索引名;
$ I3 v0 u, L8 [ 4)key:实际使用的索引;
- }8 O9 H3 i8 ]' | 5)key_len:索引中被使用部分的长度(字节);8 b1 j- a; k$ u* O0 T
6)ref:显示列名字或者"const"(不明白什么意思);
& |9 z+ J: {- E: j: I 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
3 n" R& O0 X# Z. V4 y0 ?+ c 8)extra:MySQL的建议;
. ]/ O; ~/ M7 G* D& i$ z
" o. P/ L7 @7 k! g. M, G 17、使用较短的定长列
) y" j- n& a: C 1)尽可能使用较短的数据类型;; N2 M; |5 p g. `5 Y
2)尽可能使用定长数据类型;( e& P+ ?. j6 T- ]0 o: l* L/ R
a)用char代替varchar,固定长度的数据处理比变长的快些;
' v8 T3 N7 I0 ? Q6 p* s b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;! Q {/ }' ^9 h K( s# |& _. E8 B
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
5 o7 a3 D9 G) K5 F8 A d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
_: |& }4 {1 t7 A5 N& Y) T. `
5 }; F& Q% A& K" F 18、使用not null和enum* |* b4 G3 Y) E6 D" T
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;! ?4 I6 K# j! F2 Z: Z
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;5 f" a4 l/ V' I) o! w( c/ ]
U6 M( D# T% R; t7 x' A0 F/ e" U
19、使用optimize table6 j% n/ {) p, e7 ~
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;0 P* G7 Z0 ]. x9 }! ] v
) }9 K! {, g( j5 U* v 20、使用procedure analyse()
: e1 H4 B! N% W* g 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:. R3 D' m1 s! T; P0 N8 p# h
select * from students procedure analyse();
8 E+ M; V% q3 l select * from students procedure analyse(16,256);0 S* a/ `" `: o1 F# q
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
- I }2 _) o, a K2 I- D6 g # |! ^6 w- r7 V Z& j! x' h( b4 y
21、使用查询缓存; M) b- r1 W$ {* d- E+ F8 Q) k
1)查询缓存的工作方式:
9 B& Y# e$ w" \: O; @1 f/ _ 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。$ F N# d; Q _/ q7 m
2)配置缓存参数:
8 `7 E! \: ~. q5 L! v X 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
) M6 t8 F7 n Z: t8 P! o) V9 R
) t- l) |) g8 D. C" _- q+ Q2 Y 22、调整硬件
, P, o- @) M4 i! M6 a 1)在机器上装更多的内存;) ~" t+ \- L7 k0 R: ~7 j
2)增加更快的硬盘以减少I/O等待时间;
) i7 ^% x( z. A* C5 E) x0 h* R 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
. h! {8 `: x1 g 3)在不同的物理硬盘设备上重新分配磁盘活动;9 L5 {5 t V% f' u3 m. e5 X- O8 _; z2 L
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。4 ^$ ~1 t z! ^0 e: A0 V J+ f
|