启动:net start mySql;
! G3 H( H4 ^- @" O) u6 A 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;/ ?5 H' W& {8 g2 [- Y2 j
列出数据库:show databases;, P# H( o) C* H" A& U8 W, S) X: w
选择数据库:use databaseName;
( n" u5 C4 k" c9 \; b; d9 | 列出表格:show tables;2 O3 }- M7 f( S6 R4 Q2 b
显示表格列的属性:show columns from tableName;
4 M7 z, J- `& j3 K \& O7 { 建立数据库:source fileName.txt;) B, q i/ |6 T2 J, I$ \
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;$ l$ g: o1 u+ \7 m" A
增加一个字段:alter table tabelName add column fieldName dateType;4 Z& K6 _: [8 `8 \1 A7 l
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;. K& k& q( H8 \1 U- }2 d/ x
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;4 j3 l) H5 T% s" p" u
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";% M) e" Q$ C' }" X7 l7 A5 A
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;4 u& f8 j6 f; K* |
查询时间:select now();
& C+ E3 S6 E" S% m2 [, a* e8 v 查询当前用户:select user();5 k, J5 |/ f7 \' l! c9 P# ]# H
查询数据库版本:select version();
( v* s. m7 w) m7 J0 U 查询当前使用的数据库:select database();. }& h: W' }! c2 f) v3 g$ D/ ]! D
) @. p% y, E8 E( M 1、删除student_course数据库中的students数据表:# k6 T3 e' R" f9 r
rm -f student_course/students.*
3 G+ \! z* \7 v# | J 7 v) g; v. C: M. r) D! a6 J
2、备份数据库:(将数据库test备份)
3 V3 R2 b/ v" ^8 C1 Y2 k mysqldump -u root -p test>c:\test.txt) }3 B0 j& s" i( r2 ^. }/ @' |& O1 z, ~
备份表格:(备份test数据库下的mytable表格)
$ c6 \* n! p j- k8 W w4 Q0 e mysqldump -u root -p test mytable>c:\test.txt, y7 U3 f2 C. O/ r
将备份数据导入到数据库:(导回test数据库)
- H4 U& v5 e' l mysql -u root -p test<c:\test.txt
# w) K4 f* n3 K _1 N0 b2 L
& F; j7 @2 }! n4 s! J+ n. u 3、创建临时表:(建立临时表zengchao)" T. c8 ]+ C: Y F. S
create temporary table zengchao(name varchar(10));- Z) z% A- t- G A1 D- p/ b' n
7 J [% v( _1 G+ s/ L, C
4、创建表是先判断表是否存在
/ f+ k1 h* n- j$ u6 I' F create table if not exists students(……);9 ^& i% n: i3 J+ e1 s( ?
! Y- P' T7 m/ v, ]
5、从已经有的表中复制表的结构
% e; T" J( d& g7 a$ b. m create table table2 select * from table1 where 1<>1;
- N6 C0 @. m+ |3 i4 N0 i0 ]1 z
- f: a. B3 Y( n* H. ^ 6、复制表
/ M6 C# g6 H7 E9 P create table table2 select * from table1;
) L3 Z' R9 n6 W: V) I, ?
/ ~- z+ _: d% B, ~7 |7 d$ A 7、对表重新命名4 S/ c. ^6 d: v8 K6 m
alter table table1 rename as table2;# m2 @/ ?; ]1 b6 X0 w) k
; j6 z6 B7 {, l6 J 8、修改列的类型
- u( i1 y- q0 x, O9 Y alter table table1 modify id int unsigned;//修改列id的类型为int unsigned( f$ E$ ~3 T+ a
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
3 {! _/ H* u' a1 m: D0 u2 W
7 T) M" O. |. ^0 h2 \. f3 U+ S" ^ 9、创建索引. H2 U! T8 P5 R& I' u- V t
alter table table1 add index ind_id (id);
3 q) V$ c& ?) J2 U create index ind_id on table1 (id);
- }7 j9 b+ T2 T7 N1 c3 X0 Q4 ?/ u create unique index ind_id on table1 (id);//建立唯一性索引. a ~! h- V/ G
. u7 X" f2 Y$ D% i% N1 `
10、删除索引$ j% m7 H7 h+ |2 W4 a: v% F
drop index idx_id on table1;5 z. \' w$ j$ M5 o% L0 L
alter table table1 drop index ind_id;% u, y* Q y0 D. _' y. g1 B2 ^
+ d. s% P5 Z$ r! x" s 11、联合字符或者多个列(将列id与":"和列name和"="连接)
+ N: U# B3 k5 L1 |& f, o select concat(id,':',name,'=') from students;
, n) _, u8 J9 l
( [, a( d+ N3 t# I2 z8 v5 a9 m! u! [9 u 12、limit(选出10到20条)<第一个记录集的编号是0>9 S7 @& K- R* T; v5 |- W
select * from students order by id limit 9,10;
) M; Z, m# | U 5 S5 y1 K1 B6 |# B Y" I0 `% c
13、MySQL不支持的功能
+ r9 q2 {; y# K3 W* f 事务,视图,外键和引用完整性,存储过程和触发器$ A( W. {5 A6 l) {4 y& S
z/ U" J }( e+ Z5 P# z 8 l5 j" l! o' N. G: x! K
14、MySQL会使用索引的操作符号
$ M( Y* ?9 M6 j' v4 W <,<=,>=,>,=,between,in,不带%或者_开头的like
: u' O. W5 t: X# y& }# ~
9 P- k1 g$ f Z% N# ^" v% |1 R 15、使用索引的缺点
3 T/ {* A* I2 J+ ^7 W5 g 1)减慢增删改数据的速度;
' D( r$ j C1 `* g& G! N. F4 q 2)占用磁盘空间;1 M& b0 }- a4 w( Y; y
3)增加查询优化器的负担;
/ R2 M. y9 R w) U9 m: \$ Y 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
. n3 j( L- d( N8 {7 ^& B- V" h7 t
& t+ f5 n" G* ^. | 16、分析索引效率
% x0 K0 C( j# T# x3 P6 z! J7 f+ f: c 方法:在一般的SQL语句前加上explain;
! O% Y, K& k% I8 @' E 分析结果的含义:
/ o1 t- N/ m5 O+ [: {' H 1)table:表名;% j7 N4 B, m& C- a( @9 L. G
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
% M: m; g7 o9 m3 g, n7 V 3)possible_keys:查询可以利用的索引名;- U5 T9 R s( v* U
4)key:实际使用的索引;/ R* _8 E5 U7 V2 m1 H
5)key_len:索引中被使用部分的长度(字节);
8 f! Z, ?5 x: m" ^6 r 6)ref:显示列名字或者"const"(不明白什么意思); ~6 M$ s; c% J
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
/ P( i8 I- L6 A' o0 Y/ {' A/ Q' Q 8)extra:MySQL的建议;
9 f% @2 C0 o, Z( N
/ g6 i( B/ \6 N9 |( I 17、使用较短的定长列4 B* g* Z/ J, M+ Y# K9 e) c
1)尽可能使用较短的数据类型;) N9 {! j3 v- [
2)尽可能使用定长数据类型;
$ b( o! s- n" h6 k6 e) E2 B a)用char代替varchar,固定长度的数据处理比变长的快些;8 {8 y+ J5 g5 ~( e# Z5 u* n! t
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;7 w1 j+ Z, D( ^% R* h6 l5 x( a
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
; S4 ~1 T! c V& t& n" E _( C d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
0 o7 E j9 T; {1 I " g P( y/ m. K7 S
18、使用not null和enum
: d5 C9 e* z+ C/ T/ t: k* U; e9 V 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
$ P5 C% v( V0 `: T' [; G4 O 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
- X/ d6 Z, |: w* V) { , w9 v8 D5 G) E
19、使用optimize table
; {4 b& X. A" N% ^# u1 W, I9 N 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
# ^2 _9 X0 s& j
7 p, ^) [( w9 h# J- s8 V 20、使用procedure analyse()
# K* U$ N& k6 E/ i# [( Q2 ? 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
0 ?/ P3 W+ ^# m o; y; A; X/ @7 X select * from students procedure analyse();9 o0 z2 Q1 Q% v8 v( D' |
select * from students procedure analyse(16,256); i4 p. ^% D: p! y9 r
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;9 c2 _" S, x+ V9 R, Y
% D2 e; A9 F& M6 n 21、使用查询缓存
- p, X6 ^4 P& Z, k* E 1)查询缓存的工作方式:5 F5 M; W2 f8 O4 |$ y l- [8 h
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
! G. B1 U' E0 U3 W4 C7 `( j( O& R 2)配置缓存参数:
: k! {7 T; N" B! w, i0 x4 D 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
2 [! k) ]% ~/ B; b( P* k2 I6 Q * `; V: a& V4 q: a& h/ q
22、调整硬件
' e+ f* I3 r9 W% c 1)在机器上装更多的内存;
* v5 M+ l; ?, L9 y# Q! Z* g 2)增加更快的硬盘以减少I/O等待时间;+ M P. j5 K p, R: H+ k; W
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;, I# M7 W4 S) @$ P. G8 U. N
3)在不同的物理硬盘设备上重新分配磁盘活动;& T1 B( r$ J! t, L) B
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。$ Y9 h2 H( B' {
|