启动:net start mySql;; N0 B. V9 ^$ O9 m0 C
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
" w: l3 P$ g0 @9 d 列出数据库:show databases;
* @0 g/ B* P5 g! g+ B# F 选择数据库:use databaseName;, p- E2 G' q5 j" t6 T$ P
列出表格:show tables;5 N) x+ i! ^ R7 k: g8 [
显示表格列的属性:show columns from tableName;
- J. H/ I# z" k9 m X1 u 建立数据库:source fileName.txt;
% i7 Z8 H) @2 @2 d% f: V9 R, m 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;& ~0 ~! ?3 m9 y; \0 k- A" ~1 ^
增加一个字段:alter table tabelName add column fieldName dateType;& y' m8 ]6 T, @" ?3 L! A
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
4 D/ J R4 [0 q6 t' O9 @5 I 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;* \: a9 {3 e+ j% l. u' q1 x
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";6 K& q9 E* b* w$ l. g( g8 X
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
- ]9 T( [) [7 g/ D/ V3 L 查询时间:select now();
: ?6 _8 m8 K0 s _ 查询当前用户:select user();
' ^+ d0 J6 F0 T1 e0 @* S 查询数据库版本:select version();# H' O Z7 r1 A1 j
查询当前使用的数据库:select database();
- z! ?0 J8 H& ]& `& n& }- X % E6 Q4 O Y6 ` B, c0 Z
1、删除student_course数据库中的students数据表:
% H3 u/ A3 e- ~$ c! ]. ^0 F rm -f student_course/students.*
4 M4 m) W: D" C/ d& O( N& W
3 @; b" c- ^8 k 2、备份数据库:(将数据库test备份)
7 ` s/ ~% S- O/ p( Y6 [ mysqldump -u root -p test>c:\test.txt) K4 n9 [% |/ N" m. O( n0 D
备份表格:(备份test数据库下的mytable表格)
+ u; }! _% z F' R v mysqldump -u root -p test mytable>c:\test.txt, s7 m: _5 \: ]$ i8 S
将备份数据导入到数据库:(导回test数据库)
- V; h' K, |, C) P D+ O! E mysql -u root -p test<c:\test.txt
2 G# @' ^* [8 U1 v/ [' b) Z6 p
6 r( T: I. S3 d: [8 Y; T" c 3、创建临时表:(建立临时表zengchao)
& O1 _; E7 o( L" t1 w0 Y; l create temporary table zengchao(name varchar(10));4 l" J, R: v1 p0 }* v
, Q$ G. X8 M9 L
4、创建表是先判断表是否存在
4 K& p8 |. T) b7 v- m: r- v4 Z R create table if not exists students(……);. k0 f q% }" t5 \# G7 j+ V
, L+ ~* G+ B/ F+ | 5、从已经有的表中复制表的结构, z0 l' `, L w# P6 ~
create table table2 select * from table1 where 1<>1;7 B6 c) v3 y; d- N
" Q! M+ W7 t. |
6、复制表
2 }- ~: D: g& Z. E create table table2 select * from table1;
9 f: Z) f% Q& z$ ?& P9 M$ A ' p8 ]2 @7 z3 b* J% K# Y
7、对表重新命名
4 C* w% x- G- ~/ ^* e% M alter table table1 rename as table2;; J7 V) J& p4 q1 b- ]! G. L+ K8 Q
- r. f- O' }0 {8 M0 e% m
8、修改列的类型
9 H9 o# b' o2 o9 U5 |- n6 O alter table table1 modify id int unsigned;//修改列id的类型为int unsigned+ y( O9 _, V+ O5 s* ^6 S
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
1 W1 s/ o3 X) h' T
! a2 G, F9 c5 h" s4 n3 g- X0 Y 9、创建索引9 L+ M6 ]1 e! G* e
alter table table1 add index ind_id (id);
% D. t1 r" N: x g" N1 g C create index ind_id on table1 (id);
1 k4 p" F- |, e/ T create unique index ind_id on table1 (id);//建立唯一性索引- g4 ^) Z) o7 ?9 ^% H. n V
& W% n1 G, |* E$ e2 `# M; O 10、删除索引
4 F' K- m/ E- a, y$ O3 }9 l7 b drop index idx_id on table1;
- A& w# Z, p R& H alter table table1 drop index ind_id;
# B& w* z4 h Q
% u7 T$ W4 e2 L' x: H- p 11、联合字符或者多个列(将列id与":"和列name和"="连接)
$ |( M9 N! r0 _! s+ S select concat(id,':',name,'=') from students;( E' M$ @8 G$ t' V" y
/ _$ `6 ?; ^, ^. W8 _5 H* T6 J 12、limit(选出10到20条)<第一个记录集的编号是0>2 W% z4 p" q' }4 M! Q
select * from students order by id limit 9,10;
6 `) t% v9 {0 a- H/ k
$ h8 O& l. k0 |4 }9 ]) h' D2 g 13、MySQL不支持的功能
+ c. A+ H3 R/ z& w: z 事务,视图,外键和引用完整性,存储过程和触发器! C! E3 ~ C, ?3 x. p
2 W- q- W2 o; H0 m; Z7 T- Q. _% `0 A
, |/ b' j [3 _ 14、MySQL会使用索引的操作符号1 l' d6 a( _* {* y3 g# ~
<,<=,>=,>,=,between,in,不带%或者_开头的like
: s9 ~5 C& T" u! |' D: {7 N6 q1 e , Q+ h/ H' z) b$ L7 }4 S3 a C% |
15、使用索引的缺点
3 m1 u8 K# |. ~( J% [ 1)减慢增删改数据的速度;/ }( ^5 }0 L; v6 r7 ~( h4 T6 I
2)占用磁盘空间;8 y0 ^9 ~( |+ ]# @. b7 B% W
3)增加查询优化器的负担;
. v6 V* r- \" }6 c2 G2 ?4 f' B 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案; Q9 ^1 g; j5 _# W5 ~0 h
; B5 r0 f8 ^7 v! } 16、分析索引效率- a( M3 ` D/ S1 t* I8 L, O& B
方法:在一般的SQL语句前加上explain;
. p/ i2 T' B. ^/ @* N- P+ {: J, a7 L 分析结果的含义:
8 N6 A- c% R: q$ L 1)table:表名;# A; ^$ i, D+ v
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
- r+ w# ^: i. x. j& [# M 3)possible_keys:查询可以利用的索引名;
3 M) K5 L F! y9 d1 j 4)key:实际使用的索引;
0 J4 K8 @; u3 C0 F; ?" H2 o 5)key_len:索引中被使用部分的长度(字节);
% a" C0 n& g$ q- q# e 6)ref:显示列名字或者"const"(不明白什么意思);/ p! k! c$ J1 L7 K
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;0 \7 F1 j4 {" b v9 d2 d
8)extra:MySQL的建议;
5 r5 n6 U, B& e! l" y& A - i: A7 c% r' m& z |* ^
17、使用较短的定长列
0 p( P' U. S: |# l8 Q% V9 n 1)尽可能使用较短的数据类型;# T$ ]# S0 @" a, D S& U
2)尽可能使用定长数据类型;
6 g. b @# r2 \ a)用char代替varchar,固定长度的数据处理比变长的快些;
- M4 M. S- r$ z& V: p b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;+ q7 O; U. W# P5 Y5 k+ T
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;! A% {7 ?* @. m
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
- t5 }) u! g! ]# P" q' p 6 Z* h- }0 ?0 `
18、使用not null和enum
3 P% T5 S6 R: |9 L6 V" U+ W; @; T- d/ F 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;" c. r! `' {8 V) Q$ q
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
7 }; Y$ s# H: I& m
* Y1 [# j N5 s6 x: v. x 19、使用optimize table
% r: e9 Q. S h- F) L* H 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;3 i3 t: ^- H% g& D8 q4 e
3 m( E. I' p! u" f8 K* W
20、使用procedure analyse()
* A0 `7 B0 v! c 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:$ ~# V0 z, Z5 Q( K0 {( K
select * from students procedure analyse();
: P M! G- k b2 Z( v3 y$ c# n select * from students procedure analyse(16,256);3 ~+ B( g# \6 u( F9 R. j% H
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;" y9 M: e- F. a% ?
* v, G' }. f. C
21、使用查询缓存
, s# q2 a, r" j$ [ 1)查询缓存的工作方式:
, _6 r, M) W" Q' G1 e+ D* }/ e 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。7 b' `- n2 Q. S1 Z, v$ ]
2)配置缓存参数:1 q& d* y1 j! N/ \. o# c/ ]- |6 n
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
4 M- o. Z+ Y, v \" r( k, D5 o5 I, S- c3 `4 W
22、调整硬件3 n9 g+ m1 A( t8 c
1)在机器上装更多的内存;" h/ @& E4 U. M4 \, \8 J
2)增加更快的硬盘以减少I/O等待时间;
5 P) t/ M3 R7 f6 z, u6 H 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;$ L8 p. u& f$ J4 B; V. D
3)在不同的物理硬盘设备上重新分配磁盘活动;9 s: G- x) I& C8 c/ i
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
) M1 F1 v- e1 B- S1 y7 M- E |