启动:net start mySql;0 P4 D$ ] T! I+ T4 J# e! F4 H2 M
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
8 {1 @2 t3 D- K; d& ^ 列出数据库:show databases;
! s+ C X9 f7 ?" f9 q" f# ? 选择数据库:use databaseName;
, I/ f0 q! Q2 @ 列出表格:show tables;
/ T9 w2 b$ L7 S6 I7 \# x 显示表格列的属性:show columns from tableName;
V* | g3 w' ~9 @; | 建立数据库:source fileName.txt;
. o' C7 e0 ^6 ~/ o+ o! h% X: p1 P: x 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;& c: H) W" o: S+ Y6 j! e( I
增加一个字段:alter table tabelName add column fieldName dateType;
9 U6 L. E# t% g# b% b* } 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;1 S3 O6 s6 _# T8 K, s8 I# _; F7 n! m; Y
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;# A$ D9 r+ z `0 W: j$ C
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";2 ]- \+ I( I; D: o0 D. R( F
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;# |! _& n/ n, S% `4 E6 P% r
查询时间:select now();
' D& I0 y& W* _, Z+ h 查询当前用户:select user();4 g- Z' h! e [$ i! V2 t
查询数据库版本:select version();1 u: K7 J/ P! n. J0 A, r; n- I
查询当前使用的数据库:select database();
% ]# O; [+ b2 D4 H / d8 w, ]' X6 s) V* q' V0 R
1、删除student_course数据库中的students数据表:
7 Z* J- t' \; O- n rm -f student_course/students.*
/ v# f. A6 z- K$ r + }: h: ] k; |4 F2 J* u" j
2、备份数据库:(将数据库test备份)* @1 f, N' ?0 r! N! u
mysqldump -u root -p test>c:\test.txt
8 ^8 n2 X/ k, f+ `% u3 s 备份表格:(备份test数据库下的mytable表格)
( C' S% _- t: {& }4 H mysqldump -u root -p test mytable>c:\test.txt& {+ t- @# ~1 L+ c/ ^9 ?, Y- J
将备份数据导入到数据库:(导回test数据库)( F" _6 ^( t/ g. A! N- P$ I
mysql -u root -p test<c:\test.txt
: b1 o4 D5 c' T " o' E- @; S4 V; H
3、创建临时表:(建立临时表zengchao): h) S# G) O' a7 q
create temporary table zengchao(name varchar(10));2 V B7 v5 y# u& v1 t
# N6 `2 t( X/ z# h' o2 h- R
4、创建表是先判断表是否存在. H" ?4 j6 u9 C" ?! m, }
create table if not exists students(……);) @' i! p, c6 ~8 t5 [4 u
0 H) |/ R" X- L6 p8 \5 {! m0 p0 M
5、从已经有的表中复制表的结构4 k2 y- d: d# e# m( o9 O$ w1 b
create table table2 select * from table1 where 1<>1;7 Z. e6 P4 Q3 [0 I. V" D
7 y$ Q# n! B7 Z1 B4 x3 }
6、复制表
! S V R, ~ g2 J create table table2 select * from table1;
/ c5 k! D' J5 u6 L $ x9 i2 p9 E* i8 g# b/ t9 {$ [1 ]
7、对表重新命名
" `, e& N& i9 l* J( Q' a alter table table1 rename as table2;
& ?3 ] l }. @4 v1 [) d* b5 ]) ` V
: r' K! E/ @, U& W 8、修改列的类型$ u% t( G5 o g/ U: ~
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned' Q6 ^; z# l/ @5 r/ |) T
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
& ?; I, V; ?3 ]! R% G9 P4 ?4 U* v 4 Y0 `) {5 i$ L' b. T6 {' ?
9、创建索引4 t I3 l/ K4 _. t3 c
alter table table1 add index ind_id (id);( a& G- f9 E$ y
create index ind_id on table1 (id);% \& ~0 I o5 g0 t" a
create unique index ind_id on table1 (id);//建立唯一性索引, a/ m$ l, u" D1 T2 j
& n/ U9 Y5 r% v) q
10、删除索引. H$ N+ N& Z: e# Q; g
drop index idx_id on table1;, b: L6 m6 L2 b+ h; F9 P) H
alter table table1 drop index ind_id;6 X h) W1 P' v* p3 Y: B. M( ?0 b
* w6 R& M+ i3 l2 @ 11、联合字符或者多个列(将列id与":"和列name和"="连接)
( P0 W3 e4 Q3 b4 i, q, b select concat(id,':',name,'=') from students;/ `3 N! |* v. \8 j( u$ Z. k" m2 \
* G% M* x1 N/ ^/ h& d3 o
12、limit(选出10到20条)<第一个记录集的编号是0>. u& s! S" D8 C1 ?, y; ]
select * from students order by id limit 9,10;
1 h) I! _2 N1 V5 ] 8 H9 G: ]8 e) f0 p/ ^* T* K3 k9 d) e
13、MySQL不支持的功能. m, E/ ?9 O3 m' X4 F' H
事务,视图,外键和引用完整性,存储过程和触发器3 W7 b0 q1 W* H+ a. j) w( G r
! Q' w% E p/ N6 e X* o- A
5 r! s0 d4 f5 a- w( V y 14、MySQL会使用索引的操作符号
# O a5 d# x1 t9 J" z <,<=,>=,>,=,between,in,不带%或者_开头的like, i" m8 Q, Q5 a; j' w; D7 W3 `
/ [+ m% E9 c+ q8 \ 15、使用索引的缺点/ `4 J* H; i4 T8 O4 O
1)减慢增删改数据的速度;# w" {+ ?0 V+ w& f- Z
2)占用磁盘空间;
1 j& f' Z( e/ n: k 3)增加查询优化器的负担;
" f4 E" i& u4 ]5 D4 _ 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
# {7 ?$ X# Q# B7 ~ n
9 F6 M0 e# _( Y 16、分析索引效率' a. A* U% y! i& R9 W7 B0 m" W
方法:在一般的SQL语句前加上explain;
. a' w" v' X" C/ z 分析结果的含义:
y+ q8 r6 Z) ^ 1)table:表名;. I# c# c$ ?5 I/ b. x
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;& Q3 Y8 ~) R4 ~8 X; E9 s8 _
3)possible_keys:查询可以利用的索引名;. _! a, u7 f4 S& u7 a7 Y+ s. }
4)key:实际使用的索引;# j, _/ z0 R) u" v) C! D
5)key_len:索引中被使用部分的长度(字节);
" J% \& U& A3 }$ r0 H% P- E, ] 6)ref:显示列名字或者"const"(不明白什么意思);
- d7 f6 b% l2 m8 } 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
( w2 ?; x f" l 8)extra:MySQL的建议;0 j$ t( k6 N2 u' o! ~
9 N! {/ z! ~+ }( n& Y# K 17、使用较短的定长列
' }/ B; B# @0 _2 Z, q9 U2 i 1)尽可能使用较短的数据类型;
& e8 ~! c. V; [8 b/ ~ 2)尽可能使用定长数据类型;0 J( d1 X' P, G& F7 Q
a)用char代替varchar,固定长度的数据处理比变长的快些;
8 |' v" D: y! `8 W4 l3 ~ b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
k5 r S4 v4 Y# P% |; k c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
i3 l; X$ {5 V# ?! q d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;+ n6 `; N! i5 |1 l* d
! N8 [# _- G4 R6 |. @0 C+ X0 K
18、使用not null和enum
% R0 p! E+ k7 T* {9 d 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;# l$ M8 }: T( g! W0 b0 _5 r5 Q7 J
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
! l. o$ W7 ?! W0 v
! f# f! P. S/ n9 j+ n2 U; j 19、使用optimize table
. U. h4 e( T. @% |& k 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
9 v% U5 }. K3 ` : h; ?) _3 b2 _* _) M" M5 y, K
20、使用procedure analyse()% k& f- E- J( j# a; V' D; _
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:/ @- w* W5 ]( S, K5 e2 n
select * from students procedure analyse();
: Q8 \3 S( J" ^# P% W select * from students procedure analyse(16,256);
, ]( O7 A* Q$ A$ S; e+ B 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;6 p9 F$ i8 G9 {
& s* h( g, N+ }' o4 p' R# g
21、使用查询缓存
3 Z# I0 W* V% e" [/ d! w9 D4 m0 E 1)查询缓存的工作方式:# D& C9 R7 _% M+ T/ ^2 E) Z
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。' i! C5 e2 D! v3 } \
2)配置缓存参数:# \/ g6 N3 P( y- n
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。( H' Y! T* z3 A; r4 D9 d3 F4 u$ h
3 v7 x: m( g5 z' d# }
22、调整硬件
8 @8 q2 ~: ]1 x* F% z6 i/ W! t 1)在机器上装更多的内存;
; m+ ~; W+ c+ Y1 G 2)增加更快的硬盘以减少I/O等待时间;6 k1 J. ]: H; f% T# \: D. X
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;: d. u) A l3 f0 s9 c
3)在不同的物理硬盘设备上重新分配磁盘活动;
; i% a. I" n2 V7 w 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。+ v8 \, C, g/ {& J5 p
|