启动:net start mySql;
/ y& V' M0 D3 c9 F X, B 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
% S* C3 G) ?# @0 d: T# b0 x$ |3 T 列出数据库:show databases;+ G4 W' d; ]6 v+ Z5 E1 Y
选择数据库:use databaseName;) f; _1 `& U) E- g/ b* r
列出表格:show tables;
* m% E# T$ j4 M6 Z 显示表格列的属性:show columns from tableName;
4 ^8 _' x/ f! j 建立数据库:source fileName.txt;
. Z6 ~( n4 n' m) E* K1 K9 G- X 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;/ T/ t+ \$ l; ~) C5 [' t
增加一个字段:alter table tabelName add column fieldName dateType;! f8 Y3 g% w4 {& `
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
, m. [. A) H. h 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;' @, N- d- N4 `
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";' Z/ A5 t2 m# p; W- Y
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
0 B: I3 w m) i: c4 d( Z. `) y+ p 查询时间:select now();
; F7 {' k+ s) H- Y- f 查询当前用户:select user();
) c& B. v5 k# q# S) Z5 M' t5 W 查询数据库版本:select version();
5 r- R) `! [- M8 M6 W, i+ h- y b 查询当前使用的数据库:select database();# T% N1 F, p% H+ h
& h8 v. f1 \5 ?- h5 u9 m
1、删除student_course数据库中的students数据表:0 }: V( m+ Q/ n p- R7 \
rm -f student_course/students.*0 _* e ]; k/ k( y
- R, N4 A6 a9 o: m& X2 x$ ~0 Q- N
2、备份数据库:(将数据库test备份); N# e- H! N& s2 W! z* B7 q& ?
mysqldump -u root -p test>c:\test.txt
# h) |' }% i8 g, A: n- r 备份表格:(备份test数据库下的mytable表格)
3 {* q7 X" U2 {9 @ mysqldump -u root -p test mytable>c:\test.txt
3 `4 r& E8 h: w6 z9 {; o 将备份数据导入到数据库:(导回test数据库)
5 k3 x- r8 S! E; f mysql -u root -p test<c:\test.txt# s* w5 f0 R- T$ I5 }3 x9 l3 |
! C1 Z! G9 D+ q! {, o7 a
3、创建临时表:(建立临时表zengchao)
! ?) @; m2 W/ A0 o create temporary table zengchao(name varchar(10));
+ s# i6 `' c, _$ U- K% Z6 {7 P - k3 [% @+ i; C+ U# ^
4、创建表是先判断表是否存在$ W+ `% m6 o0 u
create table if not exists students(……);
9 X6 y) q9 G; ?6 J m
0 k! H7 W8 }# l 5、从已经有的表中复制表的结构* I3 r& }( | @) L: v" C
create table table2 select * from table1 where 1<>1;1 q( c& ^0 c5 s' Z8 C
7 S9 f7 o# \( J/ R4 w 6、复制表3 d/ {0 B2 b7 X a$ p4 P
create table table2 select * from table1;
, O) }, x9 @6 }. E _
& l. X9 e5 L- `& ~8 \& F! e 7、对表重新命名
& @$ N* G- |' J/ u5 s alter table table1 rename as table2;% e; s# c3 M( P. r. M& Q4 A4 F& V
! b3 t- S, ], E% ~
8、修改列的类型% U3 g& @3 A$ K, b
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
/ V0 P: b8 k$ b7 f' ~/ e alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned! n- v* f0 h# T" V
5 n2 Q1 E6 ]6 P
9、创建索引
6 ]& F0 n+ ]( X9 y* i- i alter table table1 add index ind_id (id);6 U/ p! L" P, |1 `$ a
create index ind_id on table1 (id);
9 R3 i5 H1 A" `# Q. D create unique index ind_id on table1 (id);//建立唯一性索引
+ k. ]& p) B N- w- L/ J8 R* u + i4 Q- |* H0 m( v7 u, [9 {
10、删除索引+ B3 |) W1 a, W8 i$ Z. p: @; ]1 r
drop index idx_id on table1;$ G- a2 Z5 W0 x" x
alter table table1 drop index ind_id;
) K9 K; k! D: ?: j' s: G- H* D; l + J& ~# _ T# x9 ~- y" g5 d
11、联合字符或者多个列(将列id与":"和列name和"="连接)4 }- d% R3 b8 V7 Z* k
select concat(id,':',name,'=') from students;
/ Q" H/ a' N# Q9 w4 W# v
; @' D9 B6 g" C, C8 c) } 12、limit(选出10到20条)<第一个记录集的编号是0>
1 i8 o& V1 f: {& ^2 r) R select * from students order by id limit 9,10;5 [8 X+ Q/ ?" T
, {- f0 {3 g4 `+ _' T+ l% V' w
13、MySQL不支持的功能
$ e/ h5 v' _1 C- o r- F 事务,视图,外键和引用完整性,存储过程和触发器# m T" {/ X( r! | j4 f# _
; t8 O z6 Q* J% X" K1 U. m 5 h/ w, {1 g2 l w
14、MySQL会使用索引的操作符号' ^. d8 f; z7 ~( s, s# A" u9 v
<,<=,>=,>,=,between,in,不带%或者_开头的like
" |8 R$ s- u: r5 @; q0 A' \ 6 E' Z; O1 \, Y8 ^! J! O
15、使用索引的缺点. y8 b$ n2 {1 c7 `* D% c
1)减慢增删改数据的速度;
/ x% g( H6 i$ K* t1 [6 R8 V 2)占用磁盘空间;
1 D; D! A q$ w$ m7 ] 3)增加查询优化器的负担;! x5 z- `1 ]6 Q5 r/ k0 S
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;6 y6 H1 H# P- R5 l6 C" i" l G- Y
# z, p. }3 p9 c. t/ Y% _, |6 I 16、分析索引效率; c- s* G) q y8 C7 N+ G e, y
方法:在一般的SQL语句前加上explain;2 D p6 u/ g: y7 h5 T
分析结果的含义:! x8 x k; d7 \9 T+ u
1)table:表名;
5 S- k3 J, r$ ^, R' Y3 B: s 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;) N- u# p# `2 ^6 S5 X8 `1 D
3)possible_keys:查询可以利用的索引名;1 o6 J& k5 g( F6 P+ z
4)key:实际使用的索引;
- n4 e+ j/ o% d( B1 o3 D 5)key_len:索引中被使用部分的长度(字节);2 d4 S) m I q, T( y5 [1 g
6)ref:显示列名字或者"const"(不明白什么意思);6 z+ N$ L* M" x& O% R- _; u
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;: o3 f$ V5 F; W' K; O: H; _: I; [
8)extra:MySQL的建议;% q1 U7 h; i6 h9 w9 B$ e+ ^/ r( |) i
! m" E; s; S1 c% d- ` 17、使用较短的定长列
. o+ B: }# y0 I, ]% i2 Z 1)尽可能使用较短的数据类型;
) \8 @% q3 B5 Y4 C# W3 P6 ^- j" R1 N 2)尽可能使用定长数据类型;
- V$ z4 `* A) I a)用char代替varchar,固定长度的数据处理比变长的快些;
) {2 Y) r" k0 J4 o5 [# q b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能; O% e+ x' J5 g- A$ O+ s0 P
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
% f0 Q8 F! B& |' _' U& q d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
$ a& N7 X) L, E% [; m4 D
) t% }5 [, S6 c0 G9 _$ u 18、使用not null和enum
% c8 J3 F9 B! Q* S5 |! ~2 J8 {# ] 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
( i. o" [) K) `& O& p 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
( R0 \* z8 ~) n4 m! `( m1 z 7 H9 l8 r1 v+ A5 t
19、使用optimize table
' X; Z; |3 K! C 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
9 S: m7 L% T3 W: j
8 T% s- M& a0 ?8 H' f- T9 D, _# J6 W 20、使用procedure analyse()
- c. r. R: [1 }! D 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:& m* D/ [6 c! a" F+ I9 n
select * from students procedure analyse();
; W2 l. ~9 b: [+ X9 x select * from students procedure analyse(16,256);3 ~! B/ D' N" Q/ o% {
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
: m) U$ m! O$ u4 N 9 `6 W4 y% \3 x) d. n1 N1 T& E" Z
21、使用查询缓存# o5 Y/ L& Q J0 ]
1)查询缓存的工作方式:: V1 P, ?, d' y
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
! s2 U2 R& K3 _, v& l 2)配置缓存参数:0 E/ a3 R8 i' \3 w
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
F( j! B" B/ b7 W8 T" @; E $ Y2 ^% j1 t- e4 T
22、调整硬件 ]9 f: B/ @4 e: e. s/ {! x
1)在机器上装更多的内存;
, L6 g# u3 w& e% T. C6 {! C 2)增加更快的硬盘以减少I/O等待时间;! R- V; H7 Q2 |7 E# d" F
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;2 n2 t5 E8 P1 o# G# p. i; v5 [
3)在不同的物理硬盘设备上重新分配磁盘活动;
" ~: A! h { k0 r8 ^/ G 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。" R4 z8 @' X4 `
|