启动:net start mySql;/ V4 A" ], q3 }# y
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
* ?1 O; I- Q' m9 L 列出数据库:show databases;& W) j% ?! \3 J# T$ a( r" b
选择数据库:use databaseName;5 K2 g: q% U: W' i% f& N
列出表格:show tables;
# Z+ X; w% w0 `7 O G9 w, h( N. N 显示表格列的属性:show columns from tableName;* o* R, \% g+ Q7 H8 h
建立数据库:source fileName.txt;% B2 S6 D; u& E. ~
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
7 m% u5 k: o T7 X B: Z8 ? 增加一个字段:alter table tabelName add column fieldName dateType;
' D/ _3 {9 `- { | 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
. M& D+ [! i3 f# c5 n2 x 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
' ]. r) o& j' M% X& W9 E 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";: K* u4 k. V( K4 A
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;( v) L2 g4 M3 V0 S* R$ r& f' G
查询时间:select now();
9 P- D# ~( T: J* b$ V& ]8 Q 查询当前用户:select user();
; S# [( ~2 P7 X8 o" A 查询数据库版本:select version();
2 F/ w, f/ q- s7 b; {% q 查询当前使用的数据库:select database();# X% F" k- L6 z3 ?7 p
& q$ |. K& \ _; s
1、删除student_course数据库中的students数据表:7 ~" J7 Z6 f5 y' |6 m
rm -f student_course/students.* X9 u0 E" @% p1 r
: i' d" L6 J8 r6 W/ d) |0 C& x0 e( F
2、备份数据库:(将数据库test备份)
+ v- c) ^# I& {; |$ n mysqldump -u root -p test>c:\test.txt
2 M+ l3 R% J: M8 K L7 w 备份表格:(备份test数据库下的mytable表格)
. V- b1 D1 N$ \! h* g) q9 c" {4 z mysqldump -u root -p test mytable>c:\test.txt: @" @2 ]9 _1 f# T, i1 N
将备份数据导入到数据库:(导回test数据库)% { T& l, V; Q! U2 i7 A, k& P E8 l
mysql -u root -p test<c:\test.txt5 H! s$ ]7 q: ^$ g$ Q& m
P& o+ A6 ` R- n$ U" i: U/ ` 3、创建临时表:(建立临时表zengchao)
7 O9 F& D( j+ r9 Y' y, ] create temporary table zengchao(name varchar(10));$ s/ K: N$ ~) c- a5 s" D2 ^
# _9 Y& X7 W/ R8 \( f6 Y& ^ 4、创建表是先判断表是否存在/ m: h+ h: c" U a( y0 c, D" l
create table if not exists students(……);! i9 c6 C7 e( I& G
4 D5 r( M/ b0 K9 W
5、从已经有的表中复制表的结构
' Q5 S; c2 L U" S$ e# @ create table table2 select * from table1 where 1<>1;
4 m6 z' ^* A# Y p/ H2 _ 7 L# U7 h) K7 c2 p* e
6、复制表
$ i$ i- d/ G9 x4 k4 A' @" n# J5 ~ create table table2 select * from table1;
: E, m3 |' _% _' R) Q - f8 v$ E( U+ ^# E/ o2 Y
7、对表重新命名
4 d: b9 `9 [0 g$ ? alter table table1 rename as table2;
. M' u2 l; Z% v$ \& m: i6 D
) S* R6 u7 t% \! u6 K 8、修改列的类型
3 @) x& H4 q3 C9 X alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
& [* G0 l4 [( P! V. ] alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
' K* Q U( | ^5 w. w! F
) }. u: U$ F$ M# T. p; _ 9、创建索引
7 w. E1 |% C+ C4 X/ L0 i. S alter table table1 add index ind_id (id);
; L* H- l/ d3 r create index ind_id on table1 (id);& P) Q. |, Q Z2 Y. C
create unique index ind_id on table1 (id);//建立唯一性索引
. J9 t# n3 a$ Y& N0 w p9 Q
+ P% A+ q5 ^. A 10、删除索引$ W* U% A% q+ @/ x: J( }# X
drop index idx_id on table1;. m0 a. h: C; f4 t
alter table table1 drop index ind_id;
8 c% W2 N% f* x8 b 8 v! h+ w4 Q# J7 E/ ~: w
11、联合字符或者多个列(将列id与":"和列name和"="连接)0 o3 B9 H! \* C
select concat(id,':',name,'=') from students;
/ A; M- S# w! _: J0 { 1 m; G) R5 ]: ^, }( k h2 o2 |
12、limit(选出10到20条)<第一个记录集的编号是0>
8 [; u) P5 N( U4 P: `3 K select * from students order by id limit 9,10;
- O3 K- a- F# Y/ N& t5 `) B1 @ 3 p9 d" `' t' u) u. `. q- @6 y w
13、MySQL不支持的功能# `' t9 R S" o1 x
事务,视图,外键和引用完整性,存储过程和触发器
* ]' T- H( g- s8 l; i1 s# f
; i h [0 m$ `0 c( g2 u
, f; M2 P, [. }$ K# G 14、MySQL会使用索引的操作符号, u( L5 v) v" D, @+ i
<,<=,>=,>,=,between,in,不带%或者_开头的like3 p2 ^# T9 n6 [6 _; _
& F5 G6 \) d7 M0 }7 t t
15、使用索引的缺点8 v. |5 P! a4 s9 |3 N9 L( ~) O* x
1)减慢增删改数据的速度;
/ A! J. H( X' d4 j9 ^ G" J9 g5 t 2)占用磁盘空间;
" C. W- r! Y* W5 O. w 3)增加查询优化器的负担;4 |- u$ O8 W6 {" b6 I2 i: \1 J3 W
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
* p3 f1 c$ S) W
$ q5 G: ^3 d4 D# B1 h# q 16、分析索引效率
$ v7 ^. y" l6 K2 E1 [% J 方法:在一般的SQL语句前加上explain;
2 v5 n& T3 b, E4 W" V 分析结果的含义:( O& X$ \0 d1 A# j) k9 f
1)table:表名;
+ v# D) \2 Y" A/ }2 {) m/ \ 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
( T9 h- g& ^( ^, j$ P 3)possible_keys:查询可以利用的索引名;+ Z/ |. s* f% I9 e M1 [2 c
4)key:实际使用的索引;8 ~, r B1 ]+ }* { q+ B" {
5)key_len:索引中被使用部分的长度(字节);% ~5 Z N: e' U
6)ref:显示列名字或者"const"(不明白什么意思);
( ]" F {3 }, i2 J8 b7 U 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;+ V2 g; f; o% x) f# ^
8)extra:MySQL的建议;/ Q4 t' T9 l" N+ f
7 C1 Z0 _. O* _ 17、使用较短的定长列% @0 b% j$ Z* ]0 v
1)尽可能使用较短的数据类型;; U9 _* K9 m0 R
2)尽可能使用定长数据类型;
6 C D/ h3 ^- h/ |/ \5 u, }& B a)用char代替varchar,固定长度的数据处理比变长的快些;
, E' b8 \8 r: O# |0 E9 v% r9 S b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;# g7 k0 u1 [* q- g$ J) P7 K$ R
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;: n4 x9 `( }- q
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 x) E3 G4 y! s8 k
0 J) \+ U6 t) d4 v" I 18、使用not null和enum( Q n. }1 L; q& n* Z$ m; z) o6 r
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
3 F! D+ j3 ~' ~/ s- o 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;* W# x, H/ W! c) v! i8 D
: T: ^* s! B& b0 m
19、使用optimize table
- b, W: E9 T" q2 i. } 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
: n: v0 {+ O5 p2 u
4 c, X8 y: Y' d% o$ { 20、使用procedure analyse()7 g# B8 |$ D# {" S3 c. ^) k: y
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
1 J- ~6 H- x H8 M/ n select * from students procedure analyse();
7 _- k2 \) O+ K/ c# d2 a1 K0 c select * from students procedure analyse(16,256);
- B2 A4 o& `) ]. o 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
& i5 Q9 D, ^$ g1 |$ h
; Z' k7 ?1 I) R. u c 21、使用查询缓存 ^3 F7 k1 T, [$ G H
1)查询缓存的工作方式:
& z# P( c% m" L! w3 ?5 e 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
& N& l* }* t7 W' y; ] 2)配置缓存参数:4 M. a; I, {: w/ [* F, w
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
8 p% P G; J3 E% K
6 v( A5 ]1 c4 p" A 22、调整硬件
+ j' }: u) u/ {# i! S% D 1)在机器上装更多的内存;
4 ~& I* o( Z# v6 v! y% H& H5 o 2)增加更快的硬盘以减少I/O等待时间;" {' x' Y4 m2 a; }
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
( Y; u8 ~% C: t( J- r! M2 Q 3)在不同的物理硬盘设备上重新分配磁盘活动;8 |8 p* P6 ]9 T* Q; M$ ~: X- v; S
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。" S. y( ~: u5 @1 i: O
|