启动:net start mySql;
. d" u# O1 g0 r8 m: c) Z' b$ @ 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;. U( ^/ g. \( \4 M3 C: R. |
列出数据库:show databases;
. _3 v5 a+ c5 c$ J- d 选择数据库:use databaseName;
$ B! j5 X& o6 t 列出表格:show tables;9 {& J, ?2 w0 j$ a1 A3 N* K
显示表格列的属性:show columns from tableName;0 w5 R& y. V5 p8 ]8 C! }
建立数据库:source fileName.txt;
8 m# ^# C }9 B 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;, p' U9 E2 q' ]( N3 _7 `- n* D2 q: v$ [
增加一个字段:alter table tabelName add column fieldName dateType;
) @# z# q& j" x, ? 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
) C5 M; Q( F3 ~# u. B 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
5 U2 q/ J* U3 V& T. Y/ E$ t; k' L 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
3 j9 ?( P2 C' q8 f1 E" w 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
! l$ m1 d6 O4 N2 ?* c 查询时间:select now();0 @' J2 \ q" H" y. ]: A& o
查询当前用户:select user();0 {- S' ], r/ ^( g/ }7 t: g
查询数据库版本:select version();
0 m3 E' Q( T; q0 | 查询当前使用的数据库:select database();
T# ^% F" W1 q9 V! d0 K3 {: C
9 u" s( z6 v1 L 1、删除student_course数据库中的students数据表:
9 Y! ~6 c7 t" R3 h' [ rm -f student_course/students.*: _) Z+ ^; s% r
+ Y( ~7 F7 B9 e8 Z( _# o0 c0 g 2、备份数据库:(将数据库test备份); |9 _% y K: q3 e
mysqldump -u root -p test>c:\test.txt
! ^8 o0 X& j0 ~ 备份表格:(备份test数据库下的mytable表格); B7 | M) C( B$ ^/ j
mysqldump -u root -p test mytable>c:\test.txt0 }- {# y) P3 V! I. _ f) n5 L1 K* L
将备份数据导入到数据库:(导回test数据库)
. m& s8 [3 @. U- f8 v% H mysql -u root -p test<c:\test.txt' L! k& `& H' H/ ]$ {" a6 L
* M G$ x) I$ F8 Z# `, T 3、创建临时表:(建立临时表zengchao)
1 b0 M. f% ]& L( d/ A, I create temporary table zengchao(name varchar(10));
+ o7 `0 s$ U5 c8 c; p6 e 0 [1 y: ^" o" c y$ K
4、创建表是先判断表是否存在
. ?# X( G/ w J& M5 i! V$ W4 E# k create table if not exists students(……);
0 z' @7 `4 ~$ O2 D) T. a. E. ` ' C) {# f6 y. w8 Q- E, V
5、从已经有的表中复制表的结构* D! M1 G; v) u1 q/ u
create table table2 select * from table1 where 1<>1;! G6 ^% e9 _' r6 S( l/ E% U. e
) z, ]! ~" K f* f' ]$ h6 r s 6、复制表 P2 D; l7 c" ~% I3 k3 ?
create table table2 select * from table1;' B7 N* e) p" u# f/ e4 \- E; \
1 f R6 H* F. X3 {) q8 B3 Y 7、对表重新命名
- X; G5 c8 J; Y alter table table1 rename as table2;5 I3 I$ \ @7 G3 R
$ h0 V. `* s( h$ h' `! [7 ~. r% r
8、修改列的类型
2 b, u. x8 X; O1 ~* J" W alter table table1 modify id int unsigned;//修改列id的类型为int unsigned0 p) U0 s( |, U# Y1 \7 k3 {
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
7 `0 x* x/ c9 j! ]) R
+ U% b+ h5 g4 I 9、创建索引
* Z y' b! C) B3 R9 d& a* B; b alter table table1 add index ind_id (id);
: b& I) R# L6 @* Q' Q8 n; ?$ c7 _ create index ind_id on table1 (id);/ B5 Z1 S2 K2 {
create unique index ind_id on table1 (id);//建立唯一性索引( b/ h, x% U' R. W$ d0 L& U
; ?- i) O/ ?5 e3 @) \5 _
10、删除索引4 d' t8 X$ x# b
drop index idx_id on table1;
7 T% d1 B. ~) D2 @7 c# U9 [5 a: J alter table table1 drop index ind_id;, E6 d3 Z) h. p/ \8 T
1 c; w0 Q! q7 I1 D
11、联合字符或者多个列(将列id与":"和列name和"="连接)7 a2 E. N$ V2 i3 r: w) K4 N
select concat(id,':',name,'=') from students;
; O: @2 L$ [8 t+ k4 c + ?% y: d$ @6 l7 ]1 [9 s; }
12、limit(选出10到20条)<第一个记录集的编号是0># v# v5 p* Z( d" B" V6 B
select * from students order by id limit 9,10;! w3 [- u1 F6 ~
6 y. x* |- d6 I7 J) O. S 13、MySQL不支持的功能) o1 h Y/ h, w4 o2 W
事务,视图,外键和引用完整性,存储过程和触发器
3 j% g/ S0 F7 b1 F9 p) b
8 K( e- K e1 L- i9 H# B) V
% l7 b8 N3 H" l! O6 }/ j( t 14、MySQL会使用索引的操作符号5 a& c3 N8 M* e
<,<=,>=,>,=,between,in,不带%或者_开头的like3 _% S/ \% g) U0 \4 N$ Q( t6 n6 _- m
, I1 e+ L2 L9 k7 ` 15、使用索引的缺点
1 x, M- Z5 }4 b, T- I$ P6 T; t$ g; B 1)减慢增删改数据的速度;
# }8 V: x/ Q( X% |3 z 2)占用磁盘空间;
) A Q0 f8 @& H& V" j0 T) Y 3)增加查询优化器的负担;5 V; r& V5 L6 X& v8 ?4 ^$ R& ?
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;2 i4 k0 A& Z5 g: a6 T, O/ f5 L5 e/ v
! `$ m; ~/ w( L6 z( s% u3 w0 H H 16、分析索引效率
4 R6 ~, D% N+ M( B; t. C 方法:在一般的SQL语句前加上explain;6 `1 o! Z7 T( n' y+ ]8 l3 T
分析结果的含义:
9 h! ]+ j# E7 U# Y; j" h2 B 1)table:表名;# L* E3 S- I9 y' t4 }* N
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;* j1 p1 q4 `- W+ i% R+ g2 E, Q
3)possible_keys:查询可以利用的索引名;
- i8 S% ?1 Z8 |; d9 H, Q 4)key:实际使用的索引;- D. v2 e9 a$ L ~) f# @8 j) R8 ?
5)key_len:索引中被使用部分的长度(字节);, K5 n5 y% Y% _( v. r n1 @. A
6)ref:显示列名字或者"const"(不明白什么意思);
: O) W4 j7 ]" h: n2 L2 ~1 h 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;4 ^3 n5 ? o8 o! Y6 S6 X/ P
8)extra:MySQL的建议;
$ x' c8 Z& O( Y, b3 z$ ? ' ^& @6 g% N) T' }% n# V
17、使用较短的定长列# Z* G8 G. d* Q5 o& X
1)尽可能使用较短的数据类型;* X3 o: I4 j, |$ ` `
2)尽可能使用定长数据类型;
7 y" v" P `. r( I& M5 v. ^ a)用char代替varchar,固定长度的数据处理比变长的快些;
$ d6 Z n: k3 Q" I! J b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;$ x1 h! P/ m. Y$ L5 p, h
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;) u# P" C9 y. O$ |: i
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
+ @2 x: {8 m L" x
1 m T# @ l8 n+ P) X 18、使用not null和enum. t3 C. P2 R9 M6 ]! o0 i
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
4 M& p' w9 k% n1 N: B, k8 S& F8 M' K; G 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;: t8 P' W) u9 W. s% P: z
5 E# V" }) `) Q
19、使用optimize table
* p8 ]7 b% W6 D8 K4 H 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;2 N2 E; X7 ~7 A y3 l
! j! ]6 N2 \8 u# z3 L6 Y1 U: g 20、使用procedure analyse()5 j" j; F* d. R, \
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
0 o% t; a" }8 @3 [5 `: ` select * from students procedure analyse();0 v1 c% u8 H: F: m/ ~5 j
select * from students procedure analyse(16,256);
$ r7 L- @2 g {! _: G" E, B 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
; k6 W; a8 ~6 Y6 ^1 U6 ^" g4 d* X 3 O! |" m9 {* f5 i& r/ M8 B6 X7 [
21、使用查询缓存
; D9 p0 f8 {( H2 R0 Z6 M- X0 Y6 m 1)查询缓存的工作方式:4 n, w. _' J" {6 @* j4 m) \
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
/ h0 G+ { [7 U* L |6 ` 2)配置缓存参数:0 P: Q7 c) C: f4 D" G2 x* _) P! B
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
: g; m* V/ _- g* s8 I$ h& B
2 S+ m% q" @: z. F- p4 R0 y 22、调整硬件: p, ?4 n4 H8 N
1)在机器上装更多的内存;
* _& M; _0 n% s9 M! ^, t 2)增加更快的硬盘以减少I/O等待时间;
6 F: ^# b8 S& n& @9 W6 ^7 I 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;: _ P! A7 ]7 r: r# y$ U
3)在不同的物理硬盘设备上重新分配磁盘活动;: w$ L7 c; P8 t3 V
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。. W/ p% n5 t; q8 H! p2 o4 e
|