启动:net start mySql;$ U5 b9 W5 R3 z$ E) ]
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
1 A/ v& Q8 z. @6 t X" Y 列出数据库:show databases;
2 i# `/ N2 U7 {6 C6 { {2 T+ ^ 选择数据库:use databaseName;& k3 E- |) u0 H/ a! c
列出表格:show tables;
6 y7 P" G9 V* g/ j1 M 显示表格列的属性:show columns from tableName;
( @) S- o1 b, V* C/ T+ V1 C& Z 建立数据库:source fileName.txt;
$ n0 W3 R1 s1 U" e, H3 Q+ k 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
8 N$ p8 A0 V0 {4 E 增加一个字段:alter table tabelName add column fieldName dateType;
. r& x0 m) }7 C& r/ b1 i; r( a 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
& w# e: \" o' E# R 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;4 H* p0 a! a' p3 s% [6 x% I/ s' Q) x) Z
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";6 e" D6 G+ @- Q$ z0 ?
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
6 V7 `; K6 S3 _ 查询时间:select now();
, [6 p; E {7 s/ E* D7 F3 R0 O7 A 查询当前用户:select user();
1 c& S- }; C) F C% u 查询数据库版本:select version();6 s; A% ^2 S2 z4 D$ q
查询当前使用的数据库:select database();
, ]" l' u2 t2 n 3 J( L2 B7 i( j
1、删除student_course数据库中的students数据表:
0 q: J/ R7 C. `, J- X. @0 b rm -f student_course/students.*
( X4 y; {, ^6 `. X2 b0 Y
, S2 O9 ]6 K; X" e7 E) a 2、备份数据库:(将数据库test备份)
4 r2 I& B$ q x/ c& ?$ X5 n mysqldump -u root -p test>c:\test.txt( e) H$ B$ e5 `% k! ]6 F7 a
备份表格:(备份test数据库下的mytable表格)
: J* t% z6 p0 E8 e6 l mysqldump -u root -p test mytable>c:\test.txt
7 c% _+ E! R. h# }+ S* }, g 将备份数据导入到数据库:(导回test数据库). u6 z8 A( c$ T9 R H- z; L4 n
mysql -u root -p test<c:\test.txt
0 n6 P/ `# Y* r, S. z$ S& O
! w# _, I# j/ | 3、创建临时表:(建立临时表zengchao)
( _5 |( h9 c# _3 R, S2 R! P create temporary table zengchao(name varchar(10));
( n: G; W. D( ~1 U3 C( \
8 T# i! w! F! U5 f$ { 4、创建表是先判断表是否存在
0 O2 u {/ C8 ^" E create table if not exists students(……);
& `8 v& ]* u- ~
+ Y- N2 j! b2 B! l( o 5、从已经有的表中复制表的结构/ h3 _0 n, U" F3 m( [8 }
create table table2 select * from table1 where 1<>1;
5 h" C% w8 w1 [5 r/ O$ ]! u1 ]* b, {4 k 7 k' i# C( c& g( {
6、复制表
9 j2 I) r1 K4 H0 i8 y) \ create table table2 select * from table1;& v- D$ ~8 n% F$ W) Y
- L& w: r! }+ \, P- `' c 7、对表重新命名
& f6 S4 Z! D, | alter table table1 rename as table2;
0 h. c2 ?1 u3 x( U
" q" B; h- s% ~" @6 y2 F 8、修改列的类型, @* @. u# R' u+ j1 m6 R
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned2 V( t/ R* y+ _( |- U
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned- V) h5 B, a4 `# F% v+ O% c( a; Q3 S$ G K
7 L0 g9 E) W; l4 {9 q) k5 V
9、创建索引
2 a" d k. I2 _1 q; k alter table table1 add index ind_id (id);+ B. I3 u2 }3 n2 n
create index ind_id on table1 (id);% H0 n& J, ^7 K5 P A- O! z N
create unique index ind_id on table1 (id);//建立唯一性索引
1 F. F0 R% X! U" Y% t- D8 {3 D - E. W+ x% O6 L- f. t
10、删除索引
, S9 t/ {* y! M drop index idx_id on table1;$ T- s6 i$ B( r7 [7 u
alter table table1 drop index ind_id;
3 i3 r/ ~3 e2 k4 V+ Z( _ . C* A) C' f$ F* w
11、联合字符或者多个列(将列id与":"和列name和"="连接)$ S( n1 I2 C6 T& b* k! r" T( ^0 `" m
select concat(id,':',name,'=') from students;
" D" T9 ]0 R& D# F6 u# O' N ( F+ O. T3 D/ G% `; Y1 L+ I( j
12、limit(选出10到20条)<第一个记录集的编号是0>, b) q5 o3 F5 r6 ~5 l* I) B1 C
select * from students order by id limit 9,10;
( O7 O2 d z- c& c
0 E3 @/ V) q" _& |3 J3 g 13、MySQL不支持的功能4 ^ L4 Y7 A2 W3 \
事务,视图,外键和引用完整性,存储过程和触发器
* g1 o* w) I5 X" v+ w3 G; {
+ M/ R9 N+ F$ U6 ~7 @
0 [. M' ^7 F6 i6 u: N5 w2 W: @ 14、MySQL会使用索引的操作符号0 Y6 d* |. w/ C3 b/ \
<,<=,>=,>,=,between,in,不带%或者_开头的like* I) W2 k8 m1 x9 {3 ^
8 Z K5 a( ~9 | }' ]4 R
15、使用索引的缺点
0 q6 E- r" F2 n3 f( q. q7 I" ?: y 1)减慢增删改数据的速度;
& ?/ o* d& J n" r2 d 2)占用磁盘空间;; b/ ~- s" A1 L! N- V& ?
3)增加查询优化器的负担;, B& A7 _: ~: g( C. o
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;4 Z2 J1 ^. B; @3 u* j q
6 c( A' X/ U# x% T
16、分析索引效率
7 N6 G6 ~7 v2 o' g 方法:在一般的SQL语句前加上explain;+ T0 {9 G* {8 @; v
分析结果的含义:" x# Y, l' Z7 {
1)table:表名;
! t$ D+ z" C k7 h0 H 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;( |2 F: r6 Q0 m* R& |9 N: _, a
3)possible_keys:查询可以利用的索引名;
& c x# ] @4 V/ V! a 4)key:实际使用的索引;8 u" U0 d( ~1 T
5)key_len:索引中被使用部分的长度(字节);
5 M% C" d5 H& B3 q! f 6)ref:显示列名字或者"const"(不明白什么意思);
& k) t! j4 x* d2 { 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;5 `$ I( Q3 A: ~+ A' ~# L
8)extra:MySQL的建议;1 s' f# D' ] u0 Y! c1 C9 V
- r) Y3 ], s+ x3 E; D$ o
17、使用较短的定长列/ A+ N; u9 q0 x# L9 N) b
1)尽可能使用较短的数据类型;2 W g8 K m5 w J
2)尽可能使用定长数据类型;
2 s0 w; t+ V$ S, [ a)用char代替varchar,固定长度的数据处理比变长的快些;
8 z2 Q- Y( ]/ }; C. {: m b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;+ _; |4 T' R. q' L7 G/ n& g
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;9 n6 a8 x4 P, O- |- {/ E! j% m# s
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;7 A) d7 ^5 n/ N7 \
( a) N" M& V8 B, ?6 \- f
18、使用not null和enum0 k. L+ U( S) a1 C! z# P- N2 t
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;& x9 @. ^% g+ d5 {- ]! y h
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
E) [) o6 h9 \6 \4 F: T
& i5 W& M& b% _! ] 19、使用optimize table
) d4 f1 `+ g9 `. T( p1 A! c F2 a 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
/ o+ p- t1 w$ J! i / p7 `0 K1 ]% j( |" c% A
20、使用procedure analyse()& T* `2 @& B5 b
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
# u/ j( H4 ~+ J0 e select * from students procedure analyse();
- s1 \3 |) @: f2 K8 j! m- R- g) Y" f select * from students procedure analyse(16,256);
6 ?3 e+ i9 O" u4 g' a 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;& C' y! P4 i/ p5 f* y
$ L) u# z+ F1 G+ p% a 21、使用查询缓存
) E [7 g- w2 ]+ e4 d& V: d 1)查询缓存的工作方式:% N8 o/ w7 B$ v. P1 |
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
! d( l' r3 T- Q. { 2)配置缓存参数:# y: ?. d5 {4 H. j% J
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
( T Z7 Z3 O' d, `0 ^5 k4 I) i( u
. K8 K1 ]# g. t1 R0 t6 W 22、调整硬件
. S0 H: y8 ^! s* {8 U Z 1)在机器上装更多的内存;& U+ K% V4 A( ~8 I+ O' j
2)增加更快的硬盘以减少I/O等待时间;& i S; c6 l, D: R
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;( o) K$ f4 R2 f' W' W# Y8 j# m
3)在不同的物理硬盘设备上重新分配磁盘活动;+ o% d: D; z5 Z$ p8 b U
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。, }) z1 |7 Q, {% ^4 c5 g: P# C0 T
|