启动:net start mySql;8 K) f6 P* ?; {
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; O' E+ [! _7 y+ u4 n: [* P4 m
列出数据库:show databases;
. j: [5 @8 S1 ` 选择数据库:use databaseName;
# h) o* o- D6 g: z5 g 列出表格:show tables;
' l6 [7 v4 ~/ F0 m; D 显示表格列的属性:show columns from tableName;
5 b" @: B7 }3 _( U2 u 建立数据库:source fileName.txt;
& H8 L$ T) t: l+ Y8 G 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;- n% d+ U, Y1 i$ o. V
增加一个字段:alter table tabelName add column fieldName dateType;
: x" n. t3 ^( S5 g, ^ 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;9 C" @2 U- s9 i" o2 l% B' Z
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;$ Q) H6 e2 I1 i, ^
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
' d+ f. S, C+ {9 o- e% F& N 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;+ j q ` L+ ~2 Q6 z( B. ^
查询时间:select now();& w3 u6 d+ G/ N1 u
查询当前用户:select user();4 Y- k3 | I% c" u% E$ z# P
查询数据库版本:select version();, D( p$ n$ J0 K+ x [% c* @
查询当前使用的数据库:select database();
! e9 K0 z5 `9 Q+ [, }9 `
; m; T3 W% [4 ?! _ 1、删除student_course数据库中的students数据表:
& T' a& c( Y2 k- l) C rm -f student_course/students.*
& Z: J* w5 H& h* d
2 N8 ^" A" ]' F5 a/ C1 H" | 2、备份数据库:(将数据库test备份)
- ~5 H$ C/ k" B4 D c mysqldump -u root -p test>c:\test.txt
- p' q. M# K1 t1 a/ }) [ 备份表格:(备份test数据库下的mytable表格)
3 b3 Y; e$ n! V; _( l! G mysqldump -u root -p test mytable>c:\test.txt
/ A/ ~2 Y5 I7 i+ u! b1 A% D/ a2 o$ O/ w, y 将备份数据导入到数据库:(导回test数据库)
0 A1 C, q7 c9 O) d: ~3 Q/ c: O mysql -u root -p test<c:\test.txt0 o- V9 w6 k8 @* i( Z+ i5 D4 B
, _4 h" [* D4 u 3、创建临时表:(建立临时表zengchao)
1 p$ D2 c7 k6 W2 g: ~: U4 Z create temporary table zengchao(name varchar(10));
- w3 j/ R7 u1 D; k
2 U$ N1 S3 V8 l8 d' o 4、创建表是先判断表是否存在
. l' O2 V6 W6 B create table if not exists students(……);6 u: o9 q5 i4 [2 U" R( g
- q: o6 Q7 a, h, Y' P 5、从已经有的表中复制表的结构9 |: [3 Q; w# N6 Y8 j/ |
create table table2 select * from table1 where 1<>1;3 t6 E5 x. ?9 Q( k1 M
. U" L X# \/ O% M 6、复制表: {- {/ D& q. {) G- ^ M( f/ I
create table table2 select * from table1;
/ o. r c/ Y4 K$ K& s ( E# ~+ C1 T/ Y0 Z! ^4 s7 t7 I* x
7、对表重新命名1 i" _+ e1 ~0 I" Q9 L, l7 t
alter table table1 rename as table2;- D2 n1 l, s) i4 z
+ g7 {/ p z/ F" Z8 E1 _
8、修改列的类型% W# o* J1 D1 }4 _- S) N
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned6 a3 c$ b0 s9 W% f+ _4 M
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
* t* [5 g: e0 b
& _6 \/ }! P6 _- a! R* J+ E D 9、创建索引
# p% e7 B7 E' h7 ~ alter table table1 add index ind_id (id);
( q, {+ k3 a/ R$ {7 ~0 @ create index ind_id on table1 (id);) E l, O- }; F$ Y' d
create unique index ind_id on table1 (id);//建立唯一性索引: D4 A& X) t- Q, M
! ~7 R7 o4 ?! s8 i; k5 s' }. Z3 [
10、删除索引
. ^+ c3 u2 y8 T* c/ ] drop index idx_id on table1;- w9 a; Z- |' Q1 x* p* \* @/ D
alter table table1 drop index ind_id;
5 A; E& [3 u7 D# h* @, E$ y0 _
; G2 {1 K4 j7 S, a 11、联合字符或者多个列(将列id与":"和列name和"="连接), X6 S, S& j, r
select concat(id,':',name,'=') from students;
6 O- F. Y) |- V+ S; W" l
8 c8 Z8 ]% q8 V8 o& {8 R4 G9 ^ 12、limit(选出10到20条)<第一个记录集的编号是0>0 A7 P) ^4 {5 H0 u2 ~
select * from students order by id limit 9,10;% {2 w% V5 S/ u0 y5 n) @0 L
% _/ s# [& X) I1 A/ r% i
13、MySQL不支持的功能$ ~3 N" b8 K* m6 L! z5 O: g
事务,视图,外键和引用完整性,存储过程和触发器6 D8 Z9 l0 t6 @* |4 e3 A7 N
6 T) X! E- x6 U: O2 o; a+ _7 J" c( H * H2 s" S' m' @' O( T( h: I% ^
14、MySQL会使用索引的操作符号, w0 a; J7 D( i, U* G
<,<=,>=,>,=,between,in,不带%或者_开头的like
8 O) }. @1 y( ?7 R9 I) |
; @# c" e& t; ?$ E4 J$ T H7 } 15、使用索引的缺点% }' q: b# ]6 h# P$ l: C4 o: p5 Q
1)减慢增删改数据的速度;( r. a7 n+ ~" A( T% |
2)占用磁盘空间;/ m* {! E1 r. P/ z4 s
3)增加查询优化器的负担;3 a' ]* ~+ ~1 T8 y2 r& |
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
+ Q/ ^! N- k& ` 4 j1 ?+ m1 P; G
16、分析索引效率
( o4 G: h- k: Q 方法:在一般的SQL语句前加上explain;
) K5 v5 ?9 i6 p6 Y 分析结果的含义:1 b: {7 t$ B% ~
1)table:表名;: i6 N. r0 U5 b8 F
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;" _7 h5 _( p3 D9 A/ \( H0 ]
3)possible_keys:查询可以利用的索引名;
, j1 H# A8 Q) }; D8 H 4)key:实际使用的索引;5 R1 M, K9 R( k5 B
5)key_len:索引中被使用部分的长度(字节);
0 |/ |1 y. p) `6 R5 F 6)ref:显示列名字或者"const"(不明白什么意思);
1 P. v# c& A" V7 h 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
. ?2 t" b5 J5 u$ @0 _ f! k 8)extra:MySQL的建议;( n& a6 D' J3 Y. |1 E3 E
& U& u. i0 H7 z# G# | 17、使用较短的定长列+ k1 O7 ^" O( {9 p) c1 q, a, f W/ H
1)尽可能使用较短的数据类型;# J. a6 J( Y. V B4 l
2)尽可能使用定长数据类型;
4 Y) R# h' Q2 o7 ^, n a)用char代替varchar,固定长度的数据处理比变长的快些; d5 }% ~9 c! u, ~; K
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;" W0 A5 ~+ Y( D5 y; l
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
1 |9 p7 j0 c [ d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
; U: _$ g! ?, ~: @
1 W' A! L: Q# y& V- { 18、使用not null和enum I$ J- q* l Q: U% T3 U
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
) h7 C- k7 A, Z% m Q# i( { 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;3 m; \1 C& J5 Q" u) t; e1 _
; L5 P; ~. p T8 Z6 d 19、使用optimize table6 y4 s3 z# _+ _2 s. L6 p
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
! N; f+ w' _& J0 l
5 b9 ^- {6 o% p9 R0 ` 20、使用procedure analyse()% P' C0 {5 v7 K/ F9 l2 s7 r
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
% { j0 @; s% h. O/ s1 W4 w! l+ X9 h select * from students procedure analyse();( ~4 ?9 J$ g% x/ b
select * from students procedure analyse(16,256);( e9 g# [8 z2 K. x+ R# ?! f, V
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
! ~& [0 k* P+ k5 o$ j% U% Y
* c6 h4 _7 G: {$ A, }( F 21、使用查询缓存5 y' I" ?" e# ]2 d- X% K' v
1)查询缓存的工作方式:# b3 R/ l" Z% c% F5 [
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。# D' v9 c) f% o
2)配置缓存参数:
& C8 M/ Y; ]' C 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。8 f# C# ?# T* D) Z5 m
- L6 r4 K3 I) T4 X
22、调整硬件9 Z" W! {0 p% A5 ~
1)在机器上装更多的内存;0 \9 X% U p* ~6 j5 C" i5 K( _
2)增加更快的硬盘以减少I/O等待时间;
1 a: y% ~( j0 H \ 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
k# r$ G4 a# ^5 y: c 3)在不同的物理硬盘设备上重新分配磁盘活动;
" K0 S8 h" ~' E( x% t2 ]* \ 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。$ r9 g0 f2 G* q
|