启动:net start mySql;" t( M% I, E+ ~ Z8 i, [
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
% v) {/ F x6 z* _7 T 列出数据库:show databases;1 D+ S0 N: ^3 d' p2 J. r# f
选择数据库:use databaseName;
8 c1 s# Y4 X! N1 ~ 列出表格:show tables;3 O$ ]2 `4 B) n6 b+ m: }5 v
显示表格列的属性:show columns from tableName;
- B q. B- m7 ] 建立数据库:source fileName.txt;
4 f6 y" C$ j% H 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;- O3 F. d( \% }9 c' R- R& ?
增加一个字段:alter table tabelName add column fieldName dateType;5 K7 k+ g0 l. h. y* B
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType; |5 @1 n& v) V! ?% ^4 b# ~
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
9 v+ w* |" ]8 j; c 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";4 f& J# @* \! x9 k! Z; L2 i! B) n
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;" t0 m& ?' G: V ]2 g# R
查询时间:select now();5 T$ M f" s) i- B _9 p' f
查询当前用户:select user();8 w9 \8 L# p/ s/ e
查询数据库版本:select version();' U" m! _# n) }, o4 M, x
查询当前使用的数据库:select database();' x+ V* ^* n3 B- L W
- R" Y# d- ~1 B3 \7 X8 h h, w% L
1、删除student_course数据库中的students数据表:
" m1 ?6 Q; e3 U6 N) @9 O rm -f student_course/students.*
. v1 {5 c0 k" @. O$ c. I # f" x# @' F/ i5 C& z7 j
2、备份数据库:(将数据库test备份)
6 v# D Z5 H( C6 q2 K5 n5 u0 S: F mysqldump -u root -p test>c:\test.txt# b( q4 g; L) X. J
备份表格:(备份test数据库下的mytable表格)
7 K( [0 u: L) [ _2 ]6 z7 F! E mysqldump -u root -p test mytable>c:\test.txt
, m9 O0 [: ?) A3 z' u* ]; \. A 将备份数据导入到数据库:(导回test数据库)* t; C- q: O# {5 p- Y: D2 i1 d
mysql -u root -p test<c:\test.txt V4 X$ T8 A& Q3 B2 L8 b
( ~8 {2 q& ?# B* e
3、创建临时表:(建立临时表zengchao)
* r8 p( h0 a6 \ create temporary table zengchao(name varchar(10));- L* G3 S3 O1 n! d4 r
4 O6 Z" ]4 Z4 Y+ E 4、创建表是先判断表是否存在2 c/ |, o; {: U/ b0 J
create table if not exists students(……);+ H7 A x* V9 M8 U4 f" d$ N+ j, f
- i- U i$ }7 O+ ]2 Y) f2 }# {8 T+ u 5、从已经有的表中复制表的结构
1 P% d3 t% ?9 v, x4 o& |) R create table table2 select * from table1 where 1<>1;
5 H0 Q! V0 G* W% Z; c0 K L4 X! _6 F1 p" z& v9 y* j8 a. ?
6、复制表
$ E5 X6 R9 o9 c create table table2 select * from table1;
8 n; `2 P& Q" s }& p$ h& \0 f ( t# l7 T* h: b
7、对表重新命名
0 S. ^- ^1 W6 Q! [- l% P, q: h( P. o8 Q alter table table1 rename as table2;
; P! \5 ^3 t5 V* t5 Z
4 x8 Q% K8 b! T3 b, c- ^ 8、修改列的类型* x% P- Y5 t& c# P1 ]5 g
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
/ Y) F/ k- U6 ?- u9 ^$ f8 a& n- J alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
& s0 @/ r8 f( K" r. ?: e
! ?9 }) ^9 U$ U) k4 w* h# z 9、创建索引
( L$ p( y6 \$ X q alter table table1 add index ind_id (id);
6 I1 y2 Q9 D7 Y9 z4 z create index ind_id on table1 (id);
9 X: u, }- ]3 q* y% k create unique index ind_id on table1 (id);//建立唯一性索引
& a" z+ a: B! I; f 4 M( v* ~) \9 o5 T' V) _
10、删除索引
9 W1 c" M( J4 g7 b5 Q0 ~9 Q$ e# r drop index idx_id on table1;
$ q/ d. Q0 i1 z3 l% C% x, Q9 Y alter table table1 drop index ind_id;2 R5 d* g. c3 Y2 W: f9 V
3 _( l0 N* A& g% x 11、联合字符或者多个列(将列id与":"和列name和"="连接), C! E' x5 [ H" B
select concat(id,':',name,'=') from students;0 \$ [; i/ b1 m
5 Z% x1 @; ^$ u" c
12、limit(选出10到20条)<第一个记录集的编号是0>) I1 y, T2 N4 ~% X; X
select * from students order by id limit 9,10;
. d: r+ G) z4 g9 p- N 3 q( `4 F+ l) T2 I) A# {
13、MySQL不支持的功能
; F6 E% W& L6 E( R0 A 事务,视图,外键和引用完整性,存储过程和触发器
! }9 o$ H4 d! J% C& D" p
" E: f0 O8 a: x5 v5 \ / d) J+ ~# R6 t! Q4 w
14、MySQL会使用索引的操作符号8 d( R9 B! A8 C2 h
<,<=,>=,>,=,between,in,不带%或者_开头的like2 n$ s) `; }& b4 B) V1 ?
% ^* P: ?+ q5 q8 ?
15、使用索引的缺点
/ q) u v6 P3 N; Z* o; H 1)减慢增删改数据的速度;
/ d) q1 l8 u' ?8 P 2)占用磁盘空间;
# w, Q0 H9 ~# D 3)增加查询优化器的负担;4 ?& L. q' T$ P: H/ M
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案; C9 H% `1 s I8 c5 |
0 B: v6 H" f/ @+ p3 M& q2 W 16、分析索引效率9 _9 [! r; d% V+ {* G# ^+ |2 o b
方法:在一般的SQL语句前加上explain;" h% ]$ V& h! I4 P2 i, e0 P5 W
分析结果的含义:
% V( @/ O: J% O. y 1)table:表名;
8 ?. O$ z! P8 c) t, t# j 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;+ R* U/ S0 q0 v4 k. P/ S
3)possible_keys:查询可以利用的索引名;$ P* S4 u6 u2 ^
4)key:实际使用的索引;
/ \3 ?# Y3 s1 t; C2 b% @ 5)key_len:索引中被使用部分的长度(字节);
. j8 n/ O/ ^4 S 6)ref:显示列名字或者"const"(不明白什么意思);
( k- B! n( n h+ v5 p 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;8 o B' ]3 p! V( h
8)extra:MySQL的建议;- H. e) D& B1 E$ G
4 T- ]! J/ l1 \: p0 ^( _" V- e) ]3 J 17、使用较短的定长列
, a, ^* `" @$ R2 o2 p* z 1)尽可能使用较短的数据类型;8 K* H) K% n8 b0 P4 G8 F8 F
2)尽可能使用定长数据类型;
- i3 T5 v: B2 H/ |, W) l5 E a)用char代替varchar,固定长度的数据处理比变长的快些;$ |4 y* S* N: ~3 D0 E! D- n
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
% E b0 G4 I. t: Z7 k/ } c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
; x/ V1 t, B/ e: j d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;% B: O: v8 ^% y3 }, f i
4 X4 j. W+ f8 ~( u. H! k 18、使用not null和enum
! Z) s& [ K" V# M% v4 ?8 | 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;- g. v# b! ~) O" o# n
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
& ^& p% J9 F% S: R8 k 3 o* N' W* E/ B4 |
19、使用optimize table5 c g/ r8 r. t: B- P D6 g& y$ P
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;8 M I+ T$ h7 B% O5 Z6 O
# F: j3 U1 H- H
20、使用procedure analyse()
% z, r6 r8 d- H 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
6 S+ ]1 F9 t8 T# G* v select * from students procedure analyse();
& z S, R4 Q1 g; a. ~& E select * from students procedure analyse(16,256);
1 }: R% v: r/ W# U# N/ U; T3 P 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;+ ^% }7 ~0 z( O, c- M
* U3 U; w& K9 P6 I, h; j1 u1 S. K 21、使用查询缓存" L% O- a* K' c5 Y' c
1)查询缓存的工作方式:
1 ]9 X. \8 }3 e, C& Z 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
' r/ b/ o; ~, ` 2)配置缓存参数:& j7 }, |3 S- b
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。$ i6 e$ r( d" M. x* n
h; F x1 [0 }$ {3 L
22、调整硬件
# ]' c: b/ r4 e 1)在机器上装更多的内存;# z5 f. F+ i u% f+ {' J0 ^
2)增加更快的硬盘以减少I/O等待时间;
( d1 m) E& O* p/ X 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
# `7 {4 b# N- `; [' @) U: @7 C& E. S 3)在不同的物理硬盘设备上重新分配磁盘活动;
. T: T' L9 x6 y( |* s; g 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
" a! ?7 V# A) [& E* z |