启动:net start mySql;
. T, `' J& Y; a 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
% o. U- w3 b/ L0 g; ? 列出数据库:show databases;* r& s' \- W3 {. }: R
选择数据库:use databaseName;
8 G7 T# [( `& R 列出表格:show tables;' g' b a8 h( K5 k
显示表格列的属性:show columns from tableName;
n) k3 B, N, T+ K" O 建立数据库:source fileName.txt;7 @ Y! `( w. J1 Q4 H" ]# i2 u2 m, [
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;3 ^+ A' |/ H- M7 _3 ]) e! f
增加一个字段:alter table tabelName add column fieldName dateType;: c# S Y3 A8 @9 ?
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
3 n2 m( N0 F# ?( [- P4 n) v 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;7 [+ a! i# v# }- i2 J' U
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";3 ?9 B+ n2 {+ V# J
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
, ?0 b' A9 f5 Q' _ 查询时间:select now();
) L) O5 l1 C8 d: w$ H* c 查询当前用户:select user();
* u/ b$ D( h& B" f2 _ 查询数据库版本:select version();
; f# ?( J( ~; f, Y4 ? 查询当前使用的数据库:select database();
2 I1 ]* d" X5 B/ K
5 v& I1 t' y# ]7 P" O- @ 1、删除student_course数据库中的students数据表:" |% w; J* { d; _8 U* A! ~
rm -f student_course/students.*: U9 z3 u! K/ C) F
7 [; m9 E" H( k( W 2、备份数据库:(将数据库test备份)
$ l, a& @$ U! m! H7 v' n mysqldump -u root -p test>c:\test.txt `5 X4 n* {5 P+ u7 m9 l( n
备份表格:(备份test数据库下的mytable表格)
: m* W/ i* K. Q mysqldump -u root -p test mytable>c:\test.txt$ N& P1 T0 Y: V; d0 o
将备份数据导入到数据库:(导回test数据库)* D' d' z) H- @. Z/ P+ w
mysql -u root -p test<c:\test.txt
* v: R9 c1 {/ @& g- D7 X( h0 V, r 0 D; E! N7 W5 R1 I
3、创建临时表:(建立临时表zengchao)
4 w/ E/ ?% w F% U create temporary table zengchao(name varchar(10));+ K1 c1 p e, Y
0 K; \1 E" {) y
4、创建表是先判断表是否存在
) n+ T9 O g! o0 }/ O create table if not exists students(……);2 W4 G; X t9 y+ W8 A. F" D
& }' P, y S7 n9 B$ _4 e3 c 5、从已经有的表中复制表的结构
# e* G% Q0 U! e# E2 f4 j" Q' j3 g, _ create table table2 select * from table1 where 1<>1;
# _' b0 N; B- S7 `* A; W
- S, G+ V& T7 h9 k& q1 @- D 6、复制表
6 a+ e( O( W( W4 m5 c create table table2 select * from table1;3 }+ T( x6 b$ P C# y x1 ?
1 U+ Q+ ?2 X+ j* M! H' s3 h, b
7、对表重新命名# T& o& n+ ~5 @# l8 _+ m( D
alter table table1 rename as table2;4 {( q, | K- K: M: p) a$ E
x) A0 N. L9 d: e* m6 C 8、修改列的类型
# U' q/ N5 L' V( l+ @$ l( l+ a alter table table1 modify id int unsigned;//修改列id的类型为int unsigned2 a8 e8 ~. }( }( V9 s6 n" C+ x
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned; r- P T1 e x# u
& W" {# e) }5 {2 ^' o 9、创建索引" t+ f/ M5 i" I+ W
alter table table1 add index ind_id (id);
5 r6 u# Y) ~3 y; o1 o9 H g; y. H create index ind_id on table1 (id);+ `' L) n+ w" @/ j' Z/ R! d
create unique index ind_id on table1 (id);//建立唯一性索引
8 G5 R3 p) y1 n1 q. B7 ^9 m
! H- g% A) N1 c8 Z, p) C( k1 | 10、删除索引
, D: Y+ V- v6 T$ H8 O. N* f0 i, O drop index idx_id on table1;
) @& n4 ~$ t5 D* b3 V alter table table1 drop index ind_id;
4 f* T# z' W0 @) { 1 G1 ?. i& n4 n7 U3 n' U+ f
11、联合字符或者多个列(将列id与":"和列name和"="连接)) s; N1 a; t$ Y- z
select concat(id,':',name,'=') from students;' H9 F ~# O5 F1 B. c4 s: V& O
$ M) H8 u' s: U- g
12、limit(选出10到20条)<第一个记录集的编号是0>0 _6 I" M* r; ~) c9 ~7 A* l
select * from students order by id limit 9,10;; V2 w0 P' P7 g6 v( S3 b
2 a; H$ b6 @- F- U- K
13、MySQL不支持的功能
5 k/ q2 f1 |: }6 ]& t' L. F3 k 事务,视图,外键和引用完整性,存储过程和触发器
' s7 [3 ]( g/ A2 p4 ` 3 B. C9 _" ^0 c
9 {! e; k& {: _; g9 t 14、MySQL会使用索引的操作符号
. j$ L3 f% d$ j' O <,<=,>=,>,=,between,in,不带%或者_开头的like
5 F7 q, I3 e$ W( B/ i* S) E" [! c / k1 y& s) I% q7 M+ |& `3 m0 @
15、使用索引的缺点
2 K- ?) E1 e# Z( r' a 1)减慢增删改数据的速度;3 M" f1 R- ], d; J9 j. ?) \
2)占用磁盘空间;
$ {. B6 N2 e/ z+ a 3)增加查询优化器的负担;9 q- x: N; C* h! j) N
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;; q0 H5 a$ n i8 y2 h9 r! D7 N
. \# c# z; L5 R3 U" L/ @4 h' v0 ]/ r
16、分析索引效率
0 |+ I" s: b5 v6 l$ _; H 方法:在一般的SQL语句前加上explain;6 C9 Q- E' E Z6 H
分析结果的含义:
4 p* H3 O L; l' i2 H! P 1)table:表名;1 a+ R$ Z* E3 Q8 R( C3 }4 k
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;$ {: z' g5 Z; t) F
3)possible_keys:查询可以利用的索引名;
/ u" J$ C: x! F+ i' l) @6 `2 _ 4)key:实际使用的索引;
7 ]: q' e& u) n9 \6 A 5)key_len:索引中被使用部分的长度(字节);
9 K' }' t2 r* h! Z w0 d: \ 6)ref:显示列名字或者"const"(不明白什么意思);) }# Y& |+ v$ C" n; I8 F- w; A; q
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
/ q. B, c: A5 a 8)extra:MySQL的建议;1 n( q( @' T7 r% G: J" @. r' H. l
4 S& x! y' R8 v0 T
17、使用较短的定长列
7 M7 D/ |, u+ v( h 1)尽可能使用较短的数据类型;1 i1 ~! v5 O- M/ P
2)尽可能使用定长数据类型;
9 r) w# N$ F+ r- ^ a)用char代替varchar,固定长度的数据处理比变长的快些;8 n: H" x# f& X: M+ x& ^' I
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
. \, [' t: s/ C3 E# _! n0 ^# C: d c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
" S0 m) }$ }! r d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;7 O E9 M& I9 ?* G/ ^; [3 P: j
& L/ `# B+ C# e& V5 v' U 18、使用not null和enum
6 m3 n: B) @% F" Z8 q 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;4 }2 c V5 B" Y C& N4 Y4 x/ e
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
+ v* I( I4 d* Y* F # i3 l& U8 E5 g- z* _
19、使用optimize table
1 y% `' V2 `, W3 o1 U1 z. a2 c 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
0 p3 B% C8 ?9 \. _ ; r+ B5 `1 w8 U
20、使用procedure analyse()1 L3 w2 v B' n$ {$ r( G" ?4 y
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
& t6 G6 }+ [/ i4 t% ] select * from students procedure analyse();! ?6 X) Z7 q/ B0 P
select * from students procedure analyse(16,256);1 U5 O6 i8 i& m5 g
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;' w) o; U5 J. C1 C
! `7 U; @- s f& Y
21、使用查询缓存, ]& j" u* E: [
1)查询缓存的工作方式:
$ f0 A+ k" h& Q1 {1 s& l- [/ b 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。5 m3 i+ _0 n( i4 [1 j4 k
2)配置缓存参数:
0 ?+ I# |: _! w 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
' L6 a/ J6 i8 A+ b# x ! P: R. x5 z9 |/ i; t
22、调整硬件$ O+ m( }! b( A$ Y6 j7 [" t
1)在机器上装更多的内存;- _3 K' t" d: ~: A1 s- F
2)增加更快的硬盘以减少I/O等待时间;
1 ]; ]. J/ d3 f% \' x' @& d 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
/ j- J& v9 h1 A% y0 o 3)在不同的物理硬盘设备上重新分配磁盘活动;
4 R- ?+ ?% e3 B8 w2 L* m7 p 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。! u: P$ `; J, O7 F" e. [9 t. p8 Z
|