启动:net start mySql;
4 |$ f/ @; Y! \0 X 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
) h3 X* z7 a2 C0 y. ~0 B; X! `7 j9 ^( ^ 列出数据库:show databases;) d. H5 e# o7 Q
选择数据库:use databaseName;
2 R: J3 ?! D0 p) s; `/ R 列出表格:show tables;
! }$ t+ H' t) J" m& V5 i 显示表格列的属性:show columns from tableName;
( S2 i+ n# h+ K5 T4 b9 \/ P+ ?8 F 建立数据库:source fileName.txt;
$ g2 z, |6 k9 {& [* ~- T [3 y: w 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
0 u/ x, i A0 ?/ f 增加一个字段:alter table tabelName add column fieldName dateType;
/ C; W; O" M9 {1 x+ ^1 {4 a 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
5 U. k# |9 o' U* K4 {* Q 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;2 C" z) d3 l8 J0 ~2 ?
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
/ M1 R Q' a8 |$ o! ~& |) k: C 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;) I% D2 ^- V4 N* t( P7 `
查询时间:select now();1 V+ z# b% @( G% T8 b* f7 `/ [+ r
查询当前用户:select user();
1 o/ v2 L* V8 `: Y! Q 查询数据库版本:select version();' a6 i) X p9 M( Q+ |7 x
查询当前使用的数据库:select database();
2 L$ r" K$ S) j7 J / w9 ], d5 l4 E$ }; d0 Q3 j) X
1、删除student_course数据库中的students数据表:' w8 [1 z2 o# J9 Y+ z5 r2 d/ p
rm -f student_course/students.*% H6 N: e5 q/ ?$ b/ S0 N! |
0 z" ~2 H1 T1 w" B6 z
2、备份数据库:(将数据库test备份)
- G( Z2 M; i) K5 w1 Z mysqldump -u root -p test>c:\test.txt- K, k/ u2 I8 v4 R6 c; v' G
备份表格:(备份test数据库下的mytable表格): Q4 L* V @0 `" k2 D
mysqldump -u root -p test mytable>c:\test.txt
" {2 ?& m# i4 m' l- V' [2 z 将备份数据导入到数据库:(导回test数据库)( @# L- \! Y; q8 @
mysql -u root -p test<c:\test.txt
! r0 X! Y, v# ?7 d+ r1 W - O7 o7 s9 M$ o! h/ M
3、创建临时表:(建立临时表zengchao)
5 H5 q; I# u0 p: o create temporary table zengchao(name varchar(10));+ Y. ]" \0 K+ z8 H
# I! e4 r# x2 \1 ~3 i7 i" w" b9 d 4、创建表是先判断表是否存在
9 v+ @' w, c/ r3 w: m4 @ create table if not exists students(……);8 z3 c& g2 Z0 v. ~% H6 n R
: {- A9 {3 }- e0 q 5、从已经有的表中复制表的结构/ Y" V. O" J# g6 M2 c
create table table2 select * from table1 where 1<>1;
: Q7 W& P) Z' L : [+ Q1 j8 a/ j" ?$ F
6、复制表! g( y: `6 U& Z% [/ k1 ?
create table table2 select * from table1;
2 U+ p% h- J& B# D. G
1 u7 e7 K5 K. o' X 7、对表重新命名, E* T( D- ?" _+ Z' T8 E
alter table table1 rename as table2;7 Q8 l: K2 Q: W4 ^9 s- O; E5 P% o Y
# N' b' R3 ?" U* P7 e/ n
8、修改列的类型5 F) N" o# t r5 |) x; N& B7 `
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned! l/ t8 w- u* c* X" ?2 G
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned0 E2 X9 o$ ^: G3 ?, [- W& \
; A0 C/ h2 [- ?# R! q
9、创建索引
* h3 i6 N H0 A% \/ g) I) n2 G alter table table1 add index ind_id (id);
% N% K) v) L9 b6 T' O create index ind_id on table1 (id);* K& U7 @2 w* l- c) `) q& i
create unique index ind_id on table1 (id);//建立唯一性索引
2 _$ P$ @( j) d . P a- N) G0 |! V, V$ M7 z
10、删除索引
/ a A. _+ f2 q drop index idx_id on table1;/ c7 r9 v$ [7 Z9 ?7 ^: D
alter table table1 drop index ind_id;
/ T+ s0 J* u; t5 N 5 w5 x C R2 r# y \
11、联合字符或者多个列(将列id与":"和列name和"="连接)( C% M x/ l- L0 G
select concat(id,':',name,'=') from students;3 q: C( V% r8 q8 r
$ k- i h/ G. M R* s7 o* S
12、limit(选出10到20条)<第一个记录集的编号是0>. ~& n. B% l8 @! M- {
select * from students order by id limit 9,10;/ O2 n4 A6 q( i6 {2 ^7 o
# M' g9 z# a+ h. |8 ?
13、MySQL不支持的功能
! `9 A4 G! T+ M 事务,视图,外键和引用完整性,存储过程和触发器/ B* q7 ]/ d% R0 P# P
! z( O. H! C d/ l$ i+ H" _, s
+ f, k/ j5 O/ g( Z& f 14、MySQL会使用索引的操作符号
1 ]$ O6 C* G# Q: u6 Q) J) [ <,<=,>=,>,=,between,in,不带%或者_开头的like' D8 {+ P7 m! ]* L! e& ]" l0 A% d! S
! @" P J8 M# @
15、使用索引的缺点
' F" c4 @! Z! A8 O% I6 R5 a 1)减慢增删改数据的速度;
$ ]" M8 i b2 K 2)占用磁盘空间;8 } C, E1 m% U0 {( i
3)增加查询优化器的负担;
& f8 { s* p/ n 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
, D6 N7 \: Z. I1 L7 P, F 6 L9 i$ U; V- v
16、分析索引效率. c& J% A% S: p6 S6 \; ^
方法:在一般的SQL语句前加上explain;
- u/ ~# Q( ~4 h2 k. i 分析结果的含义:
0 R+ v1 M$ B* [6 M! b: `# N) w 1)table:表名;" R# H/ X! g0 V- P
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的; x. M% n3 t! Q
3)possible_keys:查询可以利用的索引名;5 d( X$ I a- W
4)key:实际使用的索引;% P: q9 Y' a9 P0 G8 @- n" X# Z5 o
5)key_len:索引中被使用部分的长度(字节);* H$ Z9 d; r, h5 f/ `
6)ref:显示列名字或者"const"(不明白什么意思);5 K0 x( `- O4 U2 y. o. B3 f
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;% o8 X2 l$ z" }$ K
8)extra:MySQL的建议;
) t. W8 {. g" _1 [ # R0 V+ ?) d! w7 m1 P
17、使用较短的定长列8 K# @" W7 F* o" K- ?( }8 H- m
1)尽可能使用较短的数据类型;
% P8 {; q5 b s 2)尽可能使用定长数据类型;
4 z2 N" B: ]6 g$ `+ Q1 S6 @" |! _) y. n a)用char代替varchar,固定长度的数据处理比变长的快些;
5 E h9 b3 o% U$ n b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;3 p3 |) d6 I% A# P3 m
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;: ~9 E* l& `/ D, h3 w8 d
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
# s* O" b, @1 ^1 b7 |! O# h * \7 t9 v9 k+ u5 L
18、使用not null和enum, x+ i; u$ x) @& E+ g, e' U$ D
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;) I$ T6 S/ r# o T: k) v4 h
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
) g! u' k( \& k" [$ J8 u# g* [* } 1 [" L ]: q# I" j b
19、使用optimize table
0 m. x" v# `" x% o 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
" t! D/ U: y4 @, L0 X1 U5 ^ : e3 ^7 R4 }# @4 g
20、使用procedure analyse()% I2 B% z& X8 _
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:* [, R1 [3 c. G5 x$ X% N
select * from students procedure analyse();5 ~0 k: L5 i+ L4 n6 }
select * from students procedure analyse(16,256);
" A) k' ~4 b0 K% w' z. | 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;6 Z N) {/ i0 B- f+ d
( ^! Q3 S% j5 Y/ T2 p* c( P \/ V 21、使用查询缓存1 M0 G9 r' {, O! x
1)查询缓存的工作方式:
. k( r$ u5 [/ d$ b9 B 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。4 C% o/ O" D; K& B
2)配置缓存参数:
% W! Y1 w6 h. z; f6 n- P- r 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。7 P+ C8 K8 B* z
# ` m& g- i( ^, J. D" r. k+ [ 22、调整硬件. |& r1 i5 N u0 L0 ^* ]
1)在机器上装更多的内存;: n, o+ n0 T0 N# v# P( j
2)增加更快的硬盘以减少I/O等待时间;
9 V8 B" ^1 y& _ 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;1 R' m/ R; `8 n! r+ n; Q4 \. A
3)在不同的物理硬盘设备上重新分配磁盘活动;1 {: P- D! T F* B! ^' J, X, C9 V3 y
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。* h# |8 v1 j$ _0 p" l+ V ]
|