启动:net start mySql;$ q$ w8 C# d7 O/ B( w
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
4 c0 E+ B" T' a- h9 ]2 \: e% n 列出数据库:show databases; P& t- t( L# c" Y6 U; s& ~0 T
选择数据库:use databaseName;! [6 X+ H: Z: @' R! i- g4 ^, w7 d
列出表格:show tables;5 _0 q1 j8 s: Z9 w
显示表格列的属性:show columns from tableName;
; C* s" b; D x" }9 F$ x 建立数据库:source fileName.txt;
% i( n5 g. m' D6 t 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
8 E+ v$ Y) y# J+ L. I& P; u8 f* o 增加一个字段:alter table tabelName add column fieldName dateType;# G0 \4 `- o. a7 c$ i0 \0 @/ M
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;) X7 L' R! I& ]- E$ l0 Q
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
5 a; a" N- K( S; c& w 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
s9 L- o( e; m" Q# y! P/ M/ U# q 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
6 L; W& ^; M8 O8 o 查询时间:select now();, c$ U! R0 _! `& I5 y
查询当前用户:select user();% V% I# U% ~# e
查询数据库版本:select version(); h2 V( |6 ~- c7 P' Z. s
查询当前使用的数据库:select database();
. T0 i+ k$ \4 X; u! r/ }+ J# l' y
" u1 V2 H; P7 r3 F) q/ X 1、删除student_course数据库中的students数据表:) s& m" S& R, D0 h d: H" m
rm -f student_course/students.*- `& }0 [8 {& Q. _0 ?- Q9 y% a
# c. `" [* N9 u4 ?, @$ t
2、备份数据库:(将数据库test备份)
1 b+ }5 ?1 G7 m( a$ P0 m mysqldump -u root -p test>c:\test.txt8 {1 E: d" A9 i4 m
备份表格:(备份test数据库下的mytable表格): A5 ]$ h4 a, w i# R
mysqldump -u root -p test mytable>c:\test.txt' I, ]$ ]. u6 t: H
将备份数据导入到数据库:(导回test数据库)
4 f3 b" `! w0 d mysql -u root -p test<c:\test.txt( y/ m! q. a; b
$ e g! ]; u: Z 3、创建临时表:(建立临时表zengchao)
0 B/ C9 Q& x# ? create temporary table zengchao(name varchar(10));% C0 ?% X4 h7 @5 P. _$ s
6 L# x$ Z$ j4 A5 b5 ^
4、创建表是先判断表是否存在
) f- s) w) x% Y# R. q; k& ? create table if not exists students(……);
5 ~8 A1 U4 l' `
M4 ~! L2 H8 h' O$ G 5、从已经有的表中复制表的结构. t) Z8 ~& D. g% A
create table table2 select * from table1 where 1<>1;5 u5 X9 W! D4 M* P
+ X; A$ E$ U" L& C n
6、复制表2 Q" G" w8 Z' L% b/ d o0 e) [
create table table2 select * from table1;
: T6 r- @% d! R# L' K% Y 0 u6 ?5 O. P# W0 ^1 X/ W
7、对表重新命名
2 j) J! X4 y: ]- m/ S! Y3 u alter table table1 rename as table2;
' `# W/ k1 d& ~, y0 M+ | 2 `/ X1 |: A" a( m- j4 y1 |. M% D
8、修改列的类型4 C% G& W+ g+ M3 M
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
% j2 x7 o0 A$ M4 ^+ K/ C8 \) A alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
3 g. M# X0 Y, y# Q% m) S. v* v
' z. |' D+ }& j7 } 9、创建索引
. X0 q7 S2 z- a* Y% n alter table table1 add index ind_id (id);
b9 i; Q' X M! x create index ind_id on table1 (id);
' t! Q, l! e' M k1 Y8 h create unique index ind_id on table1 (id);//建立唯一性索引
, {/ h, k/ N4 h5 M6 t / j4 q2 x% b$ y( A! m4 ]% f3 d& R
10、删除索引
' K: I+ W& g4 l2 [" g- \ drop index idx_id on table1;/ H9 n0 ?6 `5 |6 _5 o
alter table table1 drop index ind_id; [; S" P) N" t: Q2 i
$ _" T) N6 K; ~; g
11、联合字符或者多个列(将列id与":"和列name和"="连接)
_' N, }# r' v select concat(id,':',name,'=') from students;
& X8 S0 [# Q3 W" s6 I( r4 s& Z ) [* `9 m8 G6 B8 W/ {, L
12、limit(选出10到20条)<第一个记录集的编号是0>6 [" I, Q2 P: t/ f4 i8 d
select * from students order by id limit 9,10;; h' |/ M" E, b2 @5 E. O9 h6 s; S0 y
2 q; n1 H# c) j
13、MySQL不支持的功能; h G d) p( a/ _' b2 G5 u
事务,视图,外键和引用完整性,存储过程和触发器. C5 n* y, j2 ^3 s" c! Q
( l5 }" T/ v& @
* I% P: J% B- h- e5 F+ J. T4 @ 14、MySQL会使用索引的操作符号4 n2 o% ]; v! a
<,<=,>=,>,=,between,in,不带%或者_开头的like2 s5 G' p7 Y1 B8 l, {( F+ c
* t+ J: E% n7 m5 Z, M4 ~5 M
15、使用索引的缺点
3 T9 V: s" I: D- } 1)减慢增删改数据的速度;4 u; K4 C+ ^4 {) r8 }
2)占用磁盘空间;
5 [: {0 j1 X3 R7 a' y$ T7 R2 p7 w 3)增加查询优化器的负担;4 W( t& t7 w8 I- H" ^( Q, c( \" E
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;2 K; J2 L# h }" J2 ` j
% O' f- M! m# f# M. J, \ R
16、分析索引效率
" Z0 h5 ^- \4 A j! P% ~2 ~ 方法:在一般的SQL语句前加上explain;
) t2 U) J, x6 r: m 分析结果的含义:
! t- Q9 l9 P7 m7 {. p J/ a7 ? 1)table:表名;/ b- X( ]/ l$ F* s" G6 a
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;- }1 n+ Q" C; `* j( x2 L* R0 \
3)possible_keys:查询可以利用的索引名;
* {' ^5 {6 ^# X* ~) }$ J 4)key:实际使用的索引;& N8 S. l. w0 U$ _- B
5)key_len:索引中被使用部分的长度(字节);
: z' q: w4 D" X/ g& q* E6 @ 6)ref:显示列名字或者"const"(不明白什么意思);) f% E3 z. p; y! c4 s
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;7 l2 Y0 }9 ~' h& q7 k4 Y: m
8)extra:MySQL的建议;
7 ^, j. [( z! e& N# {, I
) l# s* j H& u. V h$ u0 v' m 17、使用较短的定长列
3 u. n) i# b0 l7 l& x 1)尽可能使用较短的数据类型;- B4 T2 ]. ?' Y* z# D! E" h+ M
2)尽可能使用定长数据类型;
: x" t8 ?3 i) t# q a)用char代替varchar,固定长度的数据处理比变长的快些;% o* n- m9 B9 B6 g% Q( C f
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;8 s* O! Y' N, f% Z, C! @' v
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;* \% p5 k8 j& G( p
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
! L: a$ _" E4 W) W; o$ S- F
5 u3 \7 n1 ~8 M8 v& ~; G 18、使用not null和enum
2 I* R' u. P4 j4 H 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
& G, E! Q, E( D 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;2 H+ S" j7 J7 [% L
8 i- b9 _! ~0 s+ h) b' r% O
19、使用optimize table3 a( k' e& }2 s7 _/ Z, a
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
5 m4 a+ r1 g6 k
0 Y/ W1 K% Z& T4 n( N% x- x& y 20、使用procedure analyse()
9 j0 f) ^0 P; L0 m7 G 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
$ _ p. w& e$ F! d6 \! s& p- n select * from students procedure analyse();8 e7 e: N% `* c4 [6 a0 i
select * from students procedure analyse(16,256);' `' F( _. F5 w* \7 c6 [
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
5 t, A r \9 a/ ^
, h; v! J# y2 |6 H" U+ F0 I/ V 21、使用查询缓存 X3 E) K) M G* J
1)查询缓存的工作方式:. \: M$ J1 r; j) I3 _" n
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。0 C7 Q8 h9 J ?& M' ] P
2)配置缓存参数:
" z2 Q# ?6 M0 H 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。9 a. {# q% Q5 T
. G- I3 }2 o; T. c' } 22、调整硬件
1 I* A& h* A* l 1)在机器上装更多的内存;( e3 T: W) D7 l
2)增加更快的硬盘以减少I/O等待时间;
8 ?8 X6 X# l% _7 `: `! _, S$ { 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
$ j" A* ~8 a$ ~" f- w2 U 3)在不同的物理硬盘设备上重新分配磁盘活动;
- x5 |) q+ y: x; }3 v/ O; N 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
& t$ }2 O8 V2 r9 c |