启动:net start mySql;1 n5 f) f* _$ W/ S9 E* L0 d- o" C
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
: O1 b0 J& T' B# ^ 列出数据库:show databases;
! v7 L8 ?) J2 Q$ s/ A 选择数据库:use databaseName;6 D! }: N0 h6 Z, I: b2 {7 L, Q& N( X
列出表格:show tables;
: X+ {( m' E/ L7 [ 显示表格列的属性:show columns from tableName;
! [8 K5 S/ T( t 建立数据库:source fileName.txt;
- Y) h: a* C0 d4 q' j 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
4 x8 y4 k1 N0 m! f/ ~( [" z X 增加一个字段:alter table tabelName add column fieldName dateType;8 Y8 e9 T* S. P5 o1 H8 k$ g: s( t
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
. W; Z8 a) }; \& [; p8 \( B$ o5 k9 X 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;9 o7 {7 u, G3 Y* ?
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";- _/ r/ b, T$ a2 `+ [
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;* X) l7 ^0 u# u' h. S# _& w
查询时间:select now();
& y. s0 w9 w2 R# C# q1 y2 n: }6 E 查询当前用户:select user();
" s4 X5 ^9 E2 a% a' P2 c- S 查询数据库版本:select version();2 e; r/ [& r: b; v8 | R8 `1 g
查询当前使用的数据库:select database();
! u; G* V8 d& `/ c2 g* }
2 i$ ~2 C6 }) ~: a6 W 1、删除student_course数据库中的students数据表:
( D4 t7 s/ J- a+ r2 o/ h9 i rm -f student_course/students.*
9 L' q( I S' b+ U1 M7 X7 d' s
1 _3 B" o% {: P; D5 l% i 2、备份数据库:(将数据库test备份)
& {8 ]' H' Z U' s mysqldump -u root -p test>c:\test.txt! n: j+ j$ q% m% C3 A
备份表格:(备份test数据库下的mytable表格)
- d3 e9 q8 v4 w q4 c2 T+ B X0 S% F mysqldump -u root -p test mytable>c:\test.txt
) @* K8 _% G$ y4 U 将备份数据导入到数据库:(导回test数据库)
5 M! T- H& j7 N& L mysql -u root -p test<c:\test.txt
, g- ?' X1 ~9 a2 S, ~9 v# ]5 P % [* K6 u- F! S0 G$ X
3、创建临时表:(建立临时表zengchao)* J' ^0 w4 K, Z% U
create temporary table zengchao(name varchar(10));
3 Q" s4 Q- h( J/ E: ? 9 d4 C& j, i* X+ P
4、创建表是先判断表是否存在
5 v* O6 h# `0 |! u( }4 P create table if not exists students(……);
0 U% ^1 \! W0 _: \ + ]; d5 ]3 F+ u# R# O) [
5、从已经有的表中复制表的结构* s2 X0 Z/ d5 t4 M* i
create table table2 select * from table1 where 1<>1;8 M+ s/ R4 l0 ]
2 t) n8 S+ x/ [* H* A2 X
6、复制表
" D( ^' h0 S7 x8 B. Q create table table2 select * from table1;
/ T# W7 Q' B5 C/ S6 O4 e% [# _
2 k) `& V ?2 I& K+ A 7、对表重新命名; k2 s+ o! y7 s- r- M& }+ t
alter table table1 rename as table2;% E3 }. X7 m k9 l9 |& K3 E: L! o
3 d" a3 m1 F" m1 j7 } e7 X 8、修改列的类型; V# V. L& H3 i' z
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
" f/ I* w" L8 | alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned! y. Y5 T. A; `' S0 z; s
3 e1 u/ `2 v& Y8 e& m& a 9、创建索引
3 f$ y/ j) `% [- D alter table table1 add index ind_id (id);
# i# T9 p9 }6 q L create index ind_id on table1 (id);9 \( C- G" {$ A$ P8 \9 I) f6 r. `
create unique index ind_id on table1 (id);//建立唯一性索引2 N+ [) l) W) A* O2 c! q
9 ~2 \& H& I: G* K7 t5 W. H' [4 F- v 10、删除索引
* L7 b. P! I" N+ B) E) P drop index idx_id on table1;8 F9 [) L" s# h! k( s
alter table table1 drop index ind_id;
7 p% t" X; I9 h
/ w# P$ E+ C" v 11、联合字符或者多个列(将列id与":"和列name和"="连接); `" b, k. ?+ g, D1 J' q# c
select concat(id,':',name,'=') from students;
0 n! s- N0 s3 n: S+ a7 e" y7 l
$ f- d5 e6 B( k; E# `( ~ 12、limit(选出10到20条)<第一个记录集的编号是0>
3 I; K* a; P- Q! O" o select * from students order by id limit 9,10;$ F. q! @+ g; k# I! v! J
1 j5 e+ l6 o6 ]% d8 {5 s 13、MySQL不支持的功能0 U2 Z6 f0 B5 J3 o& s: |$ g; t- }- c8 Z
事务,视图,外键和引用完整性,存储过程和触发器# M! C, N1 I `) |+ S7 j) V
4 d8 a3 {* G. z& c2 [, A$ C6 {
, u- b, E" b% e) Z 14、MySQL会使用索引的操作符号# E/ P8 R1 l( S6 t1 ]4 g- O
<,<=,>=,>,=,between,in,不带%或者_开头的like
! X, {) Q) m8 A- l 7 Q# Y7 x; h2 L$ C) f( A
15、使用索引的缺点' H. F) D4 L& Q$ `/ D( @
1)减慢增删改数据的速度;7 q% t! X' v( J W" R
2)占用磁盘空间;/ N9 L/ m- H" p% e+ A
3)增加查询优化器的负担;
( o, G" [1 x9 H9 k 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;2 ?2 z1 U$ W( k: y
. S: E5 z3 W6 H- c4 J. }9 L7 t
16、分析索引效率( |* ?1 s+ t' a" e& ?* ~
方法:在一般的SQL语句前加上explain;
- G6 V; h1 |/ J" G/ |( o 分析结果的含义:
) q6 z, |1 M0 q5 ^% `3 y 1)table:表名;
+ b) @2 L( S/ i' M. Q 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;' x! |# k N+ n0 a
3)possible_keys:查询可以利用的索引名;4 B6 e6 p' C& S( I2 S0 F
4)key:实际使用的索引;
) q3 z1 f- H2 W3 A' D8 K' O 5)key_len:索引中被使用部分的长度(字节);8 f# P3 f1 ~1 [0 H
6)ref:显示列名字或者"const"(不明白什么意思);
8 A. k# n7 p" s0 O6 A 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
- t# l( j3 |% z" Q$ k3 u8 ~0 b; L 8)extra:MySQL的建议;7 h* b4 g7 P1 e6 j0 R: h! p
! a. ?1 W9 F9 p/ b3 L( _4 E 17、使用较短的定长列
) J: q" S4 s3 K1 E# X 1)尽可能使用较短的数据类型;$ Y. E H! b. G r9 g$ G* d
2)尽可能使用定长数据类型;
: k# k: U* i7 l# D# m1 Q' [ a)用char代替varchar,固定长度的数据处理比变长的快些;/ }- ?* a- j* o! D4 d
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;/ s1 N" E1 o6 o" ^* n1 n5 N
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
' p" r+ C: W2 R4 a3 i d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
9 M% a+ g# s7 K
* x: x- A$ u! x' n3 g 18、使用not null和enum( O' s5 d+ c v1 ^. Z% y5 P2 c
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;4 V/ X- n" e" V @$ _( J: k
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;7 o) Z8 E* n- J! i/ W/ z8 v
! ~& _" D1 N" m5 C
19、使用optimize table
+ r v& ?$ N2 Q0 G 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
" D9 m1 N5 `* F# d" M 4 a, V8 t1 B( M9 O- W, J6 l
20、使用procedure analyse()
6 m) U, _: Q; v! i+ D) \: Z/ r 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
: a* N" l" F7 ^7 I' w select * from students procedure analyse();
" M% e: y2 o! }7 A! I) H' k select * from students procedure analyse(16,256);1 M v( D& X1 N5 z, L9 {% e
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
0 s% L' d5 D% L G8 V& m; N4 X- l
! {( n+ d1 ~* F" Y 21、使用查询缓存
7 T' p; W, s' H; u8 p( P H/ G1 w 1)查询缓存的工作方式:
: f5 K" U/ A( k& Q, p 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。# p2 V) u4 p( @3 r2 w2 {6 {6 T
2)配置缓存参数:" D" e# e3 c% N _
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。+ _/ b! a6 X T: X: m, n8 U( U
7 u% k6 M) ?. p" c/ O* |
22、调整硬件& a: a' n( Z8 [' t& c
1)在机器上装更多的内存;4 n1 M3 I# p7 ?' ]) T; H
2)增加更快的硬盘以减少I/O等待时间;8 M" j9 {: y9 c3 R- {; i* N) m* |
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;4 q. J5 {1 |) T6 s5 L8 J0 J2 C B
3)在不同的物理硬盘设备上重新分配磁盘活动;
5 N; f9 u4 ^ u5 C3 \. C! L5 @4 q 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。* Z" _2 I m+ q) \
|