启动:net start mySql;/ \. u; l2 D3 p, g. h7 ]
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
. j: G4 I) [7 ]! s f 列出数据库:show databases;
3 P5 H# c1 w* I/ b 选择数据库:use databaseName;- _( V# B; i' @" Q
列出表格:show tables;
& H8 I: _9 Y; s' h4 Z 显示表格列的属性:show columns from tableName;
4 _6 @. Q- A3 ^5 w8 C4 K4 R& s 建立数据库:source fileName.txt;
1 |8 Q ]" q$ D! g 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;1 ?( P1 g7 X7 t8 z1 W
增加一个字段:alter table tabelName add column fieldName dateType;
, c! s) ]+ V& c 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
* L2 M/ d0 J5 k# C; q% l& P 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
0 F% p& S- k' c* c. y* N2 R) d 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";3 f8 k) { g9 u& p
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;! w- Z2 D- k* g
查询时间:select now();
5 i1 @5 z; p1 x/ d8 Z7 S" d1 I/ k 查询当前用户:select user();9 [ a, R6 B% I; H2 P7 H, z
查询数据库版本:select version();
* B0 W$ q9 c& I" r 查询当前使用的数据库:select database();+ O+ V0 v# r- x" ~$ L
* Y- s% z5 c8 g" h% t P! p& R
1、删除student_course数据库中的students数据表:
4 G! H8 k. u) q$ ]- p/ x/ \ rm -f student_course/students.*/ W, v; T3 |5 j! e
( e/ d7 [7 @: r+ Z. h6 {9 R
2、备份数据库:(将数据库test备份)4 k& n4 u' r$ `2 ^ y$ z
mysqldump -u root -p test>c:\test.txt
( T: b/ w" @3 X* }0 S 备份表格:(备份test数据库下的mytable表格)8 j- @* {$ G% d
mysqldump -u root -p test mytable>c:\test.txt4 H5 `) a6 X+ r" V% @
将备份数据导入到数据库:(导回test数据库). s6 L( R+ L n0 p5 g! o
mysql -u root -p test<c:\test.txt
4 M. s; v; _/ E k# ^/ ? 2 E$ U# f2 J6 U" c; N5 W3 V
3、创建临时表:(建立临时表zengchao)5 B4 R2 y+ V" U& Q% r: G$ v
create temporary table zengchao(name varchar(10));
* a8 Y# ~) P; X% e9 k" L }
3 n: M# w$ ]9 k" A0 v$ ]" a! L: v 4、创建表是先判断表是否存在. |" X q& s/ Y' V9 c0 K
create table if not exists students(……);
7 p9 R! s2 j% `5 p1 `* ~
# W- e$ l. T* ?- a5 }* J 5、从已经有的表中复制表的结构 h9 H; l4 D% j' ~+ T5 j
create table table2 select * from table1 where 1<>1;
: H" m6 z4 f Y4 B& G
: E# |9 ]* W n- \6 ^ 6、复制表! q7 _* Q" {4 I4 @- c \% u
create table table2 select * from table1;9 H! v0 t0 T) g. s t6 C& Z
) ?( N6 R3 `2 m- P
7、对表重新命名$ y' @8 {# t7 L* _0 Z2 I) u6 a
alter table table1 rename as table2;
+ L& f7 s5 u7 s" q , }# \" e7 _% m N L$ C5 I
8、修改列的类型1 ~( v; m0 k' m: x+ Z
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned- x2 G$ L1 ~0 B |- D7 {
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned. t, a9 M$ Y1 f( M- [# U
! I: g8 A2 v; R; C+ E& G0 l9 D: S4 f 9、创建索引
& g* ?- c! M' P% d/ F& } alter table table1 add index ind_id (id);8 ?1 {+ }% c+ {5 g& o9 @* O' i+ Q! ]
create index ind_id on table1 (id);! ] F7 L b7 W
create unique index ind_id on table1 (id);//建立唯一性索引
# h! |7 H J! r: N
3 l7 O$ B$ u" x; |( J' l 10、删除索引
7 K* N6 A9 {# R: @) p drop index idx_id on table1;
8 T$ B, [: T9 ~$ g& @2 {% j alter table table1 drop index ind_id;
: Q- w: u& o" d5 f: g
; f. |. O6 R( S \ 11、联合字符或者多个列(将列id与":"和列name和"="连接)4 ^3 a. \+ V% }' D7 r
select concat(id,':',name,'=') from students;& c& m) L; A8 ]% T9 P1 U
% n4 v3 ~- q3 \8 ~! e" {
12、limit(选出10到20条)<第一个记录集的编号是0>! u# [4 ^% S$ R2 ~/ [0 F
select * from students order by id limit 9,10;' A8 K( S8 e% r* I! W
6 I" G7 Z) y b9 @6 |* C 13、MySQL不支持的功能
4 a- [ [( X% O2 X 事务,视图,外键和引用完整性,存储过程和触发器- u6 t9 [6 U z: ?9 e
$ ^/ \8 g7 N0 T9 Y- w7 e1 ]
0 s& i4 ^2 D) ~. i- P 14、MySQL会使用索引的操作符号
+ K8 E8 ?/ d/ J- [ <,<=,>=,>,=,between,in,不带%或者_开头的like
' Q8 J4 f% a0 I% t
: F: h! Z% E/ w2 p2 k( {& q 15、使用索引的缺点
! Q0 G3 s2 o4 Y( V# L 1)减慢增删改数据的速度;
, n3 [+ v1 u7 R. q+ |) D8 ? 2)占用磁盘空间;
! P4 t8 o4 Z5 J% A' i0 q; E; h" |- r 3)增加查询优化器的负担;
( C+ i1 ]1 s1 L9 X' P+ B 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
/ X1 b. u# T! e8 p4 a4 n ^1 `* l4 v
# \2 g/ n5 Q. _5 j+ R/ Q$ `6 } 16、分析索引效率
0 i) D: u3 c% h, H 方法:在一般的SQL语句前加上explain;6 F1 {. P- h1 T' Y/ e2 W
分析结果的含义:% S. Y. l Q4 ^# E. M
1)table:表名;
: j! L$ M8 \( K+ y: c4 \4 R0 _, |+ N3 {" g 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;0 b' U7 z4 r; }6 \/ q
3)possible_keys:查询可以利用的索引名;
* A) D$ p# X% f% N: Y" X% d 4)key:实际使用的索引;
7 [3 U) a) k, f2 e/ P 5)key_len:索引中被使用部分的长度(字节);
7 U( ]8 O- C m! A 6)ref:显示列名字或者"const"(不明白什么意思);9 G- Y- X; b/ p! O4 K
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
2 b% t: ^$ U- |3 p/ I' z$ @% y8 \% o 8)extra:MySQL的建议;
Y' j' `6 G- _6 ] L
, }% M' h" F/ k* @ 17、使用较短的定长列
6 F1 D9 A5 B# b 1)尽可能使用较短的数据类型;6 ?; c. l" S- b; s- s3 U8 t5 ?
2)尽可能使用定长数据类型;
# }0 r# E1 c7 Q$ `6 S a)用char代替varchar,固定长度的数据处理比变长的快些;
+ m. J" i0 W! s& o b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
9 a) W( }% |" p c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
. _ | j- e$ M; T4 e7 G& f7 @ d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;, y. E: x5 w+ M0 F5 d( U
b/ A$ I% C. V5 k6 ]3 G 18、使用not null和enum( i) w3 J J4 g) Y0 {
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
$ U5 D* g+ O D" y9 G 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;4 @: K8 ^# @+ H; _7 j u1 ]) I, R
$ }" b1 b; t* m7 M( G" f
19、使用optimize table9 @8 N) O8 P3 @7 ~0 u* U
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
7 [0 ^8 i# z. I. c" F1 l8 T
{) m7 c, d0 v1 I5 ]" l" P 20、使用procedure analyse()2 v6 C% a4 j& V+ H* u
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:0 P8 y5 W) L$ q
select * from students procedure analyse();8 v# ?2 }/ P# r* t1 G
select * from students procedure analyse(16,256);
7 S" d. b1 o4 K% {- p 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;! u* k7 b( J5 u, A
, ~) I% z; v, `4 Q- b4 } 21、使用查询缓存
# ]+ ?3 o. g1 ` 1)查询缓存的工作方式:" c# f' Y' Q$ ~- X# s) I9 f9 e
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。: q7 J( Z7 h9 [ X1 f3 H; F
2)配置缓存参数:7 V: G1 B/ b5 z! e; I( q# |
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
9 |: k7 c& w B- |4 j
% k0 I/ e4 w2 @7 }0 h 22、调整硬件
+ B0 U) f: q) W% `4 O) k 1)在机器上装更多的内存;* f) Q( x j0 O$ t8 J+ V
2)增加更快的硬盘以减少I/O等待时间;
: U( O6 u$ g6 m8 x2 C! g- a1 I: D 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;6 @9 e3 \6 }9 W2 Q2 Q( ]3 X, c3 p
3)在不同的物理硬盘设备上重新分配磁盘活动;* U7 \# N) |7 Y! D
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
! c) {& F) \. R5 v2 g |