启动:net start mySql;
* N: w* w8 N7 p! \6 ? 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! y5 k/ p4 H" G7 [ 列出数据库:show databases;4 O; I: U0 h& u8 |! \ h' Z- K$ W) m
选择数据库:use databaseName;
& P% a& Q( g+ @ r# I 列出表格:show tables;
* H' ?+ c* ?& N V; E1 ~9 f# D 显示表格列的属性:show columns from tableName;# D' M0 l9 c5 y- k) e
建立数据库:source fileName.txt;( S0 Y5 E' a+ z5 _0 Z2 ~. F. [
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
# C9 i3 `- M) c7 [+ j 增加一个字段:alter table tabelName add column fieldName dateType;
m- D" Q' |% {# ^1 l& B 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;$ q, Q/ ]0 |9 \$ v& Y Y3 s
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
- n5 W' N3 K! {# K/ |; S3 q' r 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
# O% b1 R+ t" s' z/ j 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
% r1 Y5 S9 a' ?9 k4 s% ^9 I 查询时间:select now();$ k, q3 n; q4 \
查询当前用户:select user();
4 f/ j% D$ g! [ V: M4 w 查询数据库版本:select version();
# Q5 \# U& ] d9 d$ Q/ t& d% b9 w 查询当前使用的数据库:select database();6 Z5 s' `- @4 R/ T5 V0 r
5 J# {/ K/ I( S2 y7 ]3 J: }9 s 1、删除student_course数据库中的students数据表:: }3 Z! z, P5 s5 x. u' y
rm -f student_course/students.*
J' B/ m$ e6 G" ?$ y, N ; w3 T* u% k/ `9 C1 D; r' D( L
2、备份数据库:(将数据库test备份)
/ I/ O8 }7 I+ y! c; [( j% z2 } mysqldump -u root -p test>c:\test.txt
' v2 G* \- l3 C) {" Z 备份表格:(备份test数据库下的mytable表格)2 I4 B p' J) t2 m6 A7 L1 c
mysqldump -u root -p test mytable>c:\test.txt1 O3 c. t2 |. d8 B. ]
将备份数据导入到数据库:(导回test数据库)
2 b+ l7 U3 { m& D/ r( q mysql -u root -p test<c:\test.txt
9 f" V `0 y: j) z% |+ K* u $ h( L$ K6 }+ ~
3、创建临时表:(建立临时表zengchao)
( y: K0 Y3 w# k6 u create temporary table zengchao(name varchar(10));* u4 c: x7 U" B/ k; A& B$ @! ~
3 E' C0 }* c2 }# C8 d
4、创建表是先判断表是否存在3 @6 J8 C% w3 d
create table if not exists students(……);- D& U$ B* t& L# H, I& \! v: Z& g
6 [* V2 k* M" ^9 j2 ?$ y- t( \
5、从已经有的表中复制表的结构
/ v0 u( a! f! M% O* D create table table2 select * from table1 where 1<>1;
# o/ X3 i+ o6 W! t* W& ] D3 F 8 N& O# n; p' C+ c
6、复制表8 F' s6 X/ J5 j$ C, |: f1 V9 ^
create table table2 select * from table1;
4 d8 s# C. A/ R, H6 a
& O. l# ]( p1 ?: L9 y( w: w 7、对表重新命名& o% M) x" H q$ {" E% f
alter table table1 rename as table2;. M/ ~" _$ ]9 R; g, C
) I) z0 m6 }$ e 8、修改列的类型: I; B, d6 b! c4 N& j7 l7 u
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
% D! z0 d, |/ g9 P+ A7 j alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned% D- T {9 k8 E6 q( L, w
0 E: I/ J7 v0 ]6 {) n* M 9、创建索引 a0 ~- c# ]- j" v
alter table table1 add index ind_id (id);
6 e, L6 \" m) J8 b- B create index ind_id on table1 (id);. U; Y' b; F! L, f" _5 v4 A6 N4 f
create unique index ind_id on table1 (id);//建立唯一性索引( ^% ?4 K( b( D" x9 I5 X! k
. ~$ a+ X7 R* A* y8 H6 m) u" {
10、删除索引1 w) Q8 G. k, J0 y( t% D1 r
drop index idx_id on table1;
; o, n" T) V" f" A- v7 r alter table table1 drop index ind_id;: X5 q" K; G' H5 E# e6 A0 c
, h; z9 P# B/ s: @0 b" J( ^ 11、联合字符或者多个列(将列id与":"和列name和"="连接)
, Q" N$ p0 Y. b/ P* @$ O; h select concat(id,':',name,'=') from students;4 g8 y+ x' f# t9 n7 ?! z' K
" b/ f" q& z9 U7 a6 r$ O
12、limit(选出10到20条)<第一个记录集的编号是0>
\$ n' S' V. X7 z+ i4 F, U2 [ select * from students order by id limit 9,10;6 H `( s% i: U) ]. C
# q* e, p4 Q/ t! e+ A 13、MySQL不支持的功能
' M8 k8 ~, G `8 S# |6 R 事务,视图,外键和引用完整性,存储过程和触发器
$ D: R; w. x J) P" c& h" d. | ' N- ^1 u1 j; S: f5 k$ j9 F7 t
8 Y; h1 U+ Y/ e
14、MySQL会使用索引的操作符号. C) F* U& Y, M8 x& k" d& g9 t, W
<,<=,>=,>,=,between,in,不带%或者_开头的like
# K3 L: r+ J! {# k! i7 Q( |
+ `; P! [$ P0 z0 [+ e* h1 {+ w 15、使用索引的缺点) Z/ e _/ b* K. t8 J1 A
1)减慢增删改数据的速度;
0 p7 O2 m& m) J& l+ E$ B- T' S 2)占用磁盘空间;
. v9 \% |8 v! P 3)增加查询优化器的负担;
7 d' I0 H4 a& B3 D7 f3 z1 W" t) ~& o 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
/ v6 g4 l* [" E) k% K+ y! Q) r( M; Q' Z $ D7 O5 i+ O% n1 S
16、分析索引效率% g. [- t, f. X' `& X
方法:在一般的SQL语句前加上explain;6 }2 f6 _* K# g# P0 `) R8 @, i) n2 |
分析结果的含义:. Q x x/ A7 f9 ]2 x+ f+ t
1)table:表名;% F* r6 ~8 H. k; y
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
7 [1 x3 j3 X3 a 3)possible_keys:查询可以利用的索引名;* y- D& Q; W9 F$ q
4)key:实际使用的索引;
' J/ Q% ~/ y7 a3 Q) W 5)key_len:索引中被使用部分的长度(字节);
$ a1 ?# A0 f' Q5 Q4 V* [ 6)ref:显示列名字或者"const"(不明白什么意思);5 M8 n! }$ `6 X/ u
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;; x8 d0 B# X- k8 T g# n
8)extra:MySQL的建议;* _! X& i$ N- b' i
& G f) N3 x- J# S( X* A( f 17、使用较短的定长列$ m; e2 x; e+ Z+ `, g( Q
1)尽可能使用较短的数据类型;
" |0 {7 Q0 G& `: F 2)尽可能使用定长数据类型;& W4 b' O; N9 p {# S
a)用char代替varchar,固定长度的数据处理比变长的快些;" ?% K# t0 P7 }9 O3 e6 a% g
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
9 w& ~8 O' n( w9 ^# k. O7 T c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;; E; G% m: o9 J0 R
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
* i" Z- R3 @/ I* O7 h. d 6 R, _; G: z% W, G4 D3 L' p
18、使用not null和enum
, l- y% F d7 E# C9 G9 Z: d 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
$ A/ W, T, h4 ^( X# `* ?0 R1 c 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;. O2 m$ Q- s9 U* p
2 O& D/ y1 k/ X- S( @2 _* Z 19、使用optimize table2 Q4 t. q8 W6 H9 L
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
\7 G& b! ^& P2 [) N1 @# j
2 k" d7 [. O+ u \9 u' @ 20、使用procedure analyse(): `8 J6 Y4 @3 `& z( {/ I
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:+ t! k+ d0 H) o& P. K- {3 I
select * from students procedure analyse();
, W, d. o1 ]) c. M: ~' `) X select * from students procedure analyse(16,256);8 j; X6 e5 {" d) S0 r, j
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
6 ~* C& e6 V3 q9 [( C ; X; B1 ~1 J" D$ ^: L1 ?/ @
21、使用查询缓存( V+ h9 h; I. z8 T6 S% u
1)查询缓存的工作方式:
+ |5 _, Q9 |( F5 f$ U3 C 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
$ Z# v2 T q, _1 |9 {' Y& ] 2)配置缓存参数:+ }$ @1 |7 M* d( ^) n! {% `/ q5 c
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。/ ?8 ? }5 R: e1 W- _. L
$ }9 ~1 j1 A% h2 x 22、调整硬件
( C9 E1 W, N+ E! z' ~: g( S+ ~5 T 1)在机器上装更多的内存;, P2 U/ q* Y8 Q6 \
2)增加更快的硬盘以减少I/O等待时间;
. t& b. K8 f( J1 b 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
- W% L7 ^7 L9 N; F2 i. e 3)在不同的物理硬盘设备上重新分配磁盘活动;
0 C) g; W# `/ _- c& g! }: T- Y$ W' G7 ? 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。4 i2 K |/ ]3 M1 ^, p
|