启动:net start mySql;! H. s+ |- @0 {: W b* `+ a
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;( `. o8 R' _9 f$ L
列出数据库:show databases;. t0 J2 ~) \0 R$ b+ M" X, H2 f8 h
选择数据库:use databaseName;; P: l3 Y7 x: ^1 h7 [
列出表格:show tables;" v* W% u- |- {# F7 L7 k/ o
显示表格列的属性:show columns from tableName;
& }! T+ G/ O% I5 b! h5 A2 ` 建立数据库:source fileName.txt;( G5 {2 V# W E) o: P& j' T* H
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;+ Y) i& U8 `# y5 i
增加一个字段:alter table tabelName add column fieldName dateType;! E2 h# a- [% V4 x1 a
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
. s- g/ I* k% K! g( ~ 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中; ?- i- a0 B B5 i5 b
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
1 M' m! M8 J. r- g! W- D 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;6 }( ^4 U9 M7 `7 I3 E
查询时间:select now();0 n7 I$ T3 h8 T5 d: S4 \: w
查询当前用户:select user();' b8 \$ B e6 S8 J0 X" _7 @
查询数据库版本:select version();+ N, B! [: ?- o: M) Y' a+ L3 l
查询当前使用的数据库:select database();: d/ ?: X6 s7 n/ o9 o
+ Y0 p3 o" a' k% W5 V
1、删除student_course数据库中的students数据表:5 x7 q5 A3 B" U- K, U: }9 k
rm -f student_course/students.*
% G. a* |4 |0 H1 Q! t+ u 1 ~8 y! r8 ^1 f: P7 j9 n
2、备份数据库:(将数据库test备份)
+ N2 P/ Z7 @- o4 M! Y$ @$ C. c& L mysqldump -u root -p test>c:\test.txt
! w* \5 q$ i% ?2 ^3 S! E% X3 g 备份表格:(备份test数据库下的mytable表格)7 v; T. k; l4 A& S2 R* q5 E3 C7 } ?
mysqldump -u root -p test mytable>c:\test.txt( W0 K3 o& \6 U( g/ n# m ]
将备份数据导入到数据库:(导回test数据库)- C; ^* x: `$ S3 x
mysql -u root -p test<c:\test.txt7 }& x2 D- f; J4 r0 g4 i% k! R
% L' `; e/ t1 l
3、创建临时表:(建立临时表zengchao)+ ^0 K* n( P# @! L( ]
create temporary table zengchao(name varchar(10));
, N6 o5 J8 y) X# B7 X
/ r* V* ]" ]; L2 g5 L6 |7 m 4、创建表是先判断表是否存在; O' @8 W2 @2 x: D
create table if not exists students(……);
% ~( O. w3 P% N9 q" f/ s( S: U4 P1 u- F
C( s$ A2 g2 |0 v- T) I 5、从已经有的表中复制表的结构3 D" a2 |. _2 |2 [7 m5 b
create table table2 select * from table1 where 1<>1;
n& Q; i# M* P* X " _; D/ u- I( n. C) @9 p O
6、复制表. x: u! k* t1 X7 K9 k
create table table2 select * from table1;- Q" z; i3 ~0 N0 @% i8 M" J% F. z$ i
4 x) s8 w' m1 z5 ?2 T3 g' j: R 7、对表重新命名
; w- D9 a0 Y9 z alter table table1 rename as table2;
3 m4 E6 G* v) z+ y0 }0 v ; z5 ]: V3 L# Y2 E
8、修改列的类型
1 G I- ]6 n, s, S3 F alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
1 P' x- c2 o5 J# C, x alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned0 W: {+ y# ]- B' Q0 o+ | l2 n
$ `# d. v! ]* {0 P3 m! g7 v5 G 9、创建索引
8 ^" W3 D% \2 u$ P \: s alter table table1 add index ind_id (id);
1 a# C1 B, N% `" Y8 G: ] create index ind_id on table1 (id);
# S( m1 @; Q2 F+ K6 C8 v$ N/ b- y6 I* w create unique index ind_id on table1 (id);//建立唯一性索引" Q; Q' m, |/ d7 R- B1 _9 ]# g/ b1 M
- c8 u/ A; u; q- D
10、删除索引
9 r1 \6 V/ V3 C4 V' P% p! M B1 @ drop index idx_id on table1;2 ]9 ~+ g0 R- x8 ^9 |
alter table table1 drop index ind_id;
1 F+ J& k" h) M! s ; U/ }5 `4 d+ q% ]6 E4 w
11、联合字符或者多个列(将列id与":"和列name和"="连接)/ a* a/ N. C+ ~8 F0 W3 `' Q9 _
select concat(id,':',name,'=') from students;
$ h+ t" ?/ I, C3 v9 K! C
" k/ P' I5 S8 R- [- V 12、limit(选出10到20条)<第一个记录集的编号是0>4 P8 `6 k5 n, P$ Q
select * from students order by id limit 9,10;% X+ o3 n0 x. P2 i0 i5 U3 }7 ]
( r; q( D! ~" f9 k5 g
13、MySQL不支持的功能
! k+ R* P1 _# I8 b% H. N6 ~$ M 事务,视图,外键和引用完整性,存储过程和触发器
2 O9 n/ ]5 V- b# S4 O7 h5 Z: [5 R
: a& I7 K* S, H% r( `' G# f' W" d& f6 k7 w # d1 Y8 f% H& B
14、MySQL会使用索引的操作符号8 ]% ~& |2 \; t# W
<,<=,>=,>,=,between,in,不带%或者_开头的like t7 o9 D. S6 Y* x1 b. X# e: z
9 v' F, Z, n1 \( U: g! C2 Q 15、使用索引的缺点
# H) X+ `. _7 q$ R, c$ ? 1)减慢增删改数据的速度;
& r+ i4 q& x" T 2)占用磁盘空间;
6 Y( T1 _6 T( R/ t, H8 m 3)增加查询优化器的负担;
1 ]! T) V' D& `- X 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
1 X& j, s8 i# w$ m6 d2 a7 b2 k
2 u; [* O7 _9 h& } 16、分析索引效率
, x3 A7 ~+ N4 }+ b8 H& ]- R6 i! D0 ]7 v 方法:在一般的SQL语句前加上explain;
, {* z/ J% [5 r+ I& Q6 \' A 分析结果的含义:. K/ M9 J4 w" f* I/ Y$ l
1)table:表名;% N! f1 o) f, a+ P g; t* r5 g
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;( {0 V3 h, R0 `" i, k# h
3)possible_keys:查询可以利用的索引名;
( b: L5 k# n' t! H 4)key:实际使用的索引;
* H. S8 H- A( l$ b, d# H 5)key_len:索引中被使用部分的长度(字节);3 q2 d; Q" r ?4 u
6)ref:显示列名字或者"const"(不明白什么意思);
7 @1 ^( x* S, X 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;$ ~0 [2 v/ ~* y2 \$ Y9 E
8)extra:MySQL的建议;0 e8 }) V& g. j# A
+ n; I( y2 L7 k, D6 r) e
17、使用较短的定长列. d& S. ^ F1 Q' c: H( D
1)尽可能使用较短的数据类型;- s# P5 v! u' W& u) x: t! O5 y3 s8 F# u# K$ J
2)尽可能使用定长数据类型;) y# X7 `0 _1 B0 g1 o- E j
a)用char代替varchar,固定长度的数据处理比变长的快些;
! z/ [2 A7 J( H; c2 ~. V k. g b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;/ q0 f! G2 M9 m4 Y4 b
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;; [+ _1 c2 {9 N$ l1 q- V
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
& d2 l) F2 p; R* M7 T6 z
2 `) N' L4 f; j) Z 18、使用not null和enum) _( d% D2 w6 U9 C/ P
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
# }: s/ c2 `* k. _, y 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;9 J" i% q& I+ U+ B( U2 a
/ R- a% t" I' W; \
19、使用optimize table
& N8 m1 C9 h# n 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;8 }, k3 c2 @" n! F. x
3 v( A9 q. t, R4 h+ C/ E3 M 20、使用procedure analyse()
! B' k7 I T. [0 u9 K! a) e$ f 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:0 b3 s1 P4 X" H' S8 a% O3 ~
select * from students procedure analyse();) B$ E9 z1 N2 F) ?+ R; |0 H( e$ Z
select * from students procedure analyse(16,256);
5 x2 K/ @8 K. L7 R3 i5 N3 y 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
" K2 j8 \' O; }2 E: |
3 R/ l- c- Z v- }% D, p4 D 21、使用查询缓存
/ q, z: S; Q% z9 Q5 x+ `2 A 1)查询缓存的工作方式:( }8 V4 N0 A; U, k- \1 ^2 p
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。0 X9 N6 x, f: K' b$ ^; m, G7 p- D( b
2)配置缓存参数:
9 C: _( b) O, N/ h* i! \ 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。 C; i: M9 R. t% r
) Y. Y. T9 Z% u4 g4 v
22、调整硬件
' v) ]' k; \0 V 1)在机器上装更多的内存;
# Q, H, Q. E$ H 2)增加更快的硬盘以减少I/O等待时间;4 I8 O, r8 S! ^& i2 M# X# U
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;: p1 T) `8 t% v5 X
3)在不同的物理硬盘设备上重新分配磁盘活动;
7 p8 k$ {. J7 I ] 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。4 z! d& o* E* |" ?
|