启动:net start mySql;
+ u/ q* s9 o [. F' l+ i" r 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
4 C: r4 W4 M! o( ~ 列出数据库:show databases;
}9 u6 e0 q! m; w 选择数据库:use databaseName;
) d% b# c2 ?% J( m 列出表格:show tables;
8 a+ x0 ~; J; f+ ^, m 显示表格列的属性:show columns from tableName;( H5 ^( e* t' S. T
建立数据库:source fileName.txt;
/ w+ Y- ]; \$ H$ }8 h% F7 z$ t6 w0 d7 I 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;& D c1 M- L9 p7 s
增加一个字段:alter table tabelName add column fieldName dateType;" c$ V1 n% F+ e; z
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
4 }" Z. q: j: E 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;" j u5 O2 g1 G. b
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";3 h# H% g1 @! i, N' R, ~
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 E. ^# |2 S) P) O' H, Q) {
查询时间:select now();
9 s+ n' x F$ a! V 查询当前用户:select user();
- ]9 I+ Y$ O6 O: Z- W- }5 v 查询数据库版本:select version();
( P0 s3 {7 E" v# S9 ?6 c; u 查询当前使用的数据库:select database();
2 _9 v; x! Z. X% k' _ 9 V) h) C4 K2 F: ~. G' ~% B& E' j7 c
1、删除student_course数据库中的students数据表:
. m% K3 G6 t5 e" x rm -f student_course/students.*
: e% w( c9 p3 o, u% s/ r % y2 R/ X# B# w' k
2、备份数据库:(将数据库test备份)4 W% E* u( _, Q# i7 F0 {) V
mysqldump -u root -p test>c:\test.txt
* ^3 u& @, v& X4 S" p 备份表格:(备份test数据库下的mytable表格)
8 w) _# d7 Q# E2 b# i mysqldump -u root -p test mytable>c:\test.txt
, x7 n1 D3 Q; b5 T8 h1 ] 将备份数据导入到数据库:(导回test数据库)8 I9 R! r9 g: z% X/ V+ n, K
mysql -u root -p test<c:\test.txt+ ]) r a2 g- r/ t3 e( e
) h3 X1 S ^9 l& B) Y1 i+ I
3、创建临时表:(建立临时表zengchao): q! S, s$ L2 F; v7 L
create temporary table zengchao(name varchar(10));
! @1 R/ d; v1 w! l- E
0 G* e$ u2 ^. t; X0 f P% ^ 4、创建表是先判断表是否存在" d2 _$ [$ y0 O
create table if not exists students(……);7 p2 Q4 `7 v2 F0 B0 {
- R6 s. \; Z |$ c& x; o 5、从已经有的表中复制表的结构& |( X. P' Y' U j( o% \3 o1 J. x
create table table2 select * from table1 where 1<>1;
) X9 t' @2 w8 V" `5 A7 C
P: @' [ K8 X W* `" ]2 T# x5 o J 6、复制表
% V$ S/ c8 ?" W2 x# m create table table2 select * from table1;% d1 s U4 n0 ^3 y3 O+ E( B
F0 L) I3 d. Y) y' i4 c 7、对表重新命名
$ M( I$ p1 j+ r alter table table1 rename as table2; a1 L8 f3 z+ |4 p0 D+ K# W
9 O) X5 V0 d$ J4 f' S0 Y 8、修改列的类型, |2 n; [% G0 C; Y, _/ n
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
8 B' o& e. h. A d3 J# T alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
6 P8 b s$ \* b4 u3 }/ [ 7 B8 I; G z/ d3 u8 U
9、创建索引
% |' _1 y0 a- e1 x# u alter table table1 add index ind_id (id);
, j2 J; B1 `' ?; e create index ind_id on table1 (id);
9 O- ~4 m- C+ f. e% H7 A) e9 |. r4 t create unique index ind_id on table1 (id);//建立唯一性索引
1 D, d! o2 ~7 u" h7 ?
! R% U- [' Y9 D' H/ `- I9 R. L 10、删除索引
: c& o( ] j/ d3 K drop index idx_id on table1;
$ W2 [1 i: M+ g alter table table1 drop index ind_id;* b& v. n" E& }/ P G
0 C0 _+ J- f- ?3 B' j 11、联合字符或者多个列(将列id与":"和列name和"="连接)
( [. C$ I* d/ v' K( } select concat(id,':',name,'=') from students;
5 }5 o$ Z& a; u% f: Y
9 i( }: \/ g4 h( `! d. u- L 12、limit(选出10到20条)<第一个记录集的编号是0>
" P& \" \7 r' `- s* L) k# t% T$ u select * from students order by id limit 9,10;
" X" L" M8 h& e4 g+ y& n
( ?: V% o) T+ D0 ]1 m( n1 ` 13、MySQL不支持的功能! T; g$ s$ Q+ y( Z- g& e
事务,视图,外键和引用完整性,存储过程和触发器
- m; X0 L# T E1 ^" I( f' X4 d# b7 q ' d0 y. u E1 r# }# x' }
/ o+ r; ^# N; f. \5 A2 d' l0 B 14、MySQL会使用索引的操作符号, D* M9 M/ e' u" `2 }
<,<=,>=,>,=,between,in,不带%或者_开头的like
9 N. V* P5 ~' B6 T0 q6 q
7 E; O9 ~& J3 w6 f# E7 ~ 15、使用索引的缺点
3 g& X: n) f9 z4 o p f' S8 k 1)减慢增删改数据的速度;
1 N4 E9 H* D2 L1 e' B o) e" G 2)占用磁盘空间;
; y1 A1 Z# a6 X; T7 {3 c 3)增加查询优化器的负担;6 b. ?! e$ U' ^6 A6 Z3 z$ Z
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
' `! z6 s! I: X, W
7 E, O0 V @+ N4 ]: n) B 16、分析索引效率* C2 n4 D% m) F: R' A( N
方法:在一般的SQL语句前加上explain;
. M8 h l5 R/ {: E, a- o 分析结果的含义:
" B) E' I# K6 r. [ 1)table:表名;
- d1 Q& c! c' ?8 {" \, {0 k! ? 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;) d$ e- y- H1 s, z1 v: A7 j( h9 ~
3)possible_keys:查询可以利用的索引名;
# Y; n& v& @" \- m 4)key:实际使用的索引;
1 M7 ?, p1 a# t ]5 S% O( i1 W! R 5)key_len:索引中被使用部分的长度(字节);7 \% v5 Y+ f" ^! w8 M
6)ref:显示列名字或者"const"(不明白什么意思);
! c8 }) x3 T. s: {; C4 T 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
( O2 g; x" o) u: L! U; @; A 8)extra:MySQL的建议;9 `/ L1 [7 d* m- B8 r: `! x2 G
: J6 K) I# O- m' h+ c7 @0 f 17、使用较短的定长列! ?# S, n6 m# V) _* m2 P5 {* x
1)尽可能使用较短的数据类型;
! N' i4 o" X) r( R& i 2)尽可能使用定长数据类型;2 G, ^; L% L% ~$ ]
a)用char代替varchar,固定长度的数据处理比变长的快些;
- M4 \7 x8 o4 H, X% r$ i b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
. l+ z0 E$ C x" B c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;. d4 f+ ]8 m6 I6 G
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;& ^8 ]/ o) b/ r, J$ p& p* ^
0 k5 N9 z) y- {
18、使用not null和enum! F, F/ T* y) ]" C; N) z; b
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;9 N$ @5 l; K2 ~3 y/ R/ k1 {
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
4 D9 M2 T! _- c, X2 m' O% s
2 ~! ]; T! y* [( T+ k3 H! h 19、使用optimize table
; N" ~# }1 k8 x9 Q( k$ ^4 N 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
: T8 \7 T8 N x; r# x: Y- T; j
) m$ l# W8 S$ T! B: J$ C$ n 20、使用procedure analyse()
6 t1 F, t f& ?+ l* N! k3 ^! S 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:) s$ P" v* \2 X. T- Y1 Y( w
select * from students procedure analyse();2 r- F, G" I$ y) |7 p! v
select * from students procedure analyse(16,256);
; \1 U; L6 ?+ e c1 y 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
: g% W- ~6 S/ E4 E. D 7 X1 ^& Z& N# q0 H) n
21、使用查询缓存
4 ?4 ?* a0 q" l) T2 U: Z6 h& b 1)查询缓存的工作方式:
2 I2 d, |/ j" `+ M 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。1 i8 n P9 C5 W0 ~
2)配置缓存参数:. s9 b, k4 b8 R1 i+ A; `* Q! ?/ H1 M
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。* P- a" Z. P( ?: V
1 \8 t6 I) t" v: W/ d
22、调整硬件1 V3 S. I' p. @! y. |( P
1)在机器上装更多的内存;
) _ v! a6 d: \; s1 ` 2)增加更快的硬盘以减少I/O等待时间;9 S6 [8 n, f% b( u0 h
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;; r5 i7 }( ^. K4 g
3)在不同的物理硬盘设备上重新分配磁盘活动;1 ^, n* I( s/ B; \4 u7 l: p6 G
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。. Y/ G& |' @0 m, V0 C2 N; C, Q5 m
|