启动:net start mySql;
; X+ ?) n. _ \5 w; j 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! u" }3 T; s' y 列出数据库:show databases;
" }, `. B' l: K 选择数据库:use databaseName;
* q# x5 H% c6 [/ L& { 列出表格:show tables;
( V0 K. S+ y9 _$ s0 B5 T2 L 显示表格列的属性:show columns from tableName;5 o; ^; P$ r3 I4 Q9 ~4 V
建立数据库:source fileName.txt; f, G. A& z( l. @, t) C
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
3 ?, O7 f0 L( x0 { 增加一个字段:alter table tabelName add column fieldName dateType;
+ V6 F. c# |6 D5 I X3 i 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;* u/ o5 }; U, W1 E
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;+ W# @/ n0 B# H: N. c; {
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
6 T( E* h' _* J# h 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
# d+ [9 |" a5 R! }( S2 ]1 X 查询时间:select now();* L. S, q1 s) b1 V0 E, d
查询当前用户:select user();
: I- i0 ?8 x' n' ^7 d$ l0 R 查询数据库版本:select version();
2 L2 L8 a# v/ \ 查询当前使用的数据库:select database();
( l8 w6 y1 S" M' \
S* a! x* |# H/ ^ 1、删除student_course数据库中的students数据表:
" W- q, [! q5 v. r6 g; ` rm -f student_course/students.*8 {! ]" W# _* A7 B. _* H
$ \& _2 R9 p8 {% [4 n0 E 2、备份数据库:(将数据库test备份)
$ m/ T2 c% N6 l0 k mysqldump -u root -p test>c:\test.txt. G. g& r& p6 ?% V; `/ Z2 M
备份表格:(备份test数据库下的mytable表格); p) O" P( B2 b6 w D; e* k7 f
mysqldump -u root -p test mytable>c:\test.txt; [) ]* k% _) I) U; E
将备份数据导入到数据库:(导回test数据库)0 \: C( q3 Q, z
mysql -u root -p test<c:\test.txt
) O; F: |4 X; f, i, I7 P( x9 V3 ]
6 d, _4 ]+ x7 h; z& D Z Z! E6 u 3、创建临时表:(建立临时表zengchao)
3 D+ `' h S+ m" a create temporary table zengchao(name varchar(10)); A7 ~, ]8 I0 c
; m I0 P% B. K/ k
4、创建表是先判断表是否存在( [5 j0 w5 a# x! k$ C
create table if not exists students(……);$ t* E1 h. _2 `' t5 l3 |' t" h
+ c4 X1 s- l. c9 @8 K' a
5、从已经有的表中复制表的结构6 ^: O$ B/ B' j" k& w& S
create table table2 select * from table1 where 1<>1;
3 q4 J8 q& X# f3 t& d7 H+ N 5 {" q- i( J" `; F! q( \
6、复制表
8 b, ~: s0 a6 F3 q9 s; d/ N create table table2 select * from table1;
1 c! Q C0 U; Q. S* U6 g4 S' \ 9 `1 w7 ~5 Y4 N8 [
7、对表重新命名) M$ @+ U ` d
alter table table1 rename as table2;
" Q ~) h) Z6 U( _% j
% X- Y3 Z: _: S7 f 8、修改列的类型# V$ d8 p/ x; \$ h( D
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned/ D' \/ S, \0 A/ |- L$ X
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
8 b( M7 S9 q0 e& b $ I5 c/ Q7 I7 h; E$ j+ K% Y( |
9、创建索引
, Q; t4 R2 c3 V# L9 P5 o alter table table1 add index ind_id (id);
9 t7 X9 Z9 c! Q9 G) R. W2 T7 ~ create index ind_id on table1 (id);5 W* ^' e2 ` H+ }* l5 J7 P
create unique index ind_id on table1 (id);//建立唯一性索引- q) {9 k/ p7 k6 P
' j" g' v9 `( |. q
10、删除索引# ]. R: A, b+ T- J: ^0 p
drop index idx_id on table1;) _% B) V8 f8 W& y& B
alter table table1 drop index ind_id;" `$ R1 `0 D/ {- K& k- V
) h/ O4 y+ f* I* T3 k
11、联合字符或者多个列(将列id与":"和列name和"="连接)
/ v8 c7 D# n3 O5 t& O+ \, A5 w% u select concat(id,':',name,'=') from students;4 x( ?/ p# m, j" \+ j
( k5 ~& n$ }/ n/ V2 Q, o+ R! A
12、limit(选出10到20条)<第一个记录集的编号是0>3 G" M4 ~' H) j4 Q7 D
select * from students order by id limit 9,10;
8 B2 z0 H8 }; e( T ' [: w6 m4 A! z% A
13、MySQL不支持的功能
# C1 V( e* t) t0 c 事务,视图,外键和引用完整性,存储过程和触发器
, N1 r- l M( o
8 T( O2 t% n { m/ B t5 X
( w2 ` d5 q' p4 E" I L9 S 14、MySQL会使用索引的操作符号) p4 a" H& L! ]
<,<=,>=,>,=,between,in,不带%或者_开头的like
9 i6 M2 P" Y7 o# x O / z+ ?" c! a7 X( s7 q& c# O2 r
15、使用索引的缺点
2 b1 ]0 p) O$ Z8 L! O6 s+ T 1)减慢增删改数据的速度;" M$ \" t, R5 |: N
2)占用磁盘空间;8 T5 D# P& j3 \" Y
3)增加查询优化器的负担;
' k5 Q6 |2 i0 z3 o 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
. E# `) C5 t: @* B7 l/ w+ z, D, t* Y0 l
! a+ O# i4 e6 J4 L- H( M$ \ 16、分析索引效率
# { K1 J) J0 y+ s+ `0 I 方法:在一般的SQL语句前加上explain;
: u6 w8 W/ ^5 x( C3 C+ F 分析结果的含义:& p1 A+ J7 T( _: q! j2 Y+ O
1)table:表名;
3 e, q' G2 c9 O# f: Z! m% ^) R0 s+ T 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
9 g& S. Q* p) `! ^5 [ 3)possible_keys:查询可以利用的索引名;
4 E! Q3 M$ N t& j: m5 ~# k2 k 4)key:实际使用的索引;* X. ^: s2 V! z5 h1 C1 M- \, g
5)key_len:索引中被使用部分的长度(字节);
# A3 u8 Q6 Q, T, o9 ` 6)ref:显示列名字或者"const"(不明白什么意思);
- N4 Y6 b1 J, f! g4 n 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;# \0 t3 @: A$ s, A
8)extra:MySQL的建议;1 o7 i, b* n/ q9 j0 A6 V& E+ g
; p; l5 m* W3 g
17、使用较短的定长列
$ b0 I! y- e5 R 1)尽可能使用较短的数据类型;& q# s5 K4 N. r" n) t
2)尽可能使用定长数据类型;3 b; R+ T: | e
a)用char代替varchar,固定长度的数据处理比变长的快些;, Z+ q( y$ G. @. x
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* @& [, B$ h2 h9 Q c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
2 B% t3 ?; G1 v$ u) ^% J d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
; n y4 K# z5 M$ g+ t2 v
: f( ]# f. \: G3 {6 ?* q- B 18、使用not null和enum$ G/ X5 t' S! F8 J0 Z/ _
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
3 w% h$ G9 d1 {1 c 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;0 f$ b) D& P1 m: E( N! ]9 s, q$ `
# A& i& P" _# o! A% R
19、使用optimize table1 K: q+ ^* `! _0 u7 u2 i5 J
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;. _7 k% g& T5 L6 t; h8 w7 A
0 d: L9 j! @: _/ x% M 20、使用procedure analyse()
0 r" Q- s* r2 {+ T1 e: J' y 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
( _& e! Y* B/ i. K3 ~/ Z$ Y! n select * from students procedure analyse();
& O& C3 i O* ?6 L0 s5 D select * from students procedure analyse(16,256);& ~, ^: `& s, T/ k, f
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;1 f& [5 v! D: m( T+ Z
; o) q4 a$ @" E( D6 V+ I( ~8 a 21、使用查询缓存- n4 ~) i" C: {2 R- _
1)查询缓存的工作方式:
& J/ a- t" Q% k4 j7 B& J K. { 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
' Y f2 v+ q" B# W 2)配置缓存参数:
; A" B+ |6 T- o$ w. V$ |; ^ 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。$ g$ n. ^* Q5 w6 }1 s* ~- K
+ w. W9 S( A$ U1 e/ w
22、调整硬件
) u! v9 a0 Y$ K; J1 y4 B) s6 Z1 Q 1)在机器上装更多的内存;9 d) ~+ u( w$ ]0 H+ D. M, j
2)增加更快的硬盘以减少I/O等待时间;% j- `' }* u% f
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
/ m1 ?' _& K2 H! v 3)在不同的物理硬盘设备上重新分配磁盘活动;2 |/ q( V$ y4 M3 {7 U. N
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& z. E: h. \8 |5 F. s
|