启动:net start mySql;
0 D8 Y- |# i, W0 P4 Q' |) L 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
/ D7 F# s# d! r 列出数据库:show databases;; \1 q1 D0 A x. v; [( C* D7 c
选择数据库:use databaseName;
; S; r5 F# M! s) F 列出表格:show tables;
/ M3 S" e* M, R. `! _+ L 显示表格列的属性:show columns from tableName;. T7 n# q, H7 @$ B g& [
建立数据库:source fileName.txt;8 i3 I& z) M8 I3 l( W
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
+ h$ T4 o5 O0 o+ y* |4 v* g1 C f 增加一个字段:alter table tabelName add column fieldName dateType;7 ~) K+ M) v+ J8 s4 O4 w g
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
6 N1 U+ u) H2 T6 t3 j6 R4 P 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
6 w. y( e7 X( e7 A; g 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
. J* ^# ]" ?, w 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;% [+ c# D( Z* l% e& @' S% x
查询时间:select now();% m1 q0 Z4 R! ]2 `5 [9 X- ]0 y8 r
查询当前用户:select user();
/ K& L. E' K- }* O 查询数据库版本:select version();1 @, `6 U- C; K7 ~" G; G$ o. j
查询当前使用的数据库:select database();. z) M8 D3 Z9 H' t8 s3 V! W( T
0 p: g- _7 d: t- B0 s/ y2 F) c& U
1、删除student_course数据库中的students数据表:
6 n* z2 ` T$ x& N% b( l rm -f student_course/students.*
. P$ m: Y# Z5 A0 ]$ ~4 `3 q
+ ~6 G0 o! k8 y) [( W9 i* P 2、备份数据库:(将数据库test备份)
v! p8 v- [7 H& W& L mysqldump -u root -p test>c:\test.txt
i1 _* W% l; Y* T- o2 F! { 备份表格:(备份test数据库下的mytable表格)" b3 Z; g8 y; |
mysqldump -u root -p test mytable>c:\test.txt
( }$ _# y9 F8 X8 N( V( n0 P 将备份数据导入到数据库:(导回test数据库)$ t7 E" n' E& }) w% G: J, [; U% l
mysql -u root -p test<c:\test.txt
) i0 X: K7 O8 Y3 L! y- o
# O. T. b) C' @0 K- y; H; p/ _ 3、创建临时表:(建立临时表zengchao)
: ~. m+ N$ g+ F0 J create temporary table zengchao(name varchar(10));' z. z9 C2 q2 E, ^- W0 r& @' ?( W
' q+ T# L$ ^# c7 W
4、创建表是先判断表是否存在 f" h" Z1 l: b9 ~2 H9 r
create table if not exists students(……);
2 X5 c* ?# o9 q& w% Q) N - I: |6 R3 P/ p; I5 H3 c
5、从已经有的表中复制表的结构
, `6 ]2 C9 S8 y- A! d$ ^7 f create table table2 select * from table1 where 1<>1;% F: V+ u1 r0 c H3 m0 K9 X" z
! X( C ?$ X& S# q/ _* o6 k 6、复制表0 {/ C' M7 x9 k$ _
create table table2 select * from table1;' H- U9 G9 L' l
- A s# y7 ?/ K# M/ ~# \2 a
7、对表重新命名. J* |# G. J# Z' o
alter table table1 rename as table2;9 [; s/ t$ e5 Q" s
& Z* B$ ~! z' H$ \3 s
8、修改列的类型/ `1 |+ \7 \/ I* H
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
: U9 R" p V1 v alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
' e1 H! e/ J q7 u( g $ C9 T2 V) p% O
9、创建索引9 x- p' p5 X+ r. Z, Y3 P
alter table table1 add index ind_id (id);5 K4 c1 V: w1 I7 N
create index ind_id on table1 (id);
) ]: x. s' p) j& J create unique index ind_id on table1 (id);//建立唯一性索引
$ _! P# i9 X7 j" D5 N( r% R; } 6 R, N. B$ W3 a; _
10、删除索引! m# O1 Y$ k( w% ~ O+ r3 f5 _
drop index idx_id on table1;
& _! U7 s# l3 w+ x0 e alter table table1 drop index ind_id;
* c1 `, H- {6 x1 E" x
* b c: a: p' z5 L' Q0 W, ~ s 11、联合字符或者多个列(将列id与":"和列name和"="连接)% W5 D" h4 i: A7 W
select concat(id,':',name,'=') from students;, G1 R; X7 k0 D
& E. \ n, B8 i1 j- B' B4 q 12、limit(选出10到20条)<第一个记录集的编号是0>
! U' a! E" q9 L$ ]# A$ u select * from students order by id limit 9,10;
) p/ ?/ j! o9 P. B/ B6 r. g! L
6 a* V: ]7 z% p$ ~) U( p* {- c 13、MySQL不支持的功能
- a" p/ W+ w# _+ ^/ O" h4 | 事务,视图,外键和引用完整性,存储过程和触发器
( Y# t" ^$ u# X5 g# ^* P6 x 9 U/ z- H u4 p+ g2 X
- `, I% {5 C" G. V. f 14、MySQL会使用索引的操作符号. T. J" ]+ Y r% Y5 I8 o' o
<,<=,>=,>,=,between,in,不带%或者_开头的like- z+ B4 S' z Y
% }) C( ?: q/ G$ x y- f 15、使用索引的缺点& I7 k" Q0 ?* a$ \ i' s
1)减慢增删改数据的速度;
! M5 H6 ?! k' ?& b9 D4 Z 2)占用磁盘空间;
$ \/ [4 Q2 \6 x 3)增加查询优化器的负担;
7 ` C4 e8 L2 `$ G! o) t/ q8 S 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;& L2 s) T# R9 i5 `, K2 n7 g7 B
$ _% s( Q) u: q+ w) j6 }8 ~
16、分析索引效率
6 d4 I' J1 U2 S" ~ 方法:在一般的SQL语句前加上explain;9 E `8 y6 f2 T
分析结果的含义:7 O7 j7 \' J; B) v( [
1)table:表名;7 `& I, B9 _9 H, e# I
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;6 E$ E& S X# e
3)possible_keys:查询可以利用的索引名;' F: ~8 \4 P" E
4)key:实际使用的索引;
" a/ r8 A* c& C% u+ }, |+ { 5)key_len:索引中被使用部分的长度(字节);" Z: i6 H, r& D( R
6)ref:显示列名字或者"const"(不明白什么意思);
7 n, q6 T2 H8 U8 i+ l* ^ 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
$ F8 H8 a! q$ p4 C 8)extra:MySQL的建议;; C: z0 m7 p [& C4 e7 K
% ]5 ^) o. l# O7 v0 w 17、使用较短的定长列" b4 S c, p* `) f
1)尽可能使用较短的数据类型;
, z# a) Q9 {1 i% P8 E' c- T 2)尽可能使用定长数据类型;# T |7 X0 _0 [; h8 @- y
a)用char代替varchar,固定长度的数据处理比变长的快些;& C7 t' Y1 @- F/ h ~/ d2 a# E
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;# i, n2 O9 k" B1 s: U7 A( n7 Z
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
: G3 ^# |; e. v0 m3 _ d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 ?! W* }' [8 |- ^$ c0 F
1 h B5 ?6 \- a: g/ g: n 18、使用not null和enum1 f/ N2 Q7 Z+ `$ X) X* U/ D
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
) h! P: v0 h4 W3 i* W 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;9 f% b9 v0 Y/ L8 @$ m% C
& m7 U9 [5 H% s2 w& H 19、使用optimize table; |. ^) g, u. p
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
: d$ b* w [( A2 J
( P4 B- \; F) b y! ] 20、使用procedure analyse()
% ^2 b$ T% @" O- ?) V 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:2 W! \% X3 q6 {2 W5 y. X: k
select * from students procedure analyse();) }8 P" R" F5 ^! {5 `
select * from students procedure analyse(16,256);6 S) a: B0 K2 H+ {. g! Y' k
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
+ |* Z+ C5 b4 i. X. R) q: A5 A6 P+ H Y 5 Q$ y1 }/ p- h0 e# ^0 @
21、使用查询缓存
( j; F* j7 m' S2 P( K# V 1)查询缓存的工作方式:: U! ?! t q3 V6 F; X$ ]' \
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
8 t9 v) ^4 }% o2 Z9 ? 2)配置缓存参数:9 U) C0 k5 O3 F: `/ @ M6 t
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。* b7 `; B/ d3 o8 \/ P& m j! g
9 w7 X* O: o% N" P9 k" d 22、调整硬件
* F6 G+ |$ w% y7 v% Q! R: E9 p 1)在机器上装更多的内存;
% ]0 V$ H, K5 `' n; N$ q 2)增加更快的硬盘以减少I/O等待时间;
* T" }4 J$ H* l! X& u$ k9 U5 R: K 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;7 e+ b6 e" `1 ~0 g# Q7 |6 ~
3)在不同的物理硬盘设备上重新分配磁盘活动;& e1 H- N' g1 F0 z" m
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。6 d: P/ P8 t- U N+ D
|