启动:net start mySql;
* D; v! k/ M. b 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
' s# B# b. t9 ^0 d 列出数据库:show databases;: c) q9 T& \3 Z3 ]" f( |" b
选择数据库:use databaseName;, z! o+ h1 U1 N
列出表格:show tables;
$ d/ v7 |6 ~" H2 T; } 显示表格列的属性:show columns from tableName;' `. g1 _# O3 ?2 C# A0 P. S
建立数据库:source fileName.txt;' C2 A. o7 C( o8 J, W
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;1 H( F7 f! ]; G4 B0 r
增加一个字段:alter table tabelName add column fieldName dateType;7 ?$ q. E) i" {! K0 m7 p& a4 J
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
* `" n) X$ J& } 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;' q, `) G! v. ~* G
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";$ P9 @8 f; Y+ q G
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;# p0 D& b2 E1 p
查询时间:select now();
4 V, z; G5 x" T; p6 q4 |7 o. K 查询当前用户:select user();; Z: r& x, m- Q/ Z5 ~ G/ ~
查询数据库版本:select version();% G/ y' y. j) @! }6 ?7 d0 Z, d
查询当前使用的数据库:select database();& Q0 |* y" e6 u+ O! W$ \: T
9 d4 k; y7 `1 u6 Z6 V2 G
1、删除student_course数据库中的students数据表:& |3 p0 f, k7 S
rm -f student_course/students.*/ f. |. k( ^( c, K; `! e. y: i
4 q( e- B$ |7 D Q8 t9 p 2、备份数据库:(将数据库test备份)
) _ X+ o2 d1 `( I2 q8 t mysqldump -u root -p test>c:\test.txt2 {# A! \6 e% W$ u( ~' F1 q
备份表格:(备份test数据库下的mytable表格)5 Z' w0 t" d; L- X* b( K
mysqldump -u root -p test mytable>c:\test.txt: l! o( ]/ q/ A+ `: m
将备份数据导入到数据库:(导回test数据库)5 d9 F4 b9 \) O" @3 _) j& u+ D
mysql -u root -p test<c:\test.txt8 f5 O7 u$ ]" L N- N @ ~
4 u t r. o; s
3、创建临时表:(建立临时表zengchao)
x/ \ }0 m# ?4 a9 u6 J create temporary table zengchao(name varchar(10));
; U1 \/ I+ I# M- J: X
; g# y4 Y$ {0 F7 _$ w: R+ x6 L" S 4、创建表是先判断表是否存在
+ H+ p8 y/ S/ X/ t0 j C. L create table if not exists students(……);
8 q0 b0 u3 P. e3 Z
! [: ]- B- u# ~ E8 C- M 5、从已经有的表中复制表的结构: J! z+ I- k6 `
create table table2 select * from table1 where 1<>1;, M- P F$ I& D8 {3 B
8 _3 N4 l. S D( F! q' w 6、复制表
/ ^1 q- k: r- K2 l7 _- o' m6 ^ create table table2 select * from table1;" M0 w( D) j' T
& {% L0 f* c. R L8 d 7、对表重新命名
5 a& n5 W2 K; h$ w; d alter table table1 rename as table2;. I3 H9 R* m/ X" I
{6 N) Z$ m0 _# g6 N! x7 G 8、修改列的类型) U% r9 t. M, y# E" o. O
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned: G! c& A8 G4 }
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned" {- f6 R. k3 b9 f) k
8 d9 m# e" [- \6 R0 c 9、创建索引% ]9 {- v+ T+ ~0 J. E
alter table table1 add index ind_id (id);3 U9 N4 F/ O c* R
create index ind_id on table1 (id);' Y# @* P( N0 q3 v4 \" h
create unique index ind_id on table1 (id);//建立唯一性索引' c- d3 X1 w7 l* @6 d
: e; q& a! r5 s
10、删除索引
: Q' O! s9 K$ W( k drop index idx_id on table1;! a; s( m9 v6 G4 u# h! P6 a* X# M
alter table table1 drop index ind_id;( [7 K# [0 ?0 U+ a
9 E& R. w$ e) x; q* s' } 11、联合字符或者多个列(将列id与":"和列name和"="连接)( r. h6 o4 E2 e4 J
select concat(id,':',name,'=') from students;
" S* }% x7 h& F' m4 E
9 T" \: L( P% ]! }3 }, q 12、limit(选出10到20条)<第一个记录集的编号是0>
. T& z: @5 s' r select * from students order by id limit 9,10;) \$ e' E* B- U$ @
8 }- {2 B2 y7 @9 c1 y5 A/ K4 W
13、MySQL不支持的功能
1 Y" {# k( p0 m; z# }: V) k; h 事务,视图,外键和引用完整性,存储过程和触发器5 G" K7 d1 U+ S- W" [/ e2 g
& W4 V1 x" U( e/ p. Q( y) d
' a. Q8 F0 y8 E/ `- I/ k; o4 E5 y 14、MySQL会使用索引的操作符号
. B1 y. t+ I0 s, R) l <,<=,>=,>,=,between,in,不带%或者_开头的like
" V- g) v0 C- Y _
" v5 x' A u- ]$ t) V! ?2 U5 r 15、使用索引的缺点
5 `* z5 H$ E2 l 1)减慢增删改数据的速度;
! z4 K3 J! i* z0 z 2)占用磁盘空间;
( Q! u; F/ z$ r) u 3)增加查询优化器的负担;) t; u, Q+ O: J7 B3 G
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;+ f3 P, [+ ]! c6 q! x- y
6 g3 V- @# |- D% x) |/ x9 H 16、分析索引效率
- Y! C" R* P; J [ X 方法:在一般的SQL语句前加上explain;
( v5 F: _5 N" x! k J$ L 分析结果的含义:: p) R+ u" n# P& x' I+ I7 \$ k
1)table:表名;
7 H8 K ~3 L! x7 A! k& k5 W f 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
! x R4 }; k( n3 ^7 X+ _1 I2 g 3)possible_keys:查询可以利用的索引名;* P4 c* q0 b* U R7 s
4)key:实际使用的索引;( W8 n9 i9 a# \- n5 Z
5)key_len:索引中被使用部分的长度(字节);
) a; `; m5 G$ D( t$ c 6)ref:显示列名字或者"const"(不明白什么意思);
7 Q/ }8 W! u$ p 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;/ W- z2 h$ |8 f# ?: c z
8)extra:MySQL的建议;& m4 c D0 @' C2 S9 {0 {
( `4 {7 I4 N0 O2 `- D
17、使用较短的定长列
1 D/ f, d' v8 p8 t6 l2 M 1)尽可能使用较短的数据类型;% u7 ^3 m/ a! I$ B
2)尽可能使用定长数据类型;
& Z3 C7 v* _5 n. a, {. I b9 } a)用char代替varchar,固定长度的数据处理比变长的快些;5 q) F0 S( c7 N. U+ c, I
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;4 b9 V) ^! V; u) r) @* z
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
3 _: C- Q- m! ^% k. V d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;/ h* Q7 |* @4 Q6 _0 {2 I
1 q% Q; [6 q: |, ] \5 D- d& |
18、使用not null和enum% H# W1 p$ Y1 E% M& X
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! ?9 t8 ^) D5 T3 E7 p# ?% g 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;; `9 i9 E0 X4 e, @ Z3 L+ Y
. G+ X2 t- ?$ O; T& I
19、使用optimize table" ~, o! r2 k1 S1 D9 k- I/ g8 N, V+ q
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;5 ?4 N5 Q% {- I v; p7 X. c% S
% [: z2 y) G+ u: L 20、使用procedure analyse(), E# @% {6 w1 g/ D
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:4 j/ a: v+ a! L/ d9 g" ]
select * from students procedure analyse();
. W/ O) J) z( p select * from students procedure analyse(16,256);
- P2 l3 M }' H- ^3 U& [ 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
1 c/ ~* y3 c/ ?
, F( m; W4 j$ ^( @' d% c' y 21、使用查询缓存
4 N. I% S% Z- O. \0 r$ l 1)查询缓存的工作方式:# N7 {$ v( R; ?' v; `' X% a
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
% e, u- h4 d$ S0 }4 [! n 2)配置缓存参数:
" _7 F3 ?& d/ p! A 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
. }! c2 m' O4 [2 w1 k 2 v* d0 t1 i2 Z3 Y
22、调整硬件
# H0 C7 h# p, z, h- \2 ^ 1)在机器上装更多的内存;
8 I. s8 d% ?. G! }/ {6 Q$ {! w 2)增加更快的硬盘以减少I/O等待时间;
5 ]6 k& z; o& l: T1 X 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
/ s% M- H" d9 ]( g 3)在不同的物理硬盘设备上重新分配磁盘活动;
; Z$ H5 m. w( M2 ?* V' T7 a2 k 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
# ]& ~& @9 E) u+ J |