启动:net start mySql;4 u# q& m0 b' r" t4 Z, a7 J
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
) I: r7 S( Z5 K& U4 y 列出数据库:show databases;$ N U" V! O# Z% W7 `8 O( _2 V
选择数据库:use databaseName;
0 P& K) Y" ^" ^+ ?. @2 C 列出表格:show tables;
$ j ^3 g9 L9 X$ w3 ]. n, b 显示表格列的属性:show columns from tableName;
7 K- b/ t3 J; V' v. b* @ 建立数据库:source fileName.txt;0 D% J, H$ T2 p# a5 W r
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
` S( s7 a$ g& { 增加一个字段:alter table tabelName add column fieldName dateType;
! R% U0 q3 G, u* Q7 G5 p: }* c" b3 T- v 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;: Z& I$ c; U4 o( u1 h J
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;9 A* S5 s; B( B. n
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";; @ |7 N5 d" W
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
2 e+ j% n! e( y; U; J4 m" N) J 查询时间:select now();# ` o6 \- Q7 z
查询当前用户:select user();
2 q, b+ h G. W: g% ` 查询数据库版本:select version();$ x2 I" p( ~; g3 I+ C
查询当前使用的数据库:select database();! }3 `; K+ L H, Q5 r
1 [3 D: S! l4 f5 `5 T, b 1、删除student_course数据库中的students数据表:
6 t; s7 v! n. k+ U5 ~! h rm -f student_course/students.*
) O) b, {2 d) w
6 y3 X! l) b4 e# ]/ ?& x 2、备份数据库:(将数据库test备份)
( \7 X- I2 p. F3 u mysqldump -u root -p test>c:\test.txt
8 X- q" U7 P4 r+ Q3 [' [7 _5 K" } 备份表格:(备份test数据库下的mytable表格)
4 O4 v( I! z) X# c mysqldump -u root -p test mytable>c:\test.txt
6 t6 b6 ]8 Z& @2 R/ r 将备份数据导入到数据库:(导回test数据库)
4 R' ]( k8 ^0 d9 j& ]1 k mysql -u root -p test<c:\test.txt. ~$ M4 l6 D& s3 y
: m5 P. b+ J3 P& l9 E1 I
3、创建临时表:(建立临时表zengchao), P' q+ t- @1 \1 t
create temporary table zengchao(name varchar(10));* \1 _/ }' l% e C+ p6 X/ k; Y6 B& p! X
3 n) y# R8 F% v; N' ?8 m 4、创建表是先判断表是否存在
, F b% D5 _# h0 a. s create table if not exists students(……);7 c; [5 }" K- Y/ v6 n
" K' ~* o1 ^1 q0 W 5、从已经有的表中复制表的结构8 c0 H- N3 L& J
create table table2 select * from table1 where 1<>1;: |: [. x& J/ T. ]- i
1 M4 `8 g' [8 j. t d+ R; M' ~ 6、复制表# G6 h* O: h# w A+ Y
create table table2 select * from table1;
) h; D9 N9 [+ m' D6 O1 ] 7 \7 A" S6 v9 ~! P; a$ G
7、对表重新命名- T0 ^7 v- G. Q7 I9 Z
alter table table1 rename as table2;
8 n3 l- H7 O, E 3 E' R( `5 ^. |6 ]( {$ k/ O7 l
8、修改列的类型
0 ?* }; L+ V- R8 a3 w; t/ k% b alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
/ }! s3 }3 R* i alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
/ i0 g) a9 f( R A/ h$ C6 k \
5 o* K) M" m0 o R* f3 K 9、创建索引
9 r% Y7 e& S+ P4 h alter table table1 add index ind_id (id);0 l2 A( t8 A$ l& b- u- y) }4 o6 a
create index ind_id on table1 (id);7 Y k2 q5 a( c3 M: M
create unique index ind_id on table1 (id);//建立唯一性索引
5 {& _; u, k- E* T% p# y$ C + ~. f& O5 R0 b& k: I- n
10、删除索引
1 E3 e* w* g& E2 I( i drop index idx_id on table1;
4 M+ a: V/ Y# N! h7 y; V2 A) Z alter table table1 drop index ind_id;# @; {$ {% i# d+ b9 Y8 K
: S' a/ Y+ w8 |6 V8 q1 k 11、联合字符或者多个列(将列id与":"和列name和"="连接)
5 Z) `' ^5 N# m+ t* S select concat(id,':',name,'=') from students;
) W% I& E& X' X/ p * A7 X% M. z3 }& x R* w# o
12、limit(选出10到20条)<第一个记录集的编号是0>' V, \# a4 h; {9 L- `
select * from students order by id limit 9,10;& F4 _3 h' O9 _" k* ^
7 F- w9 [8 u8 N6 ~4 H( J8 |0 p
13、MySQL不支持的功能
; }- f# @4 p; Q2 [* S7 P( d 事务,视图,外键和引用完整性,存储过程和触发器9 F) w' C1 ?4 o/ k' U
5 @5 w1 d1 G7 I I6 Z
1 P" V3 w2 L: n 14、MySQL会使用索引的操作符号8 k! w8 n1 X' _
<,<=,>=,>,=,between,in,不带%或者_开头的like6 t- F5 h2 E+ B/ f3 U
- S1 ^4 G. M$ J& J: D
15、使用索引的缺点
# x* Q; J) I9 ]6 \& R, j7 Y5 v- k 1)减慢增删改数据的速度;
- _5 u+ s M5 B( C 2)占用磁盘空间;+ t, ]9 m: N. ^9 P" \7 q0 Z: e
3)增加查询优化器的负担;) ]+ K3 s( `0 i3 N
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
; W4 W! q+ l3 N; l9 ~ ' Y2 X4 r2 p! E& ^1 i/ J
16、分析索引效率
' q+ O& R: Y/ g) r 方法:在一般的SQL语句前加上explain;
, h& T4 D! @" ]/ \2 g) _' \ 分析结果的含义:
, t k8 c) E' j5 p0 W/ G2 V 1)table:表名;
9 ?2 |0 R# o( Y1 G 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;+ P/ E9 A+ V1 I( ]
3)possible_keys:查询可以利用的索引名;
U' H. G5 W8 ~) Q* \4 n2 G 4)key:实际使用的索引;
; z+ I3 T6 c# O* g G% t 5)key_len:索引中被使用部分的长度(字节);1 m$ i2 u! @- V
6)ref:显示列名字或者"const"(不明白什么意思);. }8 _$ P: j& V
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
$ Y+ {7 l X, E& ?9 Q2 P0 V 8)extra:MySQL的建议;2 a; s$ b: H h9 A I+ v" O
2 g: Z* O6 c5 ~) n' A
17、使用较短的定长列5 Y8 Q& r4 u+ N, G
1)尽可能使用较短的数据类型;" [ m) F2 Z6 l/ X
2)尽可能使用定长数据类型;
7 J" V5 V4 ^) a6 m: b: Q5 |1 O a)用char代替varchar,固定长度的数据处理比变长的快些;+ c4 J! w2 a: q! D1 L& g
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;& s+ l( m! F# b6 `. ~) r2 h- c
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;/ z) P! x- Z! O7 o1 X" G
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;2 y) [1 o- r( {* Y: T6 O3 N
6 N; e: R0 W' j' i0 s
18、使用not null和enum
3 B4 f6 a+ N! q4 @3 ]4 K 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;5 g: y7 m5 \! a4 j. C3 I) b
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;6 `/ ?! j" m4 ?8 j+ M
" Z9 g! R( y, n4 _; ?! P8 e: Q# I
19、使用optimize table5 P. S- g: r. h" Z( Y2 A
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
) \ u: d$ g) v+ I: @/ R
5 S$ K! |, I+ ~+ s6 h 20、使用procedure analyse()
+ h1 m2 E: J; Y* R 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
+ X% m. n: g! _: N4 Z: t/ | select * from students procedure analyse();
( B* \0 n0 g5 f: F$ e5 a; h( H select * from students procedure analyse(16,256);
1 I3 ]8 e) ?" q0 l; x 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
. h( d- Y5 ?- t4 Q+ x. {
' e7 P: |+ U$ F4 q7 ~ 21、使用查询缓存! s7 u# k( \8 y8 n* i$ N
1)查询缓存的工作方式:$ E! Z$ A* G8 ?5 |* V8 R# x: c
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
# i. w/ o' O, @! _; d& H 2)配置缓存参数:
6 Y. b4 S: r2 v( W# B8 B5 a 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
5 J( g% s0 ~4 E. T# L0 }6 s% n
! l0 v% F4 D) e2 }3 C. P 22、调整硬件
( F. X( N: S1 g( R* X 1)在机器上装更多的内存;) [6 v2 p3 r( W: ^1 `, \& b. h9 L
2)增加更快的硬盘以减少I/O等待时间;
2 M- w0 @4 D& ?8 v2 C2 y& _5 l 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;% M5 [/ h( {5 s9 G$ X# o
3)在不同的物理硬盘设备上重新分配磁盘活动;3 R% s5 ]' v1 e" f1 n
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。% H& V* K2 s2 r+ R1 d- ?
|