启动:net start mySql;; P' G& W" n; N) |9 C' \* e
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
/ B3 X4 X4 }, m- C4 a 列出数据库:show databases;! i4 a3 y$ a. I3 G; n, V
选择数据库:use databaseName;7 y8 F6 f. y- v4 B
列出表格:show tables;3 K5 x- L. d/ _9 ?, c7 ?' A
显示表格列的属性:show columns from tableName;# P8 t" c3 l+ N
建立数据库:source fileName.txt;( R) k2 x6 W7 H/ S) K1 i8 ~9 b4 e7 E
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串; x0 H5 |) K. c
增加一个字段:alter table tabelName add column fieldName dateType;
; q* z$ g1 P- n 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;% Q; Y$ P; n4 h! r B$ g
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
) ? S1 f i9 N9 n* @. o2 k 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
2 x) g: C; g4 r3 h% T3 Y! t" y! y 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
0 r3 c3 r' {5 A) S# m- d4 l 查询时间:select now();
# z7 @5 T% \& I% Y 查询当前用户:select user();5 i$ n) r. v3 [* Q; g4 I0 a
查询数据库版本:select version();+ V6 r" N5 |/ u: r2 r' b: _( k, A! o
查询当前使用的数据库:select database();2 k8 c$ i5 {+ L; I9 i
) Q. ?: d% I4 |7 i6 S' M- L 1、删除student_course数据库中的students数据表:
4 d W9 n$ V5 k' x rm -f student_course/students.*
) U0 F+ C3 g& d/ ^0 E0 \, Q* L3 q+ j . j) i! l* _& W% x
2、备份数据库:(将数据库test备份)
G, C/ h( p& I' E! J mysqldump -u root -p test>c:\test.txt
# \0 W$ b1 I1 B! ^6 D# S 备份表格:(备份test数据库下的mytable表格)1 y0 f& j( R% R+ K
mysqldump -u root -p test mytable>c:\test.txt# y- k3 |. w4 C3 Z0 m
将备份数据导入到数据库:(导回test数据库)
' ?( u8 J; P9 Y. w. O* b mysql -u root -p test<c:\test.txt! r$ f4 x9 @( {$ v
: h0 R* L" h. n, w1 w3 j9 i. {
3、创建临时表:(建立临时表zengchao)4 j9 M6 ~5 P: _( @
create temporary table zengchao(name varchar(10));; p+ ^6 S J0 d* m! T. k& M* }& G
! {5 a6 h# H- ]/ h* X3 a 4、创建表是先判断表是否存在4 i% I3 S4 F# d+ S
create table if not exists students(……);
# r& V/ V! ]4 Y$ p: R
/ a" k: l* l" F% r1 B 5、从已经有的表中复制表的结构
" u" g5 Q, r: }: T9 \" `- X create table table2 select * from table1 where 1<>1;
7 u6 ?# e6 ?6 @; O: \
$ a: I! f/ \' x+ y 6、复制表
3 k9 Z! n8 {$ y9 b create table table2 select * from table1;
' \, s2 l; _1 v2 C' a1 h ' f5 ^; _. v6 i4 ^: f
7、对表重新命名
* P7 P1 p+ q* _8 b' |8 z: C alter table table1 rename as table2;
) `+ t6 Y7 K, q8 H1 D+ e
2 y$ \' s! v7 X1 o1 t9 L1 Y 8、修改列的类型( G: c4 G" o1 w1 L
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
+ M& \4 d: { m alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
a3 P/ C/ V+ W0 v) [7 m" A 1 x7 C! R Y" x' i4 q9 p5 @6 {
9、创建索引
! O$ Z6 A$ q3 f) [" a0 ~' B. C alter table table1 add index ind_id (id);
3 R( \4 m8 W. S' K- w- s' G create index ind_id on table1 (id);
9 |( U% L% \. C" M create unique index ind_id on table1 (id);//建立唯一性索引/ u( b. n1 E+ q d/ o0 ?
. P/ O7 I. A) q: J1 J8 n 10、删除索引1 V- G; I" v) ` B6 j Q
drop index idx_id on table1;8 P5 B$ R6 A; U0 u
alter table table1 drop index ind_id;( v4 F, e9 g8 ~
^- {) J; _$ k8 H0 A
11、联合字符或者多个列(将列id与":"和列name和"="连接); |0 x6 u* c' m( v2 _
select concat(id,':',name,'=') from students;' l" T6 x7 L) c$ K/ j* x5 ]
/ N. k ^2 p/ D$ A7 B2 o, K/ ^ 12、limit(选出10到20条)<第一个记录集的编号是0>: M( e7 K' a/ W9 N) n
select * from students order by id limit 9,10;+ ]( I3 b4 A1 l; C
. c$ k+ t) @4 H, D5 B6 g1 G" u 13、MySQL不支持的功能+ z4 ]0 g* h8 D/ h
事务,视图,外键和引用完整性,存储过程和触发器0 p# z$ ^* N4 K/ v2 f3 C
, I0 u" e- a7 k2 N( T0 z 8 o% a- z+ x5 I& z
14、MySQL会使用索引的操作符号
# y& v* M* J# s5 Z# u0 d, g: h <,<=,>=,>,=,between,in,不带%或者_开头的like$ v: G0 \& r3 G0 o3 d; z9 V% D
+ Z2 O' n3 A: _ 15、使用索引的缺点
3 o1 t+ \" y \" Y 1)减慢增删改数据的速度;
' t8 D V9 {; n T" ]" T4 Z) i1 w 2)占用磁盘空间;7 a* l8 m; x: a- ^9 ^" i, x7 S$ m* ?
3)增加查询优化器的负担;
3 O Q3 H% ]; R o3 y5 b4 p 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
2 ]3 g( r& r/ I/ N% Z7 J- b$ |3 }) T , @/ A) \6 R+ g) D
16、分析索引效率
/ C: u4 ]' H* \9 e% x( z2 U! \ 方法:在一般的SQL语句前加上explain;
- r# E- _% F# U9 Z8 _( n 分析结果的含义:2 |- o+ d1 M0 [" l
1)table:表名;, N0 `+ c0 h% p) \# c3 U
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
9 o% L% o9 B% V7 v c 3)possible_keys:查询可以利用的索引名;' {2 O, b* T; U5 T6 N3 v9 Q' ^
4)key:实际使用的索引;6 |! c2 E. n4 ]3 q
5)key_len:索引中被使用部分的长度(字节);9 ~ q2 d2 O2 ]- ^3 A- b
6)ref:显示列名字或者"const"(不明白什么意思);
2 o2 G m$ ?5 B4 a6 X 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
" _6 `3 \0 r! k7 f; c9 @& c 8)extra:MySQL的建议;
2 y( v2 Q" r0 N6 v; ` 4 i ?3 Y; D# _5 t2 N
17、使用较短的定长列
" X+ m1 M4 G. ? 1)尽可能使用较短的数据类型;9 R/ i3 e* o7 k& W9 r) B
2)尽可能使用定长数据类型;
/ G5 o4 B! M5 o$ @! s- W3 F a)用char代替varchar,固定长度的数据处理比变长的快些;
1 F6 o( d9 ^/ Q% C7 J" H7 u: p3 T b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* w& l0 S2 ^- u- ~; r c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
5 x) {/ h$ W5 D: Y$ B, y d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;( ]9 q" Q# N, @7 C7 ], R# A3 a
: }; |+ @5 _5 v
18、使用not null和enum0 X2 [7 ^* g: V/ j( c
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
0 ]! f! n6 x% e. H 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;( @9 x# ?. a: w- l
8 c8 X! u+ G V* [7 F; ]* O
19、使用optimize table
+ }- @+ b( z1 z, o0 q 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;. j# z/ v, P. F( O5 g
8 }$ N& N4 r8 a# b- Z 20、使用procedure analyse()
; a3 @- v8 \9 ` L# Z' E 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
& z; f* E- a5 H; z! f/ z select * from students procedure analyse();4 k; u: f% R7 ~% K# p
select * from students procedure analyse(16,256);0 }8 e+ n; i' r4 T# ?& u* s% U
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
7 T6 T. j7 Z2 `! Y4 }
. r$ ]+ \+ m( M& _1 o 21、使用查询缓存, J5 y! N2 h4 Y! k' F
1)查询缓存的工作方式:4 E3 E; c* S0 |9 E9 V1 l! `
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
' c4 E1 Y* J3 V _/ k1 C2 Z 2)配置缓存参数:6 `1 F- v2 c! C' G- |
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。! C: Z& N6 ^8 b( y/ A
+ b* y9 t) C. i+ I
22、调整硬件
: |! l) v# d1 |/ c3 N 1)在机器上装更多的内存;( }- Y* ]- m4 \/ ] w3 d
2)增加更快的硬盘以减少I/O等待时间;
/ P7 d+ g/ G$ Y( Q- r 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
9 p8 h" |( T# P$ H9 B! Y 3)在不同的物理硬盘设备上重新分配磁盘活动;
7 x" p& t7 O) u/ ` 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
7 P" L+ F$ ?* m" H; E |