启动:net start mySql;" U; [# Q: d9 V" A+ s3 Y: o% |
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! i( v! \7 ~4 f2 P7 s) W 列出数据库:show databases;
, N6 L6 O* Z, O/ }7 b6 t% X 选择数据库:use databaseName;
% Z& e p' s: Z8 m+ i/ @# S7 t 列出表格:show tables;+ U4 ~; Y+ T' i" Q6 F
显示表格列的属性:show columns from tableName;) x5 F2 a& l1 c7 c, l
建立数据库:source fileName.txt;8 t' U7 L) f% S
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;* s% D* {$ a4 X/ ?( M
增加一个字段:alter table tabelName add column fieldName dateType;3 \) U# Z1 _) }+ w
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
# J3 N; K% s- J7 E$ ~ 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;5 D! E4 U# `- n3 ?" y) w
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";: S; ]& L' ^! P8 f$ W
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
$ a. o- F7 k5 u 查询时间:select now();% X9 O+ n' Z+ P$ `
查询当前用户:select user();
; n( N' _ @9 v( C 查询数据库版本:select version();
& T1 i( E2 S4 y, } 查询当前使用的数据库:select database();
# ]* G1 S0 x% U! u5 Y% q8 M S$ `
% V \$ B) i( A. O. `! Q 1、删除student_course数据库中的students数据表:
6 u) e! h9 a: a; _8 L, ^7 T rm -f student_course/students.*
* U* a6 N$ @: \2 X
1 j, X, T" j: r& ?4 o; R" V; b5 o. J 2、备份数据库:(将数据库test备份)
) g8 N# r% X$ f6 T: x) v! Z mysqldump -u root -p test>c:\test.txt
9 f$ [- e: k+ |( u' F+ p( L7 A6 @ 备份表格:(备份test数据库下的mytable表格)
$ K& U, j' U/ W1 e" D% m mysqldump -u root -p test mytable>c:\test.txt
: q4 W Q2 ^8 D. Q 将备份数据导入到数据库:(导回test数据库)$ M. e" M+ ^. B
mysql -u root -p test<c:\test.txt/ `$ N& U. V3 e
$ G) r, V2 H; y) J! M% D9 w0 h 3、创建临时表:(建立临时表zengchao)
* X/ x: @0 U `$ Q2 h8 c create temporary table zengchao(name varchar(10));
: J2 X d% i( C) l
7 M% A$ x/ B2 M 4、创建表是先判断表是否存在" U! P* x0 C1 o/ J8 M6 u1 ?( n
create table if not exists students(……);% I3 l4 H) I# V- `
; V d+ j! S- K/ o8 \! D2 V
5、从已经有的表中复制表的结构) W( T+ ]) l/ i$ N$ S
create table table2 select * from table1 where 1<>1;) _, F( c, T+ d0 z) J
* @. G5 f Q( K6 O5 g: ^( R
6、复制表6 `, U' Z% w8 n# s9 c
create table table2 select * from table1;
" P# Y1 k, \" n+ {- D$ d
7 N# R" u3 o5 }# U* m5 G- m 7、对表重新命名
5 h' x( f3 J: ~1 w alter table table1 rename as table2;
0 [- Y+ d+ F3 Y! J2 O R* n 6 [8 c" K5 R" C, }
8、修改列的类型2 h2 a/ z3 r& |$ b: a; ^
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned+ {6 _. D( c. o1 \# j
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
2 D" l/ z+ X$ V3 M
( q3 B4 t- f' L 9、创建索引
" J$ e2 P' r8 P! Y; h8 E% T alter table table1 add index ind_id (id);* {0 ~) C3 i( P t6 Z
create index ind_id on table1 (id);
) b9 J& m) C3 _9 h create unique index ind_id on table1 (id);//建立唯一性索引2 j5 A1 H) J3 K" s+ l7 `% e
2 M, W' b; f/ z% t# ]& r
10、删除索引 {% |- M ^, g0 g% M
drop index idx_id on table1;
1 q; Y; h& k `, q alter table table1 drop index ind_id;; T9 d* w" E! s2 M6 U$ h5 X
) Q# w" B& ~" N/ A9 [ 11、联合字符或者多个列(将列id与":"和列name和"="连接)+ I* h' I2 M$ t
select concat(id,':',name,'=') from students;
; n& @ f; U7 J, v- o3 E
& B' P. v2 e3 x$ h* H: A8 ~) Q 12、limit(选出10到20条)<第一个记录集的编号是0>
0 N' ~1 c# j, d; B, W select * from students order by id limit 9,10;, R% C" \$ A( ^- y" _
9 s a8 k( W# \- x* k4 u7 z5 [
13、MySQL不支持的功能6 e1 F4 r* L, E9 J' a4 G. D
事务,视图,外键和引用完整性,存储过程和触发器
! a' k3 c2 A0 d7 [3 U. ? 7 z$ m2 N. k! u* N7 J+ y
. [( y: }: X, o ?/ J( G' h 14、MySQL会使用索引的操作符号6 l8 ^! B% H: t ?8 x) L m
<,<=,>=,>,=,between,in,不带%或者_开头的like' Z7 l3 P' S+ A9 }; Y
5 w4 `5 G: r' V5 l 15、使用索引的缺点
9 Z) ~/ Y/ [1 G 1)减慢增删改数据的速度;
/ t* \1 |: f7 V& l; B 2)占用磁盘空间;
" f! W% k* c9 ?4 C Q. W! u 3)增加查询优化器的负担;$ w+ }' [. h/ J, p9 g( C2 r2 r3 _
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
: J+ u: f* T+ ^# Y5 U # P7 Y; X2 F/ B$ t( q9 }
16、分析索引效率 V1 X0 H9 E0 U! r; ^1 Y
方法:在一般的SQL语句前加上explain;
. `+ J' v9 }2 z 分析结果的含义:/ _1 S4 W4 L7 f/ E$ U$ j4 q
1)table:表名;
) e+ w5 h! r W/ \3 E+ L7 V" s: } 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
& A9 G5 x$ f5 B5 T, s: C 3)possible_keys:查询可以利用的索引名;
' m" F0 h& M7 u) L* {; e7 G 4)key:实际使用的索引;
$ I, ~% [" h9 M) G+ s' u 5)key_len:索引中被使用部分的长度(字节);
: r+ S' e' _* Y; E9 q 6)ref:显示列名字或者"const"(不明白什么意思);% L6 j/ i, `$ N' g: B5 P/ X
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
- w$ E2 Y4 e/ h5 a' Y) s+ M3 D 8)extra:MySQL的建议;
" m3 ]0 } F0 P# [( v* d6 F
2 V2 O4 @5 w3 E- [# ] 17、使用较短的定长列
8 v; P2 e: V' M+ [ 1)尽可能使用较短的数据类型;
5 l) h1 e$ d9 ^# g8 Q5 M! Z 2)尽可能使用定长数据类型;6 T. z: @7 d) A
a)用char代替varchar,固定长度的数据处理比变长的快些;& b$ z9 Z5 a" v$ K8 h' t3 o: Z
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;- m8 [- ~2 ]* D
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
# D7 ~" ?0 h6 T5 _ d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
) [/ ~' f% t8 F. m! w
1 ]4 K6 m& R1 \4 N* H3 K 18、使用not null和enum6 { W2 p; E% ~ E
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;, s4 t1 y- S ^
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;; i3 S+ [; w' h6 z$ T
8 t) T* P# v4 O$ P 19、使用optimize table
4 T9 ~- U8 J+ E: L 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;3 Z1 V' f1 T: o+ w2 E
; o' C& ]) n4 e1 s5 H 20、使用procedure analyse(). [( Z3 A' L5 M
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
' U- Z4 T1 \- ]: } select * from students procedure analyse();
+ A: `; e% |( k" w6 e- y. \ select * from students procedure analyse(16,256);
0 N( W9 _: ~( Q2 ~3 n 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长; D$ v% Q8 u4 O8 `6 [$ z
; a) ^9 S$ k" _: S- v& { 21、使用查询缓存& G9 \0 r, `) |
1)查询缓存的工作方式:
6 M) d2 t* |( T" h' q 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。: A! z( w4 } Z: `
2)配置缓存参数:2 U4 h( l6 M6 N* @; H: [( f r5 q
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
' H0 J# @1 h! e7 H4 G! ] # T0 M# \6 P8 j# R. X! N
22、调整硬件
. d9 w' \1 h: M 1)在机器上装更多的内存;
, w+ N. B5 `. V& y- h) _ 2)增加更快的硬盘以减少I/O等待时间;
& S. b! |7 c9 h& ] 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
% ^2 p8 [, E. ~+ L/ H( s1 W 3)在不同的物理硬盘设备上重新分配磁盘活动;
3 ?' |% u7 Z) z y( G7 A 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
+ N& n! o9 H1 [. n' Q/ y" @1 Q |