启动:net start mySql;
0 ~3 a" E* N7 L4 O* |" u W 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; `2 f- c- G. }5 p# b
列出数据库:show databases;) g1 R# V' E6 S- x9 |0 L( G
选择数据库:use databaseName;8 k' e, c9 u2 ]$ r
列出表格:show tables;
- A" s8 Y( ^1 \$ m* L' |/ t 显示表格列的属性:show columns from tableName;
% A' Q; p. z5 ^4 D( W) x! N 建立数据库:source fileName.txt;
. e1 X$ L; J0 Z) r! e, k4 q 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;( \) x/ Z8 f w+ p q
增加一个字段:alter table tabelName add column fieldName dateType;
- J& K! S- a2 l5 Z2 v/ @6 p: I 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
2 K) N* F- |# R0 z5 L 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
" Z) C: K- T! [* y9 P 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";# W9 L8 h1 b D" ]6 x+ I! y5 v
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;; p, d; ?3 W N# e
查询时间:select now();
7 G/ c$ m' o; ?+ | 查询当前用户:select user();
$ z8 w7 A9 Q w- K, D O 查询数据库版本:select version();% U: @# x3 m0 x6 q/ i' K) d5 Q: |
查询当前使用的数据库:select database();
) m. S( |% T9 P" \, \% y$ X5 r
9 W- c, X$ b' J U8 x) g 1、删除student_course数据库中的students数据表:3 J. ]% v4 A6 ^& P8 x# [& s
rm -f student_course/students.*+ k; N* x0 X/ C% v- v
+ g B% X8 R& U1 J7 C0 b 2、备份数据库:(将数据库test备份)1 b7 h( H% V5 @( h% t
mysqldump -u root -p test>c:\test.txt
% |( V" Y/ a5 P+ ^ 备份表格:(备份test数据库下的mytable表格)/ g: H9 l- N1 |7 t1 u4 G0 Q* N
mysqldump -u root -p test mytable>c:\test.txt
! r5 s1 z% `- r# B 将备份数据导入到数据库:(导回test数据库)& B$ @4 I# ?7 @$ {" w D
mysql -u root -p test<c:\test.txt
; h% ~2 P" r1 Z( K0 j. [+ |
/ r( D* H1 f4 |, m! l2 b' D 3、创建临时表:(建立临时表zengchao)
' i1 S- f* n! T create temporary table zengchao(name varchar(10));% @- G) U+ e2 V$ }+ o$ b
3 q& k" ^7 K7 N: y. [
4、创建表是先判断表是否存在
4 P, A8 L$ ^6 z. A: d6 N6 q Y9 \ create table if not exists students(……);
; p' F7 }/ B- j7 S# ]" y4 r+ u7 } 4 r3 W" f8 N: V- }7 a" i( a* w
5、从已经有的表中复制表的结构9 F9 ^# G' u0 m. F
create table table2 select * from table1 where 1<>1;
$ p4 `- w* T; k1 ]' b
) Z% F$ w" }9 e 6、复制表' x" b, S" P/ {. K2 I
create table table2 select * from table1;
6 K7 ]0 _+ I% p2 x
$ X9 L; E: [! b. ^; i 7、对表重新命名
3 y! \8 M; a! Z; ]0 i& {. A2 d$ u alter table table1 rename as table2; H: e0 _8 L6 S6 P3 ]
* R2 j7 K/ }& Y- g- E r 8、修改列的类型
" @0 ?6 `; p+ W. g. q3 F- p9 u alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
3 t4 c( r- ~" O alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
; {, D/ L1 Q Z# W( @/ `* Y
/ W8 b$ v- g- g3 `; V 9、创建索引
! I M" c& X1 }, w- t+ ` alter table table1 add index ind_id (id);
, x: M: d) C% j" ]6 { create index ind_id on table1 (id);# E. q! u& b3 J* P2 n
create unique index ind_id on table1 (id);//建立唯一性索引 I& s# B" L7 O- t: y( v# U! g+ h
; \* Y3 y2 H3 Q' @, n) a8 g3 U6 x6 ]
10、删除索引
% D: v. P" L5 |2 N! k drop index idx_id on table1;7 O3 ~/ T5 u0 G1 J/ `
alter table table1 drop index ind_id;
/ R x3 K/ w! r7 u W9 O* M
0 @; k: g f* Y& l 11、联合字符或者多个列(将列id与":"和列name和"="连接)
( }% O0 z! U' Y. S1 ^* W select concat(id,':',name,'=') from students;, Q8 O' A9 x1 Y0 F3 l! L
, A9 t5 e& U* A6 T# p, H& } 12、limit(选出10到20条)<第一个记录集的编号是0>0 f3 H) ? J0 \/ X2 J& m
select * from students order by id limit 9,10;8 _0 A3 N0 f' Y
6 J+ E+ x2 n* V$ d% o5 g+ N+ a J' s
13、MySQL不支持的功能* }9 |: ]% A& I, C4 i3 F) A4 q
事务,视图,外键和引用完整性,存储过程和触发器4 }% h3 @% g( y6 s
. t( s0 I$ Z! {$ ~1 ^- \& v
0 Y z* p" E! S
14、MySQL会使用索引的操作符号
2 q- x# L* \+ d) H5 x$ s <,<=,>=,>,=,between,in,不带%或者_开头的like
% l' P' b3 L `6 M" Z
$ O% B7 e1 B& i% m4 }+ T# { 15、使用索引的缺点" H5 I, X; q- j3 h# s
1)减慢增删改数据的速度;
! c6 n: V4 e: H: j, n' s( c 2)占用磁盘空间;
q/ o. ?( C" X' w) f6 U, j 3)增加查询优化器的负担;! c4 n) {! J+ c- }
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;' u4 w! n9 _& U4 ]
/ Y. z/ ?6 H) i: { 16、分析索引效率( k' L! t. J3 B; E( R
方法:在一般的SQL语句前加上explain;1 q" m( r/ E& y7 l Y
分析结果的含义:- f! U+ z' ?: `! h. U7 ~) P
1)table:表名;, K+ r0 N5 i# A- t& f
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
! G3 R& g3 T- Q/ A& i# o% Z 3)possible_keys:查询可以利用的索引名;, Q* ~4 }+ t/ m
4)key:实际使用的索引;6 s& \. j. o. I$ u5 F; A; l
5)key_len:索引中被使用部分的长度(字节);
) }6 _- i; w i5 [3 y0 U# Q 6)ref:显示列名字或者"const"(不明白什么意思);
1 T9 S8 ~' J5 j7 ^0 [+ n6 G5 M 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
' P1 H( x8 @6 b8 u' F& I& X 8)extra:MySQL的建议;
% q$ _* H- i& x# D- {4 B
2 [# N5 @. @6 p5 O" N4 D& L 17、使用较短的定长列
0 l8 J( X) T$ m/ O 1)尽可能使用较短的数据类型;
* f1 M7 B( Z) A& P 2)尽可能使用定长数据类型;( k! Y% {2 b' X
a)用char代替varchar,固定长度的数据处理比变长的快些;/ q& d1 o' o- R: z8 n* q F% E
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;: v+ ~) [3 C" s: b
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;1 d$ c) ]8 q+ J0 ?( K& P! s3 ~" T
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
- G. g) C/ {0 | - d O: m. W. y
18、使用not null和enum
( s/ X% g( x3 l& p& H; \. G; I+ y 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;- } |9 |; |8 Z6 |
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;9 D2 l! R1 h3 W
5 @! H: ~# W$ ^. E, g0 L5 a! z; p" H 19、使用optimize table
, o) z" }1 X+ `" Y. V 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
+ i7 Y3 P8 b; p, n" d- M( f" X " @5 E; J" G M
20、使用procedure analyse()
% j5 u9 h% |) p# X& K 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:& ~6 Y* {2 S- _3 v4 I- E
select * from students procedure analyse();% j, V; c1 [' N& f' \: @6 M8 U
select * from students procedure analyse(16,256);; h d1 ?' t$ W/ Y2 q, m$ Z
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
; L* r, a, j+ ?$ E* M . a$ W$ X$ B! d( A9 |
21、使用查询缓存
. s' r7 w3 m% f G+ N 1)查询缓存的工作方式:
0 t$ T% |$ x( |8 Y) ^) K5 N 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。4 |; M( e6 f1 k) t: [7 T# D! V
2)配置缓存参数: F8 H( O% G3 B; {/ P
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。' G5 D. Q) Z. g
+ @, g8 t5 W3 _' ~6 w
22、调整硬件
5 \( A+ ?! I, [ 1)在机器上装更多的内存;: Q( Y2 [, M5 q# P R+ o% w
2)增加更快的硬盘以减少I/O等待时间;
) w2 R1 {2 ^: e& G 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
' X) C4 n5 w# m 3)在不同的物理硬盘设备上重新分配磁盘活动;
. L* v1 n4 o1 e; H z 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。: @7 a' H4 X- o; \' u5 h
|