启动:net start mySql;
: ]2 D6 R" M5 u' j3 Z 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
. b8 {( Q. \6 _8 n" B. z w 列出数据库:show databases;
. ?* l5 V5 l1 Y/ A/ B, o2 @ 选择数据库:use databaseName;
/ D8 g1 Z; S0 ^+ n 列出表格:show tables;. n" i; i: R/ l1 X8 }
显示表格列的属性:show columns from tableName;* n8 Q/ n* O9 G, ^/ ?
建立数据库:source fileName.txt;
. t9 K1 a' x; n# F 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;7 I* C; N2 \! F) E7 @0 q' J' J
增加一个字段:alter table tabelName add column fieldName dateType;9 N$ x8 M3 g' E" q
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;' Q( v _% x* s ^3 v
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
( ]& z! R1 B% T& n! U 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
. v ?$ S, u1 }3 P5 A0 N! l 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;$ s' x/ B% q- D+ N' F1 O
查询时间:select now();
9 p, N* \ i$ K2 p 查询当前用户:select user();1 r2 |- m4 J, p# o- J
查询数据库版本:select version();4 P7 k; {. t: W+ J; f7 @( ?, j
查询当前使用的数据库:select database();
) n1 o0 H4 i5 } 5 b0 G1 q) j* x3 G+ }* R8 D _
1、删除student_course数据库中的students数据表: m8 @9 v& u; R1 V5 X- r
rm -f student_course/students.*
2 b. Y% l" w) o1 \ ) [. T# ^1 }. v/ Y$ u
2、备份数据库:(将数据库test备份)0 N5 a# {0 f% _2 ~) U
mysqldump -u root -p test>c:\test.txt1 }' L) ?8 V p7 D& e
备份表格:(备份test数据库下的mytable表格)
, {$ i+ z% \3 q' Z, Y& G4 _3 S mysqldump -u root -p test mytable>c:\test.txt' [) @( I. a7 G$ ]2 s! I
将备份数据导入到数据库:(导回test数据库)
) A, m) f7 \: M4 G, s u mysql -u root -p test<c:\test.txt# t0 b) l3 Q( X* U! @4 _
1 b. c% l& ^! U" D 3、创建临时表:(建立临时表zengchao)+ @9 ^+ { m$ g2 e9 X) ~$ w
create temporary table zengchao(name varchar(10));
$ y X: f' X- l1 p& l' ~; \ 5 r5 t0 L# I# j6 T/ P' x, g" M3 P
4、创建表是先判断表是否存在% ?2 }* T+ C& ?
create table if not exists students(……);
! Q* q$ I" D5 B2 E 8 v* ^ H) i" L2 f% G( S
5、从已经有的表中复制表的结构
) S9 j9 ^& A6 f create table table2 select * from table1 where 1<>1;/ g$ Y2 k' K4 d. l2 K6 I9 L
/ f- `2 B0 I( h
6、复制表
% H/ J- _+ m4 ?, z5 }/ }: v% [ create table table2 select * from table1;
- y0 A; K$ \! s & p% G+ Z; E* m+ @2 P& \
7、对表重新命名
8 x! W; `. C( {' }8 T/ O$ p alter table table1 rename as table2; c! g& B. u, L: z p6 d n
" R& ~0 E8 W/ {! ` U# x: w 8、修改列的类型
) I5 z9 o0 P3 Z Q4 y9 A3 c, M alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
1 S" U" g7 U9 m8 [5 Z) `+ p1 ?( U alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
3 q Y9 E# G3 t/ t c! V5 a7 c* s : ~5 q3 z8 n2 C; [0 a+ w7 Z
9、创建索引% u2 d9 b! {! A. H# N- w
alter table table1 add index ind_id (id);" V* ]3 e u, G) ?
create index ind_id on table1 (id);
# y) S5 b* {0 c$ c; S" n1 }$ U! Y create unique index ind_id on table1 (id);//建立唯一性索引 b* K7 J+ M; V8 y' I' L8 c' ^
- t2 Z8 K4 X3 m% p% x
10、删除索引3 Z/ N) z3 g) v1 X; H _
drop index idx_id on table1;% q, u0 q6 z/ G0 a
alter table table1 drop index ind_id;% K+ A) F, Y- s% F$ X L8 r
6 @) V( ]' m8 Y+ p( d, C
11、联合字符或者多个列(将列id与":"和列name和"="连接). g) Q& I1 H0 ?2 w0 r, l
select concat(id,':',name,'=') from students;
2 x4 Z* I( P: v" v0 N* x # H( x1 o, c$ e% g3 |1 t
12、limit(选出10到20条)<第一个记录集的编号是0>/ |# K s, {% c; B2 o5 {8 O
select * from students order by id limit 9,10;
& h( [* r; v5 n+ S) H! ^) {9 L
}4 P, L* N& P/ h& f 13、MySQL不支持的功能. n' i, S r# Q4 C# S/ m0 n2 ]
事务,视图,外键和引用完整性,存储过程和触发器1 J1 i2 S. m4 _8 C% w0 x
1 `0 v% B7 N! G; a9 R 5 H# }$ R. F8 E9 W2 J2 D' x" z) i
14、MySQL会使用索引的操作符号
$ v$ x" l/ m1 s5 j X- @4 t <,<=,>=,>,=,between,in,不带%或者_开头的like# U' j' A. r8 w0 \) e$ W1 ~
0 X6 O6 Q) c5 Y7 B4 l8 `: A 15、使用索引的缺点* b% r. b$ ]4 b) P
1)减慢增删改数据的速度;
+ }3 `$ E6 y6 C3 C- D" { 2)占用磁盘空间;
$ l: k. [$ ~* S9 S' w/ i$ O 3)增加查询优化器的负担;! ]3 ~$ ~4 B' o1 j9 f, x( `
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
/ _) l: B6 |: S5 z# B
* H( K e+ ^. W9 W5 \ 16、分析索引效率2 x: l' }! R, K, r* {! b
方法:在一般的SQL语句前加上explain;
m5 u, q1 m' D/ a3 |4 e* k) o 分析结果的含义:
% g2 ^* r) \4 X 1)table:表名;
& @2 z7 @9 C/ T8 n+ b 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
* y" M4 T4 A) M4 Z 3)possible_keys:查询可以利用的索引名;; c! P0 _+ L# Y+ O1 P0 m
4)key:实际使用的索引;
^/ ^5 d# h# t7 A2 y! O# _" Z 5)key_len:索引中被使用部分的长度(字节);
9 e: x, o" l ]" I: u6 G. P% @ 6)ref:显示列名字或者"const"(不明白什么意思);6 F% i3 D9 _; @1 ]
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;8 Z+ g% ]$ S! A' ~, q+ b5 N' | r
8)extra:MySQL的建议;3 R8 }# G! p3 ?' ?4 D% O& |
1 q, Z6 T$ }" D, J: p" d G1 U/ ~ 17、使用较短的定长列$ _: T I8 ]& r
1)尽可能使用较短的数据类型;
- c) D6 s; `0 w 2)尽可能使用定长数据类型;
2 x; S8 n2 y) O! Q3 c+ _: J a)用char代替varchar,固定长度的数据处理比变长的快些;& M# o; k; g- |! q
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;. T: g; a' H( Z* g- v7 m$ t
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
* D+ N. o O4 W3 S d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 ^1 k$ @+ E2 i+ E+ h. v" t" P
) X9 f! ?+ F5 W
18、使用not null和enum8 i4 O% `0 y! s* K0 O% I# x
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! e! ^6 B, v+ o# e0 _ 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;+ i% d, f R( D/ U; |" e' J
$ \ _/ B0 Q* F* O! v: a 19、使用optimize table6 p/ q! W# {8 H2 g. _0 k( r
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;9 S' W. P: ?' [ V, r) H# r
( L3 n+ [/ Q# p; U- W5 q h7 R8 \7 C
20、使用procedure analyse()
2 \8 ^2 C( X' Q8 p1 f 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
" C3 J( L9 O- i( S4 L: w& X select * from students procedure analyse();
, K" H! r- {+ J1 @; O select * from students procedure analyse(16,256);2 N e! V- s' |. B9 o# ~
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;: q# ?# o5 F! F! {# l2 ~
* U3 m k) T) V- U# Z 21、使用查询缓存; r, c T: \6 Z% L$ F0 Q$ {
1)查询缓存的工作方式:
* F/ a. _0 @! f& G9 W 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
% x7 r+ b5 y! `. u1 }5 F 2)配置缓存参数:: j2 A& s2 { v* f2 |
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。' o7 x# ~# [& o* a$ o# W: m" F/ ?& b
* N0 G; ]! v/ J* X. O4 L 22、调整硬件, b5 ^% ^& c6 B* o# T
1)在机器上装更多的内存;) s' S0 C# g& U4 E, u. q @, t
2)增加更快的硬盘以减少I/O等待时间;# w5 F7 m3 `: K( a6 f
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
0 q8 ^% p. ~' |' ]5 E$ C 3)在不同的物理硬盘设备上重新分配磁盘活动; g+ `5 t2 `7 G0 N$ b4 ^6 q
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。1 C7 O1 M& E8 k+ v7 Y
|