启动:net start mySql; o( z. ?6 z' }( g. J/ h
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
; o) ?$ Y; ]0 [. \! f- ]0 G 列出数据库:show databases;6 ^7 v- o( r4 y
选择数据库:use databaseName;- ?6 A. s s/ @) C
列出表格:show tables;
0 d3 F% Q, [7 I7 l0 N$ K9 B2 {7 x 显示表格列的属性:show columns from tableName;
* y8 Y# W% _" P- a, Z, P3 V* N" N 建立数据库:source fileName.txt;
" ~+ m8 m. e# i D) ]+ m( r 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;5 q8 |2 U+ `* y; K3 O0 [8 h4 V" x
增加一个字段:alter table tabelName add column fieldName dateType;
: H& {' g' T7 B/ O 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;; U0 U$ W D5 H* k. |: e5 X
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
Z2 U1 [# f% F2 q/ [$ | 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
n1 P) c1 z& ~; p 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
/ J* S/ s% {3 o& b 查询时间:select now();
2 e; x- K1 L: A* @2 i6 V 查询当前用户:select user();
# C @8 r# |. ^! r' m 查询数据库版本:select version();
1 h8 e; e% E9 Q4 x# P0 c. [2 V 查询当前使用的数据库:select database();" f+ o6 ? s Z( ]6 [* i' |3 F, F
5 B- G% u7 M1 ]3 q8 a: S7 P 1、删除student_course数据库中的students数据表:1 N9 r c; } u9 D0 J* c% Z2 p
rm -f student_course/students.*
4 g! O$ ]$ ~ r% p/ C( N
$ S, l! c' g/ c, ]# t 2、备份数据库:(将数据库test备份)
3 r9 R7 n3 |2 q3 }$ {1 V9 g mysqldump -u root -p test>c:\test.txt7 V, b: h: V( ^- ?
备份表格:(备份test数据库下的mytable表格)
& ]/ ]* S) k% }# ^ mysqldump -u root -p test mytable>c:\test.txt, c9 Y3 m' O0 n
将备份数据导入到数据库:(导回test数据库)
: }/ z" G9 `+ ] mysql -u root -p test<c:\test.txt
" M9 m1 O8 z Q8 G$ c1 f& P* b( h 6 v; C2 q" O+ {' t
3、创建临时表:(建立临时表zengchao)! ^' R; J9 g5 B9 X0 w
create temporary table zengchao(name varchar(10));
, C) r$ d! E6 ?6 _2 ] : _8 t6 D( }* s
4、创建表是先判断表是否存在( l& Z, p" Q+ o3 v' L2 X$ f% e
create table if not exists students(……);
+ e6 y. R/ ]) j: y9 ]+ H + S2 d) O+ r2 l) n" I; O
5、从已经有的表中复制表的结构
" ]/ b# F4 w% {# ?, m2 ~ create table table2 select * from table1 where 1<>1;
/ n! D0 `1 i8 @ ! f: [& q, c3 e: E5 o( l
6、复制表
- h* `3 N& L! V6 [ create table table2 select * from table1;
: R. G" H" R9 v% b5 d2 c2 @ % W6 Z! O3 \! `, U: q+ Y& N
7、对表重新命名
) i: a1 z9 I8 X7 p alter table table1 rename as table2;
( F- H- k7 O8 S& Q
( o% b9 e- w: z3 A+ V 8、修改列的类型
, ~4 g6 o$ h1 U A/ C alter table table1 modify id int unsigned;//修改列id的类型为int unsigned& [3 H3 m; c. k# z% W0 a+ P
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
! e7 P- ]' z" F7 U ( c4 k) L3 G; A9 b6 l
9、创建索引' M9 Y4 T- M. d" ?
alter table table1 add index ind_id (id);9 e; F" ?1 N: \! ]( p7 Z
create index ind_id on table1 (id);" z, } q# g: f
create unique index ind_id on table1 (id);//建立唯一性索引3 H) y, o+ f# Q; }
0 w. X$ ^8 H0 t' P0 }) T& u
10、删除索引* m/ ]& P4 I: ^8 z1 }' ~
drop index idx_id on table1;, D* V! D8 ?) U
alter table table1 drop index ind_id;
; w" s& ?$ v% Q+ o/ [0 Y1 u1 x" R
0 B% c1 H3 _5 M 11、联合字符或者多个列(将列id与":"和列name和"="连接)8 a" R6 F# d6 ?6 b0 b* d) ~5 M
select concat(id,':',name,'=') from students;: W& d$ C: Z W: i
6 R. K+ L; l( n! p" Y6 V* _7 P 12、limit(选出10到20条)<第一个记录集的编号是0>% [( ~+ {. @0 Y0 q$ Z" {
select * from students order by id limit 9,10;9 g J( _' K5 g& n; F+ i
& |# ]# C9 i2 m: _7 r
13、MySQL不支持的功能
$ B7 d3 q$ N/ V 事务,视图,外键和引用完整性,存储过程和触发器
D4 h* N2 N4 B2 Y8 C/ k$ v8 } % ~. F+ B& s- Y3 z
( J5 p* U! ^0 @, x9 ]3 t' o( H
14、MySQL会使用索引的操作符号0 A( {3 s, A: ^' G2 y
<,<=,>=,>,=,between,in,不带%或者_开头的like1 t9 S! B7 l4 z
. I. Q! J% t1 o& b6 D 15、使用索引的缺点
4 _. V6 [- _. }" p. z6 o$ u9 @& c 1)减慢增删改数据的速度;+ r- d5 W( d* d! S) V& _: l
2)占用磁盘空间;
' l' y% q0 K$ a$ r. ?) @+ Z& {6 i 3)增加查询优化器的负担;$ G3 F A! Z* ?0 Q/ g
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;+ P" E3 L2 [: ^1 I
. x( v6 m; R5 s$ M h
16、分析索引效率$ i$ c: ?( q. j
方法:在一般的SQL语句前加上explain;
# F! V B, D- }+ [0 r; g% F: a% j 分析结果的含义:
$ V/ A+ T7 ~3 Z% n! u 1)table:表名;8 f& v8 T7 A/ P9 |+ Q( i
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;& c3 M- e" S' Q: ?# `
3)possible_keys:查询可以利用的索引名; a% ~1 N) I/ t# a( E% Z( N2 V
4)key:实际使用的索引;+ d; w: q2 s M6 @2 [1 c4 C2 Q& D
5)key_len:索引中被使用部分的长度(字节);) x( W) |4 k2 [: A
6)ref:显示列名字或者"const"(不明白什么意思);
' {) x) `. O9 v& |9 [ 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;( U9 Q% E4 N& P( {* N9 c
8)extra:MySQL的建议;
- H _; x0 i2 M5 K! k Q
6 A( Q; n C$ T! U! l4 F" D 17、使用较短的定长列: t" E, J8 {* U& H1 K1 l
1)尽可能使用较短的数据类型;
+ D# A( v. c/ \ 2)尽可能使用定长数据类型;6 O3 J. S B; U
a)用char代替varchar,固定长度的数据处理比变长的快些;/ x6 w4 U2 `$ O
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
/ y8 ~' o" y' e8 p& [( t; E# a! W c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;- |8 N7 c2 D1 r
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
# M0 V2 b2 f( G5 R6 ?0 k
9 ~+ E# H. g) [7 z: u 18、使用not null和enum8 p3 F7 Z3 z, ]6 P1 G
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
8 V6 U) Q2 Z p5 k# D& G 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
! q/ d# |) j; {# l) q' I3 j
- q0 d- K1 z1 B 19、使用optimize table5 g+ g9 |/ V3 x. O8 {6 X
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;2 y; C9 @8 l% I& V" A, `
+ Z) {: J6 s1 X! u( m 20、使用procedure analyse(): x2 N) f( Q4 \
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:' t# ?6 a8 j# ?. e+ _# ], k& l
select * from students procedure analyse();
& O# ^! s/ F# k( t! X0 m select * from students procedure analyse(16,256);& M' Z: {4 K5 a& X" c; c |6 q
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;/ \6 u1 t, F) E1 Q
8 E0 ~( m* ~4 w. R 21、使用查询缓存 O, E5 U6 S& G4 p
1)查询缓存的工作方式:+ i! Y# V* F9 Z# J2 o, h! i' o0 d1 k
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。' X! |5 U- c2 c, v
2)配置缓存参数:9 A1 a/ n9 H! Q3 a) m- c
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。4 ~* F( r# G Y! F
5 t5 b9 I( I* E3 X" w$ S 22、调整硬件
% i l6 o. U/ Y# j; z# z! g" a. M 1)在机器上装更多的内存;) t- V! T/ N( @
2)增加更快的硬盘以减少I/O等待时间;9 e& I5 F5 T8 \5 h, @9 |$ A
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
% G( C/ k/ n* _ 3)在不同的物理硬盘设备上重新分配磁盘活动;
: X" T b% R5 v 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
9 i) ]6 ~7 T) J; \2 S9 r. {7 e |