启动:net start mySql;$ D: @- m3 Y8 R; m9 v2 o+ n2 a
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;, U0 m: t" H+ A
列出数据库:show databases;
& a$ v9 i# p3 L0 h+ i/ q 选择数据库:use databaseName;4 F- n, k( l& d. v
列出表格:show tables;
8 t1 c; k3 t, I 显示表格列的属性:show columns from tableName;2 v5 K& |" R- P* P( P
建立数据库:source fileName.txt;
) k" F7 t2 V+ ~4 J2 l6 C: v9 m- y 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;9 Y( S. r0 {$ B: F0 o, o7 L
增加一个字段:alter table tabelName add column fieldName dateType;
8 U' h; G: I) t( d 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;3 S4 l2 Q5 U4 `8 @" A, w+ }$ d
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
* B- r( \8 |7 y9 T 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
5 J. q/ Q. M- E8 A+ Y- a 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;' E, W9 H f& [* X3 ~: E: [/ N
查询时间:select now();
% P+ p' v# z' j, E: { 查询当前用户:select user();
; c, Z" @7 J7 @& ?8 ~* w3 } 查询数据库版本:select version();8 I+ @+ a8 Y8 q2 N- {6 `8 `9 i
查询当前使用的数据库:select database();
7 f8 c8 u+ O' a& H3 r7 K, b $ [1 J: Z, Y8 o' t3 Y
1、删除student_course数据库中的students数据表:5 @2 q( f, Y: T
rm -f student_course/students.*
! P5 w3 S! T9 ]3 i! o3 c3 Z
2 C4 T% e! D, {: l& ` 2、备份数据库:(将数据库test备份)
; y& D2 A T* M' D1 S7 C& E; E5 u mysqldump -u root -p test>c:\test.txt
# ^5 e# h" Z: j1 S8 Q 备份表格:(备份test数据库下的mytable表格)
/ Y3 M! d1 h$ T; G& r mysqldump -u root -p test mytable>c:\test.txt
X5 C9 @6 x; f( V, A9 U, L6 n1 U' S 将备份数据导入到数据库:(导回test数据库)
* ~. `) g) m* Y% R3 E9 R( m$ D2 h mysql -u root -p test<c:\test.txt8 I- d( b9 e G7 d S* \
- \( y$ n# F5 [# f' K( C/ h& [+ y
3、创建临时表:(建立临时表zengchao)
% j$ J* \5 O% A8 K create temporary table zengchao(name varchar(10));
' N4 {8 s9 M3 {1 j0 t: O: _- s& S ' T# Q8 x. e1 e) b, x( ?
4、创建表是先判断表是否存在
7 g" F, u7 B8 u create table if not exists students(……);# b6 Q B, R) X! F& S6 S& }/ a5 _
+ _8 ^) c/ w& _9 x( L' ^+ H' h
5、从已经有的表中复制表的结构. b& j; }, J1 D8 w' E( ?
create table table2 select * from table1 where 1<>1;5 a2 j! d/ i" p* v+ b6 p
' T: R; ?* h7 t2 S$ Q 6、复制表$ C9 B; e9 H# L& ?" n$ ~9 Y2 n5 y
create table table2 select * from table1;" L1 V2 O$ o: W8 b2 m) h* C. u) O
0 h0 E0 N" G% P+ j! H7 {- Y
7、对表重新命名8 Y) ]' ~* i! O$ T2 E# y. i, ]) y+ e
alter table table1 rename as table2;
" d& w" E5 D! v+ T) m
3 M( |; u, U' N/ V% c$ f 8、修改列的类型7 P) k, {+ n! W1 |( t, S
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned) E! ?8 T% Z b5 y
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
' U9 q" h8 t ]& K" e; [! `. v# E
8 `) n8 j- Q# z8 X! Y) G$ n 9、创建索引
" A1 s+ o1 \- _; b( w alter table table1 add index ind_id (id);; y# s- y+ _, v6 |/ G, ]
create index ind_id on table1 (id);; I, ]/ e7 [7 t* ^' K% l: @
create unique index ind_id on table1 (id);//建立唯一性索引
) Z+ ]2 K1 Y' M# ^0 \& k
5 r% v) m# B8 k/ }/ S 10、删除索引
1 c- z$ ?/ P) s: R' [ drop index idx_id on table1;
. r9 R1 M9 q, f- M; W" x, Q alter table table1 drop index ind_id;" R/ ~- ?/ o$ G( O
6 l! u$ G$ ]9 J 11、联合字符或者多个列(将列id与":"和列name和"="连接)% Q2 x+ v2 f2 R( b& L2 r
select concat(id,':',name,'=') from students;2 s1 I' F; O: P# x+ R
/ S. B7 `2 ?! r M6 f
12、limit(选出10到20条)<第一个记录集的编号是0>. C+ L8 d4 a+ ~4 B. e$ [0 N
select * from students order by id limit 9,10;0 F# I% l7 E) z( [/ M. f
+ D4 I- u4 n8 l. a p' {2 z# u
13、MySQL不支持的功能5 B2 J: s1 D2 q2 E5 P; V
事务,视图,外键和引用完整性,存储过程和触发器% @7 s2 `# ~! Y: g7 ]
( {6 a/ q2 ~* _1 }- g( ] 2 M# i& E4 x' W+ Y; z! A" Y
14、MySQL会使用索引的操作符号
; e5 r- C9 H, N, C1 v" v2 R% u <,<=,>=,>,=,between,in,不带%或者_开头的like( }6 R# R2 v; p8 l5 G' @" k0 f
/ W9 C, t; w. J3 a9 P/ _/ f5 s
15、使用索引的缺点# U) U& H- A# Z. f9 s
1)减慢增删改数据的速度;8 j: ]# |3 D( {9 _
2)占用磁盘空间;3 p5 |3 d7 s5 @3 }' _& ]5 U: p
3)增加查询优化器的负担;# P- m0 V& }3 q! M8 t
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;- a$ `8 m+ } m9 d( T* S( _! X
( w4 l5 ^ T3 j( M0 p$ J3 B
16、分析索引效率
* U T" s }# k0 x3 E8 i' X1 j 方法:在一般的SQL语句前加上explain;
/ ], @' i% M7 I, }* S 分析结果的含义:$ m3 m$ N2 l' w8 f2 f
1)table:表名;
/ M5 c2 k% e; n% f; T 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;3 G+ p8 ~$ E* r
3)possible_keys:查询可以利用的索引名;' c( L, h; p5 S/ {! F, {
4)key:实际使用的索引;
$ U: Z0 Z2 l3 a) } 5)key_len:索引中被使用部分的长度(字节);0 e7 R% I8 u6 M- L( C
6)ref:显示列名字或者"const"(不明白什么意思);
" u/ P2 h6 E1 y0 |4 T: ?- S 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;/ ~+ Z, l6 x% k3 F! [. q) B5 I. U6 M
8)extra:MySQL的建议;
3 A: r9 Y% k2 E3 U2 { 9 Z3 [' L1 l1 y# v i# @. s+ ]
17、使用较短的定长列
- `0 I! ~ v5 L% j1 m 1)尽可能使用较短的数据类型;
/ F4 z/ F* i$ `1 N3 L 2)尽可能使用定长数据类型;
/ H9 V j! p& {0 \4 e3 z& E& s a)用char代替varchar,固定长度的数据处理比变长的快些;+ t9 l; B: t' i* P5 X4 ]
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
: B! k9 ^6 N7 |( `$ l+ Q- d c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
" }* t4 [* G7 q2 ]: P; e( G d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
/ s' [3 k2 t2 |4 \0 M9 H 8 K2 _8 x1 r X8 L+ ~
18、使用not null和enum% \6 }& M9 F9 \
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;2 ~3 c! |$ f+ J) y4 V- _
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;% j" V) D. ^- F
8 N6 Y' C% A! R- A& W 19、使用optimize table" i" O9 l5 J5 l U% q f' \% v! l
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;6 E+ N6 Y# ]6 X8 R0 l
0 t# M) h- t- [
20、使用procedure analyse()
( G- m0 ?! G5 W8 F5 e. m 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
% ~0 P5 p% f6 w3 Q4 c5 Z. \ select * from students procedure analyse();6 t1 q& b9 ~/ z# p1 @# f
select * from students procedure analyse(16,256);9 f6 Z7 C( t [
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( Q( m1 Z% y5 R; T
+ [2 }. F2 z( d$ h5 ]
21、使用查询缓存( V, Q, V) m% ^0 S
1)查询缓存的工作方式:, \4 I+ _0 X V7 t; y! M
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。* j7 [6 ~' g i r' P- }6 q
2)配置缓存参数:
6 f$ P5 _8 y# m* H3 K) j* { 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。% w6 s( _; j4 Q! \! E
7 H2 r4 p6 K* C J+ k8 A9 j 22、调整硬件
. F5 a" e O. i 1)在机器上装更多的内存;1 p) v# y6 S! E
2)增加更快的硬盘以减少I/O等待时间;7 k# a j6 u2 Z2 j
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;' K0 v' C) @; s T
3)在不同的物理硬盘设备上重新分配磁盘活动;
$ V4 W8 l+ G' {% y% x/ k( _+ n 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。, H) y4 F! ]! Q: w# z4 V$ y9 l" C$ ?
|