启动:net start mySql;
: i1 X, n; y; Q. E! J 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
/ k! T C6 v2 O/ ~# [ 列出数据库:show databases;1 S8 E( g' K- ], {! H& Y$ z0 N
选择数据库:use databaseName;8 v# J o* }; l/ Z" g
列出表格:show tables;5 L7 ~$ |, d0 [# C. @% U& o
显示表格列的属性:show columns from tableName;
9 F L3 ?; v1 d8 J2 W 建立数据库:source fileName.txt;0 y1 n+ O6 H8 ~ m4 w
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
$ d5 x8 b/ Z$ r9 n1 F8 A% X Z 增加一个字段:alter table tabelName add column fieldName dateType;2 {5 m& R* c7 z% H: A& U
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
, i/ P# j; L) t3 N 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
. m0 z. j- l( J, p 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
" p2 c3 f R# D 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 t& @+ O ^. e0 Y. B# [$ P
查询时间:select now();6 o/ F1 t0 ]' C( @: l. T
查询当前用户:select user();
) H0 V$ j1 z. L: t1 }' I4 K 查询数据库版本:select version();( k0 H' {( }* P4 X
查询当前使用的数据库:select database();% H) y( i- v+ x, q2 L1 w
; P/ e0 H* j. Y7 H1 p/ {6 v, w
1、删除student_course数据库中的students数据表: _. d4 k+ z7 ~4 ^: |! x' ~
rm -f student_course/students.*! }; h* [! q/ s; B. r
, Q' F3 o9 l7 a- s$ c, s1 s 2、备份数据库:(将数据库test备份)
' k$ N% E& c- I3 f% h: K! K' M' ] mysqldump -u root -p test>c:\test.txt
, O- V5 r' T5 }, Q 备份表格:(备份test数据库下的mytable表格)( L- {( q, D7 D. s/ K
mysqldump -u root -p test mytable>c:\test.txt3 z# r' L( D8 }/ ]
将备份数据导入到数据库:(导回test数据库)
; }) [: @- c5 @ mysql -u root -p test<c:\test.txt
8 z. v- m1 P/ ]! q' M+ z) r3 M # A. E, {5 c% i) s2 Q
3、创建临时表:(建立临时表zengchao)9 e; D+ [+ j( k3 d
create temporary table zengchao(name varchar(10));
. B) ~; S2 ~# i# C( ^' n( ]( w
& I7 l8 y- i" S5 O5 l7 @1 b# f2 Q 4、创建表是先判断表是否存在
% u7 {& ?8 x3 z3 f create table if not exists students(……);) ?( [" v2 Q. a" Q' z2 I! q
/ P, M* w. n7 x4 T' V 5、从已经有的表中复制表的结构! g s) S4 d9 d& b2 w' q
create table table2 select * from table1 where 1<>1;+ {$ h5 B: G; F
! u8 U: p' M. O1 F7 W" q 6、复制表8 ?5 m0 f& U/ P# z
create table table2 select * from table1;6 ~% H& f; `( Z8 h; c0 Q3 X
K# l ?, {2 U6 ~
7、对表重新命名" [. g6 }9 v& l" Z( o1 T7 h
alter table table1 rename as table2;. Z5 c* Z* v- |6 X
7 K2 O4 K0 Z& L: u* I3 p 8、修改列的类型# b9 U6 T; B7 ]; w3 }8 r) x4 Y. N( i
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
) t' u3 @4 X g5 \& Y$ g$ w alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned, z* @- e4 P& W. ~2 E: n$ \6 p/ ]
% z0 i1 T4 a* @8 D3 F
9、创建索引0 o8 k, u w# Y- `" {8 z/ p
alter table table1 add index ind_id (id);2 c" ~/ F1 U$ L, E
create index ind_id on table1 (id);1 E* d& {% J& E; a2 m, X( `
create unique index ind_id on table1 (id);//建立唯一性索引
- Z' T) G5 i! y8 L
9 c9 y T/ d# c. [. N( ] 10、删除索引
}; N V7 e: }6 [3 G drop index idx_id on table1; {' ~) {4 F; N
alter table table1 drop index ind_id;
. L0 C* B2 H7 q1 ~
2 \8 F9 z" h q& | 11、联合字符或者多个列(将列id与":"和列name和"="连接)6 y' Y! r5 q$ _9 V4 }8 i
select concat(id,':',name,'=') from students;+ D( X! f6 u6 N. u5 `
g1 v/ G* E. g, g+ T: h
12、limit(选出10到20条)<第一个记录集的编号是0>" A/ s# `% x) M7 V
select * from students order by id limit 9,10;" H) e+ ?8 Z* n% s6 {
3 Y+ `9 z Q% m# |0 Y 13、MySQL不支持的功能
/ i2 n+ f& b& R! v8 `- N1 q: S 事务,视图,外键和引用完整性,存储过程和触发器! H" O2 ?( E( J# T0 |0 a% Y5 u& W
8 b' ~% R1 A4 n/ |5 I; F3 ~+ C * y8 t/ | O4 g7 `8 h4 u: I
14、MySQL会使用索引的操作符号3 T' E% e3 Z% {
<,<=,>=,>,=,between,in,不带%或者_开头的like
% ?6 q9 o7 R# a& U , l4 g: a% e- K
15、使用索引的缺点 Y: e' W5 |1 Q& b4 v: Z- h' `
1)减慢增删改数据的速度;
" w" D( L V7 F% r2 s3 G v: Z" ? 2)占用磁盘空间;
" z' _6 d! o# {4 i( o 3)增加查询优化器的负担;
0 [0 ^( O+ a1 P6 \ 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;# J" N9 N B) W1 |3 G3 |2 c; k/ h
8 g& {8 t9 N9 g, c6 u; ~, H) Z
16、分析索引效率1 F P0 m3 ^( @
方法:在一般的SQL语句前加上explain;
4 u" y; O( I* r/ r 分析结果的含义:+ I2 T M# Z1 `& w7 {& v* R9 Q
1)table:表名;
9 F5 f& s# @1 ~9 h 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
( b( R, V9 Q& V$ t* b- u 3)possible_keys:查询可以利用的索引名;
1 C/ x6 E2 W1 x3 a8 p& F0 ? 4)key:实际使用的索引;+ O% h8 w$ k6 i2 y
5)key_len:索引中被使用部分的长度(字节);
# c! u" K" P2 O, k5 ^. P( n! s, j 6)ref:显示列名字或者"const"(不明白什么意思);
8 z. y0 x- D6 G9 j% l, I 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;% P5 N# B0 |. T& |& h
8)extra:MySQL的建议;
r3 ?! M2 g7 C3 P) i' O/ a7 q2 R
! c3 ^1 p2 d7 ?; X, A. S 17、使用较短的定长列7 `8 J6 M7 X* ?" \( U+ R
1)尽可能使用较短的数据类型;
! L8 A! v) A$ u% } 2)尽可能使用定长数据类型;: q! c. K' n" `; d, ?2 z
a)用char代替varchar,固定长度的数据处理比变长的快些;
, H4 d" y d% I; s% d- ]/ _ b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;7 n G4 y) W. n" T4 \1 C/ { _
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
4 E2 x. I$ ?" I5 H$ F& J d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;5 R9 U& W) g9 f9 J0 N
& `9 D3 P6 B& \$ d/ o* n
18、使用not null和enum
3 i* P7 U. N: h" w 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;0 n! y; ^( s7 B) ?4 y- G# V
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
p1 B! M, z* \* B% { $ a/ @/ y9 ~, m% D" Z8 b
19、使用optimize table
6 X1 W" u* ?9 j3 Z3 C 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
$ T/ K9 c# `! [4 L ) ]6 d4 T' i) t0 D0 `. L
20、使用procedure analyse()1 g0 H, O: }- x; D8 F( _5 I: E, l
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
2 u- g! R* O( J4 Z3 X select * from students procedure analyse();( p; [& A" v, D7 P- f
select * from students procedure analyse(16,256);
6 Y0 A4 w5 I! J# i4 h1 A7 J1 q+ _. W 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( k+ v- L1 H" a1 l6 Y% I& l7 [$ w
. S; n" Z7 [8 m: C$ Z& S* \( ^, T
21、使用查询缓存
; b( n% ?( H2 }0 N 1)查询缓存的工作方式:$ g) C1 ~ V5 `5 ~
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。" Y9 Q, W( B8 U8 k) J6 e
2)配置缓存参数:9 X6 C; L2 B/ X; B( E! s& }$ ^
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
5 n; V8 g6 ^" @' o- I 5 a( {8 V! I& A& F; \
22、调整硬件: e6 r! s% b9 T2 Z* x7 T1 K# o
1)在机器上装更多的内存;; y2 t0 U0 F" A- j+ K
2)增加更快的硬盘以减少I/O等待时间;' g0 Q! r5 J" s3 C9 A/ \
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
% E; }9 h& Z: { 3)在不同的物理硬盘设备上重新分配磁盘活动;0 ^0 ?8 t: B& n8 C' z& [" L: ?( M* A
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。# K; w& `1 j i1 k1 o" V6 ]7 p
|