启动:net start mySql;
" m8 w6 k, |/ ^$ h, q. ~ 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;; n( V/ z8 O+ W4 R
列出数据库:show databases;
0 ?0 }. Y. ^9 o6 e1 ]9 o 选择数据库:use databaseName;# E# J' F: }7 B8 h
列出表格:show tables;
: j: h5 l1 Z) p" B 显示表格列的属性:show columns from tableName;
% K7 P/ M6 r# q: w U5 S% | 建立数据库:source fileName.txt;+ n" D) P; s' r9 L0 |& B8 Q; T
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
5 S! m! x# G0 L 增加一个字段:alter table tabelName add column fieldName dateType;) Y! o" u1 `& O- Y, ~8 @: U
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;( Y+ F1 ^( Y( @6 n, J, k: e
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
9 p2 M" Y! p _1 r! c! n/ [ 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";; A0 a! A% B( S3 O! P6 @- D
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;- `; \& T9 {# F: @0 Y1 Z8 V- ~
查询时间:select now();5 {9 H v) [# c- ?; m0 e3 F
查询当前用户:select user();
4 z5 Q" S. l; T/ r 查询数据库版本:select version();
$ R( y j! i# |& p+ w 查询当前使用的数据库:select database();1 U/ N/ f+ ~ g! p
* F6 P) P' w* j1 d 1、删除student_course数据库中的students数据表:
( P: Q/ H3 h+ M rm -f student_course/students.*% ?- E0 w, f+ \+ D. `- n) W9 Q
$ r+ }# c' Z( _5 P 2、备份数据库:(将数据库test备份)
# e2 t. ~( D" F, S0 h$ { mysqldump -u root -p test>c:\test.txt
. i5 k2 `, _1 |7 s6 P/ ] 备份表格:(备份test数据库下的mytable表格)
6 Z1 b% ?$ u8 I9 y mysqldump -u root -p test mytable>c:\test.txt: ]" |, {' u. N9 ?( o7 j9 ]
将备份数据导入到数据库:(导回test数据库)9 ]0 ?' g4 }0 C1 \* q6 E
mysql -u root -p test<c:\test.txt1 ^' F. M5 I* ?! x( I S
$ z% q: f# ^% z& y9 e% s
3、创建临时表:(建立临时表zengchao)3 d) f9 i, @4 f* e
create temporary table zengchao(name varchar(10));' r- l- j3 N# f' h/ Y1 \6 D& D
3 W1 M/ i4 W5 V3 x! S
4、创建表是先判断表是否存在
/ Q" {* ^) g! }; d5 s9 ]* e7 ]. _ create table if not exists students(……);
3 ]5 i, q* p- ?, c 2 q4 I, w' p7 {# ^- K- P& [; G
5、从已经有的表中复制表的结构
( n( }( c/ \+ ]) ^ create table table2 select * from table1 where 1<>1;
+ p, u) D0 y) N5 l( v4 L$ u! k 6 b2 y- S$ [, t$ T+ y$ y/ O
6、复制表0 z; `) Y- k, F6 ]
create table table2 select * from table1;7 f0 ~ o/ o4 J8 e/ {% ^
1 W# l2 t, i! A ?9 ~ 7、对表重新命名+ C0 X6 ?2 j$ w. L: _- N7 s! i8 |5 H
alter table table1 rename as table2;, k$ M; w( e: c. y; R" N
" Y1 d4 n0 T# h6 s/ H: q/ A& ? 8、修改列的类型 L3 x8 [7 D5 V! j; a1 k! ]
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
6 Y" _. f6 M5 A+ {# | alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned% l1 r/ i9 e( v O
( A% e3 e6 m( R# E4 s
9、创建索引+ J" C* H( t' g$ ], o
alter table table1 add index ind_id (id);
- a+ g* W8 p8 T/ j6 A create index ind_id on table1 (id);
4 A) b9 J) {& d0 T, D create unique index ind_id on table1 (id);//建立唯一性索引; @4 I! s+ y' r4 }* i
r& U2 t9 g" ?# l1 L$ j
10、删除索引1 V Q- [3 v% K( f" p
drop index idx_id on table1;
6 e+ l. _( W7 |( Z alter table table1 drop index ind_id;
7 N! b+ p( Z: }( H; O/ `0 X( C1 T
) S) e7 X4 U. d% S$ _ 11、联合字符或者多个列(将列id与":"和列name和"="连接)
; V' h8 d$ l- d# I8 F select concat(id,':',name,'=') from students;& X- _4 g& u* p
( g: J7 @" u3 p; w, e* i
12、limit(选出10到20条)<第一个记录集的编号是0>4 s U8 X% P( z7 {/ d2 \) Z3 w
select * from students order by id limit 9,10;- _. q: }) ?2 z0 {
% X. F" r* S/ J! \' [: ^) F
13、MySQL不支持的功能+ i2 M- [5 Z, G' N% B
事务,视图,外键和引用完整性,存储过程和触发器
5 @- L, t& o% z& t0 z2 }! S ' C* N5 L. k3 q6 O; E
1 X2 a* h% i( d8 T2 M
14、MySQL会使用索引的操作符号
% m M9 k1 G! Q+ O- s <,<=,>=,>,=,between,in,不带%或者_开头的like; {5 n2 c0 i. m, W. J% [: a a: `* L
2 A& O- V1 n0 _& X+ B
15、使用索引的缺点
) A* V5 N% s) D$ z2 s7 D 1)减慢增删改数据的速度;
# p: E# p( \4 B9 A {4 J# N 2)占用磁盘空间;
( c+ u( x4 U& P a3 _ 3)增加查询优化器的负担;. |+ { a0 M- V# @0 T( P0 i9 w
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
Q' a3 p9 G# D& \9 K . C+ C/ Q' h8 f" [
16、分析索引效率2 E3 E( ?( K# P8 C
方法:在一般的SQL语句前加上explain;5 c r1 Z5 V7 k" }, v* l2 i
分析结果的含义:
$ J3 b+ q! _7 X9 o6 t& k! w 1)table:表名;) _' U5 ]2 w X3 o+ f5 @& P! _
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
+ }, n4 z; m% |: v X 3)possible_keys:查询可以利用的索引名;
0 X, P$ Z3 U0 Q" r# k 4)key:实际使用的索引;
3 Z- H; ~% t$ C% |; C) M, s0 T 5)key_len:索引中被使用部分的长度(字节);
( P7 o, Z6 R. a 6)ref:显示列名字或者"const"(不明白什么意思);
6 F7 j) k6 t2 j) r% p 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
/ S/ i; o' f+ J# L3 Q. D, @; { 8)extra:MySQL的建议;
: `5 L* X5 k9 C6 N 8 D: ^" N8 e6 k' O! a
17、使用较短的定长列
6 H. E6 ~) ^8 L _6 b" b. l& W0 k. D 1)尽可能使用较短的数据类型;
6 \5 C6 k# q! T7 K9 m' f0 ] 2)尽可能使用定长数据类型;" o1 a# _, M3 D& G+ z, m' b" s4 j
a)用char代替varchar,固定长度的数据处理比变长的快些;
4 D# o5 C* ^# w1 ?8 M6 a! h! W4 C b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;9 Z+ x; t+ q3 C
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;0 X4 e, J# a. [8 {7 | A" D
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
2 t5 q8 X7 ^; ~" m: X9 | # x% @8 X1 `0 y- i& ^0 S4 y
18、使用not null和enum- k& o; n V3 J0 b+ A; ?
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
6 q1 n8 U! M% p8 @* d% N9 o 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
5 ]5 i9 p: j% T4 q: v7 z) i. L
$ o4 M* |$ R( |# t6 g. B 19、使用optimize table* V: T* Q' `* u. W1 }
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;$ @( C, Y( B4 B) y! w
1 `, {- L1 A B; v0 w% Y 20、使用procedure analyse()
6 R* L% E9 D2 b4 i% u 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
5 r5 U5 o9 H! r8 T( f/ z3 I select * from students procedure analyse();
1 S# d7 l( L, g% A: e7 o0 ] select * from students procedure analyse(16,256);7 A, e7 _1 e+ C# [
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;$ e* I) z0 b* [+ }* O- d, A
# {& Y. t9 ~0 C$ [ j' }
21、使用查询缓存' d8 }. K$ S4 | w. b
1)查询缓存的工作方式:5 G* }6 d7 T& o% h' u8 V
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。' l6 H' j; h" l# M# \
2)配置缓存参数:
) Z! C* A: s# Z1 x7 R 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。- l* k& v. i8 s. O3 b: ]
% P5 ?0 M, ^6 G" K' S4 u: G 22、调整硬件
4 r: v$ y5 k( |' i2 ^ 1)在机器上装更多的内存;
1 H# W' }8 y# Q- F/ M4 x1 j% [ 2)增加更快的硬盘以减少I/O等待时间;
; ]! w; X+ d" l 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
) E b. Q( O+ T- M; p" r 3)在不同的物理硬盘设备上重新分配磁盘活动;9 C" q0 B8 h1 T8 S
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& ]9 S( C: P/ Q7 }
|