启动:net start mySql;
2 o$ Q! p+ S1 {$ T$ p 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
2 P# R$ i% ?3 j 列出数据库:show databases;& ?& _" U3 S0 E! C9 x) `
选择数据库:use databaseName;7 D2 L5 C0 T4 z8 @' B) o
列出表格:show tables;" `! s3 w c6 {2 F( h
显示表格列的属性:show columns from tableName;
. M t; D! z) L8 [9 | 建立数据库:source fileName.txt; M. e# K( [% f4 {) w. {: b
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;8 a: ^6 r. H( V& l0 m3 q
增加一个字段:alter table tabelName add column fieldName dateType;$ K1 s9 g4 V" |" I% ?& y0 M3 u
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;! g$ L! g' m# J
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
- J' e4 W4 b* ` 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";3 f) [# k% _, w l
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
: V3 z2 k& T5 Z 查询时间:select now();; `5 y3 E4 `, v9 J, s7 o% c
查询当前用户:select user();
7 q, }$ O) M$ e6 ~1 p 查询数据库版本:select version();4 q# C; a9 D! V* k% t6 F5 K
查询当前使用的数据库:select database();
t! a) V3 \( M 6 V, s# N/ C& B
1、删除student_course数据库中的students数据表:
- S- x6 a) ^" B rm -f student_course/students.*+ v# f: C5 c- B8 Y4 Z
7 U/ @& p ]6 [& F4 d 2、备份数据库:(将数据库test备份)7 _3 h K/ y% H F7 {4 Z
mysqldump -u root -p test>c:\test.txt
8 `8 a: I _4 l2 c 备份表格:(备份test数据库下的mytable表格)
! b/ N) a- _5 u; f3 `( [ mysqldump -u root -p test mytable>c:\test.txt
& F% y( i0 {( C" d: m9 F 将备份数据导入到数据库:(导回test数据库)
1 u+ q0 Y( i: E8 @, | mysql -u root -p test<c:\test.txt b4 c' H- `% M d: S% R
& S4 o7 d D& x: X! o2 p
3、创建临时表:(建立临时表zengchao): c) n3 K" H. N0 G
create temporary table zengchao(name varchar(10));8 @" d1 B0 O: r: }' \8 c2 w
; \: s9 ?5 c, f 4、创建表是先判断表是否存在
}8 L* K: i8 d) F( q create table if not exists students(……);
9 m3 V' B; c3 l( Y& T+ q8 ^/ x5 q
- [9 ^; ^! r/ p2 i 5、从已经有的表中复制表的结构3 c' N! e0 `. P, h8 g! r
create table table2 select * from table1 where 1<>1;
1 y9 ?$ N) d2 v( R ) |0 W9 R' P+ s% f
6、复制表6 h; _; a4 X) q
create table table2 select * from table1;
: v# m, L- ]1 j 9 b! o" J6 g& l/ ]# x* B
7、对表重新命名
2 p2 ]2 a# a6 A2 l( d* Z alter table table1 rename as table2;! E$ I: n+ N6 e; R5 a
: M$ ~* ~/ J" ^2 V J" U2 x. E- |
8、修改列的类型
6 P8 z3 P- I% d2 ?& k2 B5 A alter table table1 modify id int unsigned;//修改列id的类型为int unsigned# ]* O# T3 r, R6 o
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned: H" g; D5 S) A& P0 y! r0 m
& m. m8 Y- l- H8 B1 k# R8 W
9、创建索引
8 X9 H( J5 B9 E# p- H1 [ alter table table1 add index ind_id (id);5 Q9 O9 Q5 q2 G8 ]9 ~
create index ind_id on table1 (id);
; v6 u9 D' ^ _- K8 q- S% b create unique index ind_id on table1 (id);//建立唯一性索引' x/ `3 G; ~! i0 u8 U. q6 p! |& E& T
3 o5 F( @' A: v- y9 H& e 10、删除索引
+ Y' }% I! J; o2 C: T drop index idx_id on table1;) D% }; V1 J$ p8 t! r% h
alter table table1 drop index ind_id;( P* c8 I8 P, x& t* V+ l' Z
$ n1 c% d3 M8 ~5 E7 `# X6 U 11、联合字符或者多个列(将列id与":"和列name和"="连接) A) {: X) ~ G
select concat(id,':',name,'=') from students;
) c3 U! T% B8 H
/ S, G0 S! B- |& p 12、limit(选出10到20条)<第一个记录集的编号是0>9 s; V8 a8 n/ _4 J# b; R
select * from students order by id limit 9,10;) i! _/ \' f$ V2 s, V
! r% f9 v7 }, z3 k9 a
13、MySQL不支持的功能
) N. U1 J# |- w; }; X 事务,视图,外键和引用完整性,存储过程和触发器
2 ]3 Q6 m4 l% G" @# C: m% l! U' v0 Q ! N) @& b Q1 z; d
3 `" |, l$ K* m) e7 p 14、MySQL会使用索引的操作符号 i& Y. g' T6 j: M( c
<,<=,>=,>,=,between,in,不带%或者_开头的like
$ y; H' H3 Z, k8 g% z
2 e. ]( b) ~5 Y) v. U 15、使用索引的缺点
" ~* i& W' {- O' R) j 1)减慢增删改数据的速度;
+ Y: x+ D3 p' g( a 2)占用磁盘空间;
- [0 s$ `9 [* O 3)增加查询优化器的负担;
, ?$ a" p4 X% B8 h9 r1 g9 X1 b/ U) U" F 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;) N! y- |* M! t9 t( }
" ]; q: a9 f8 W* w) M- \4 ?- k3 C* ] 16、分析索引效率5 `) I' ?, {" }
方法:在一般的SQL语句前加上explain;) o) }6 h$ m& N6 v" j3 S$ w& \+ B- ?( t
分析结果的含义:& O2 s% R% P. X! b; u. U6 a
1)table:表名;* P: o! s" n$ ~
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的; ^% t: T, M% A' E) w7 \
3)possible_keys:查询可以利用的索引名;. Y' g3 \$ K9 T% T9 P
4)key:实际使用的索引;
* Y" c" s% } g, Q6 D5 Y 5)key_len:索引中被使用部分的长度(字节);4 B, ]. G8 ~: g9 _+ o
6)ref:显示列名字或者"const"(不明白什么意思);- q& S% F) l' S: L* {
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
' {3 c( v5 w+ G& ? 8)extra:MySQL的建议;6 j" Z, V9 x- ?5 Q# H
) F" N: W1 q! W! }& R2 F( I# |4 ] 17、使用较短的定长列
+ P+ N N3 d! C- W" s1 ? 1)尽可能使用较短的数据类型;. B$ S p; S- ^. ?6 I% |3 h0 e4 `
2)尽可能使用定长数据类型;9 S; \, \: Y$ \) P7 C1 [" `
a)用char代替varchar,固定长度的数据处理比变长的快些;( _. Y i" _9 a2 D' H- R+ f
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
+ T4 [6 V+ ?$ J. D/ N9 _6 f; w3 _7 S c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;( n7 o/ h! z- P; @0 {; R1 g
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
/ U7 i3 M! }5 H/ R* ]
8 m) y9 I' a: m r a: J8 d" m6 x 18、使用not null和enum' l/ J8 P. u9 A- f5 P2 z- A" \2 A
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
1 {& M q" s3 H1 o. x, F% y 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;1 t% E" `6 _8 y* E
" P- I* a& j. f# [9 {' B
19、使用optimize table
G( |3 m8 [; t0 o: e 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;+ i( w5 _) h! R4 S1 ~; E" k- t
# O2 h' W; G2 I9 k! w9 G' [" u
20、使用procedure analyse()% R: w9 Y3 O% I- k
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
: I' [" H" K' @5 m# n select * from students procedure analyse();- y# M5 A6 ^% v
select * from students procedure analyse(16,256);
' U1 L: ^' _+ U5 U& m. n 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;0 h, T* ]# H$ g' l% Z
, [& H$ e p# A 21、使用查询缓存
$ a( u5 u7 C4 T1 e3 A 1)查询缓存的工作方式:
! e/ s1 p. ^, l7 ]! P, R6 A 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
9 {& U% G% M( c, ^1 }! f8 V' Q 2)配置缓存参数:
# W8 w1 S) t! }6 @ 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。, J! R8 `# y* I- f9 V
0 U* c# T& X6 [/ S" o0 P- O9 h e ], m
22、调整硬件
$ P: A. y% e5 I 1)在机器上装更多的内存;) R8 [- N& W' @! j; F7 {% T8 U
2)增加更快的硬盘以减少I/O等待时间;. |/ ~& Y6 u6 n) [4 V( t
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
9 Y, D' |/ E1 W; {3 c" W 3)在不同的物理硬盘设备上重新分配磁盘活动;* T9 w- r3 h- {' u/ X" p" V
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。1 |3 a; y1 {! d6 a6 \
|