启动:net start mySql;
) L, z& i7 h9 I- t 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;$ J. j* t }7 P) S0 ]7 N/ r
列出数据库:show databases;
3 u o; c' {8 d/ w# d# E 选择数据库:use databaseName;
( \$ i1 y; I( J! |. R 列出表格:show tables;
- M" `/ y6 D7 t8 [. ^/ v4 o 显示表格列的属性:show columns from tableName;
3 ^: V$ A% B7 ?' v7 Y0 u 建立数据库:source fileName.txt;
$ v' `, T1 O( w b0 H& c# t+ C 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;/ A/ A1 H8 `( J$ b( H8 ?) Y
增加一个字段:alter table tabelName add column fieldName dateType;% \7 ~$ ?" @# Z5 x: r
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
. C; p! @) p3 t4 |, m8 i 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
3 s! P& y, p. y 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";( A8 M$ b, L, a4 A) k, `
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;4 ~. ?. X+ Q2 {0 z! z6 a) x! G
查询时间:select now();
( g' V; X: C K 查询当前用户:select user();6 V; j+ s, Z- c5 q \: [4 O
查询数据库版本:select version(); j) g9 i( }9 w6 m! C/ D" U9 y
查询当前使用的数据库:select database();
# r4 J1 G; i6 q. G. c 2 t' u4 v: r h: D# X8 |% M+ i
1、删除student_course数据库中的students数据表:: U1 [ g% w) Q, h9 o& } c
rm -f student_course/students.*
8 M- F/ @4 U4 }! x2 h1 l8 A. D( p : T: Q, Z6 W: o7 O
2、备份数据库:(将数据库test备份)
) ^ S! m3 {! f' {9 n# S J mysqldump -u root -p test>c:\test.txt( y5 {' ?$ v' Q7 L0 z
备份表格:(备份test数据库下的mytable表格)3 ]( u9 b( m" I, m
mysqldump -u root -p test mytable>c:\test.txt6 a/ v, q7 g' Y' x" |6 S% t
将备份数据导入到数据库:(导回test数据库)% v* P W6 W2 w y$ S. I5 {0 C
mysql -u root -p test<c:\test.txt! U- k) L' C& C8 c; K
4 _; b" Z" c+ D% Z; w 3、创建临时表:(建立临时表zengchao)
7 t! |* Z/ ?8 [9 T. \) F create temporary table zengchao(name varchar(10));
" }4 L7 c5 O% D1 E1 A4 ^3 r
) Z& A& J1 T! q" J* @' E 4、创建表是先判断表是否存在7 ?! ]3 j' L* {2 [& r; s$ N/ x
create table if not exists students(……);% J- I K0 F+ W8 Q+ P* X6 [$ T
) Q1 g! D- E8 m) w9 k( S 5、从已经有的表中复制表的结构$ ~- o7 \- k9 n/ U* a' K$ G( ^$ A' l
create table table2 select * from table1 where 1<>1;
& |" h1 b2 @/ V$ U* Z: d & k( O( p- P$ S8 y& @! a
6、复制表
" G" {) t" Q& K4 a# o create table table2 select * from table1;3 e9 U: [, F- k' U0 m
( r! j S) s$ l$ U8 c4 {) s- B8 M
7、对表重新命名, o3 Q, D5 G: H6 z; J# k
alter table table1 rename as table2;" p6 S( r8 e2 h' k
1 q9 U$ @8 X. w
8、修改列的类型
# ^, {" y" `% R" q$ D& u0 S alter table table1 modify id int unsigned;//修改列id的类型为int unsigned# C# V A) f$ } p* R
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned/ r. h d3 k! ~4 ?2 M
+ O% s4 M5 \9 {8 l5 H 9、创建索引
) u: _6 E, c7 A+ W6 [. Z alter table table1 add index ind_id (id);
. h" o. `* O# Q4 u create index ind_id on table1 (id);" z# P1 D2 S0 @2 i; z, a+ S, k
create unique index ind_id on table1 (id);//建立唯一性索引1 z7 z0 H! e( |$ a4 t9 ]: h9 Q
7 Z# C0 ~! v3 T/ d* N- [
10、删除索引
5 D* J7 q* [3 G8 j, ?0 [; F& P drop index idx_id on table1;. z/ A- E4 m' ?8 r
alter table table1 drop index ind_id;8 U6 n( j8 S6 A& d, |( A8 Q
7 a. Z e' n7 w% d6 C, _ 11、联合字符或者多个列(将列id与":"和列name和"="连接), G: _" C/ i6 ]
select concat(id,':',name,'=') from students;+ o. P: p& `& q4 w+ k$ h0 r6 o$ F
8 L4 G# e% x' s l9 O% G' Y 12、limit(选出10到20条)<第一个记录集的编号是0>
* x' b/ d' w5 H7 ?* t- ~; j D4 u# r% s select * from students order by id limit 9,10;) [7 c. C# N# f
5 [9 F# z) }1 e/ ^! X7 D% ~
13、MySQL不支持的功能7 c5 |; A J" @) G
事务,视图,外键和引用完整性,存储过程和触发器
9 N7 @/ P4 d6 w& h! q $ M! U- j N. F; k1 e
5 h3 Q' ~/ j* g9 N3 w4 i7 u$ L$ U
14、MySQL会使用索引的操作符号
/ i( S3 M: w8 u: u/ K <,<=,>=,>,=,between,in,不带%或者_开头的like
' Z- L$ h7 q$ D e, V m7 w3 V% M0 {
0 ]( p I) V* g8 C, k 15、使用索引的缺点
3 z! P1 j9 }( r" q 1)减慢增删改数据的速度;' j. K# V; k" w& x! F9 k0 U
2)占用磁盘空间;
5 {, U$ \, _0 q2 j 3)增加查询优化器的负担;
. m- }4 r7 {) Z/ _ 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;8 ]" W: K+ K5 j; E& B
. F& ^8 p+ _3 x4 w# P @, R9 X 16、分析索引效率
1 r0 x2 n t8 N" G 方法:在一般的SQL语句前加上explain;3 }5 N9 q" B2 n( V
分析结果的含义:2 I! U' R& r# N3 f
1)table:表名;5 h8 F/ U" w+ j; ^" e' }/ c
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;+ V) i( j$ W- _$ r& u0 n
3)possible_keys:查询可以利用的索引名;3 N& K: B# P9 q$ r! |
4)key:实际使用的索引;) g1 _, c5 a9 W' [( G
5)key_len:索引中被使用部分的长度(字节);
* U+ k1 j; \6 s* U) {, o. O! R4 T 6)ref:显示列名字或者"const"(不明白什么意思);
' }7 g9 X' b" I' y0 I$ ]. y m# T 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
. Y9 t) P8 F2 O: z7 b 8)extra:MySQL的建议;
5 g9 b! U$ q2 l+ L4 f- W- z , k/ q/ \& G9 \4 ~
17、使用较短的定长列& l: G* R" `. n# Z
1)尽可能使用较短的数据类型;' M: G6 H; c) R) N4 g5 S1 P, {6 B
2)尽可能使用定长数据类型;
7 C- T) I' _# d# s& h a)用char代替varchar,固定长度的数据处理比变长的快些;
6 c6 i' L) Z3 S* | b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;8 ^4 h' {+ D- O9 _$ N5 {/ T9 k3 i
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
7 P, I' }$ c* n: s d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;& m- [. s+ Z8 s( L
9 l" ^$ K( k3 U4 v; L 18、使用not null和enum
3 D$ U* K5 u: G- g9 } 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
* y9 |- y9 A" v C) @$ t 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;& @* C( D; y$ k/ m
! r! f) R5 J, f 19、使用optimize table
+ C! g& o; @4 X1 s 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;) J: o/ p* ], P$ B: K+ Y# \, Q
- z( K' | @+ x. l) ~1 @ 20、使用procedure analyse()
* X% w& V4 N8 [4 u% q7 g 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
7 x0 I1 L3 v: }/ Z select * from students procedure analyse();
$ r1 D: L$ R0 _* h0 e% X select * from students procedure analyse(16,256);
% ?% g" r% h( I; J 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;5 K- [' {& v+ h+ S" d0 Q* D
7 ?; W4 `8 V/ n2 H- t: n8 {
21、使用查询缓存: z( O2 Y7 J; P
1)查询缓存的工作方式:3 H) d# j6 H, E& n
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
+ I: L) ]/ M# G0 h 2)配置缓存参数:
3 r: [5 q+ L; J* \) H& H 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
- B2 q7 j$ m( V
. h0 M& D0 E+ o5 @( Y 22、调整硬件
) K4 g. }0 `. w* ?" |, f6 r( D% O 1)在机器上装更多的内存;( }3 R3 b" e+ f2 s
2)增加更快的硬盘以减少I/O等待时间;
" B" v- b# o" O& }! s 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
; b0 \5 ]) y f6 _& A9 y 3)在不同的物理硬盘设备上重新分配磁盘活动;
7 \3 f# }* w j8 y* [ 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。2 t- N' T9 y, Y3 g7 e+ j( F Q) g- Q
|