启动:net start mySql;
L$ ]; _; ~/ T( M- H. Z" ~1 i; T; _ 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
1 C( q m: u, [2 \* n 列出数据库:show databases;
8 e1 Z0 k& S, ^2 e# s$ C 选择数据库:use databaseName; a( a; U0 A3 J8 G
列出表格:show tables;
9 A$ w9 i5 ]* Y+ @6 O! `, m 显示表格列的属性:show columns from tableName;
: A2 R9 ?6 o7 |4 m; t6 ?; t 建立数据库:source fileName.txt;) ^" s0 [0 {$ f! d, a0 j" u
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
" `0 a: s3 a! f1 t) i 增加一个字段:alter table tabelName add column fieldName dateType;: J4 `) C! H) |2 @0 s
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;6 ?+ l: x+ M& |8 U, g. Y" D
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
1 k/ X) d" I* {7 L8 K ]4 j* j 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";! _; R) b4 `- [" D3 y8 O. B' j
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;' J2 I) Y( }# V C) ?' J7 a. O
查询时间:select now();5 W! G; S$ x, z: a* P+ E
查询当前用户:select user(); e/ k) a9 ?. t8 A: k: i% t3 t* l
查询数据库版本:select version();
# `* N- V6 X" i9 F: f1 H 查询当前使用的数据库:select database();
4 V7 g8 s5 F& A4 P7 Y( P6 Q( A' z
2 A) G- y4 R& ]3 M c5 ^ 1、删除student_course数据库中的students数据表:% w$ n# y7 j" E3 l q1 x5 [
rm -f student_course/students.*
% A- h7 N% f! r# `: b7 V ; [/ o, q6 g3 C
2、备份数据库:(将数据库test备份)
/ I2 ?0 R" P( n' k2 K( H% l mysqldump -u root -p test>c:\test.txt; ^# N) P3 i! l2 d' i5 |2 F
备份表格:(备份test数据库下的mytable表格)/ T( b( F8 u6 t S
mysqldump -u root -p test mytable>c:\test.txt
( a+ k" d2 b: U, g4 @ 将备份数据导入到数据库:(导回test数据库)
. M* |, H# c E: x mysql -u root -p test<c:\test.txt
g1 E8 v" n. J8 ^7 b+ N
5 X6 b% o8 S) V9 t% F3 w 3、创建临时表:(建立临时表zengchao)* H0 ?0 R; J+ }0 y
create temporary table zengchao(name varchar(10));! {$ `7 ~3 i* ]5 u4 _
$ [' A! E1 p: R, F/ J% J R; d4 f 4、创建表是先判断表是否存在7 n# S2 w7 B- r
create table if not exists students(……);
7 B7 ]0 @# `3 v. I& M
. v2 k, L& @# F P; c x7 g) z 5、从已经有的表中复制表的结构
; Y7 E; g4 W/ k create table table2 select * from table1 where 1<>1;
" |$ ]$ n/ ~& s1 B. Z
1 ?$ Z: ~ _( ^ 6、复制表, U6 K6 [* k; c6 S" g
create table table2 select * from table1;0 u9 z! w! T, C/ ], Z; R$ {
{4 o2 F8 Q% u* |9 E 7、对表重新命名8 I2 r0 x) x5 n+ s$ g$ ^$ ?
alter table table1 rename as table2;: H; o* Q/ \8 F3 K, d0 P9 }
2 r+ `& r j# g5 _! U! S2 ` 8、修改列的类型
% e7 i5 H4 i9 f/ B& p alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
1 c* q) F2 L2 J& U0 [ alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
' c' A4 |" S- E9 N* K+ I) Z0 P ) K7 Y, A7 H" V; K- \
9、创建索引
4 P# V" d" U' P5 L. K2 n alter table table1 add index ind_id (id);# U1 G( Q7 ] g* z( B
create index ind_id on table1 (id);- o$ O* C* ~) F* u t, w0 f, {) Q
create unique index ind_id on table1 (id);//建立唯一性索引+ \$ i, {$ L$ I( b& [& q
' Z% [; S# F8 b. U2 J& z) B 10、删除索引, F0 q q1 y( _' q B1 B
drop index idx_id on table1;2 J- @3 s `2 y& k8 X' E& |
alter table table1 drop index ind_id;
1 S% q3 w! K. C2 ~ # g# v+ ^; n* D' b: C b
11、联合字符或者多个列(将列id与":"和列name和"="连接)
: W+ Z% y% ?3 O8 X: g select concat(id,':',name,'=') from students;
7 P* N& c- K( |8 _' j- y6 L # x* n' b( {. d, N1 s" V& A A
12、limit(选出10到20条)<第一个记录集的编号是0>
D# A n6 F( X. T; D" ^, m select * from students order by id limit 9,10;0 h5 {! Z. V, z O. X, k
, T, e3 V. N' s& W4 p3 E+ T
13、MySQL不支持的功能
5 ~" j$ b I: ]# E; Y5 ` 事务,视图,外键和引用完整性,存储过程和触发器/ Z9 K+ ^& M: _/ d( t
7 J* s& F. ^8 o* G
' E% R2 H# A+ Y6 f4 E
14、MySQL会使用索引的操作符号9 Z! ^* l! c! W) L O
<,<=,>=,>,=,between,in,不带%或者_开头的like9 r# {8 F$ Q% f$ b4 I$ E) V
9 q9 u( B" G5 A& k 15、使用索引的缺点
9 X6 H* c8 y9 Q9 \/ R% T* Z- ] 1)减慢增删改数据的速度;
* F% |( s" S$ q T6 q 2)占用磁盘空间;
# }% Z; ]7 B2 M1 w6 e) b+ q 3)增加查询优化器的负担;
4 z8 g' K2 ` Q+ p' r 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
4 O: O4 N# U. r8 D1 W0 `( b, \" K% C ! ^9 {& \0 E$ t% Z
16、分析索引效率
5 d$ X/ \6 u, M+ g1 w/ h+ A 方法:在一般的SQL语句前加上explain;
! \) B+ P/ m u, ?( S 分析结果的含义: S1 ^: J' s( s
1)table:表名;$ n/ w/ y) t/ E
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;( e( H: p" s% r
3)possible_keys:查询可以利用的索引名;, K) X2 N( p0 [1 n/ Q0 U1 Q
4)key:实际使用的索引;6 O0 R0 Q/ c. ^4 b: W6 O
5)key_len:索引中被使用部分的长度(字节);! C5 g& z1 T7 m/ {- l, K4 K0 u
6)ref:显示列名字或者"const"(不明白什么意思);) Q2 ~" y3 W. i& m* t. E7 ]
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
4 ]9 `- _$ `/ h: @, p8 ` 8)extra:MySQL的建议;9 G9 N$ {) H' T$ D' {
* r, N5 ^2 m; r# \ 17、使用较短的定长列
- ?1 F' S, W1 w1 }( N 1)尽可能使用较短的数据类型;
+ b" k3 r2 T% a6 I+ I! i+ w0 T 2)尽可能使用定长数据类型;3 n, J" H+ E q4 _; R# G
a)用char代替varchar,固定长度的数据处理比变长的快些;
" d- Z( V( H# n8 ? b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* t% |: L) c! l# r2 }: c- `7 E c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
1 N6 H! _# [$ C, ?7 N d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
: c$ O# j" |/ c! r 5 Z6 v$ N; T0 @1 K2 j; ~) B
18、使用not null和enum
- l# z3 f5 |* i 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
, _: \1 j" r$ }% d 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;& {" f+ V5 |- r- }
8 d' h; y6 j0 _' `& H9 f: q
19、使用optimize table
# {& w: V0 i9 M& P! r 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
1 W* U$ w# o6 i" G
& P$ E* T- ^+ V5 a0 O 20、使用procedure analyse()7 P- o" X! x; v
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
& @# M) h/ s8 c9 p' m select * from students procedure analyse();
7 {8 A: X% `6 B* ^( I select * from students procedure analyse(16,256);
. b: } q- @, @" x" L 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
5 a, F, r. v+ O, p' L+ D2 A, \6 }
% K4 j7 u7 ?& F5 [ 21、使用查询缓存
2 j/ b1 H" w+ s# Z( y" ]0 ? 1)查询缓存的工作方式:% k% [3 w9 k( L( u; D9 x
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
7 a" p& J% x5 I' D9 Q2 |. V 2)配置缓存参数:) Q6 l [- t7 k( c! ?: k. y
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。5 P" W0 n7 | ^4 G% ^/ `- ^3 m
7 S& c) C$ R; a# l- T2 T 22、调整硬件+ {7 A: i, c4 {+ r$ p. U) m, L3 |
1)在机器上装更多的内存;) y' V5 v/ p, y" \3 E# N6 t
2)增加更快的硬盘以减少I/O等待时间;
' B3 a4 C5 _% u; S; i5 O# O1 R 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;4 h% s1 l. T' C" ^4 `. r: P, {
3)在不同的物理硬盘设备上重新分配磁盘活动; H9 @/ N# J3 }4 W& [
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。; E& Q! J. E0 v+ {& Q9 m" e/ g7 M2 b
|