启动:net start mySql;4 [) V' ]- E/ {6 J* G* I* Z
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
8 z8 X: i0 L# E! X! Z1 m2 H I 列出数据库:show databases;* y( \6 S4 K4 U9 ~% }6 Y1 x! I
选择数据库:use databaseName;
3 K$ D9 f c2 o& L; w) L* W/ F8 c* c 列出表格:show tables;. h* @- f# W% A9 E7 S- R: D
显示表格列的属性:show columns from tableName;
' l# f, W! S M 建立数据库:source fileName.txt;& f, c3 e: N/ d9 b4 T, s+ e
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
$ I& T2 p% \2 |2 Y I/ m 增加一个字段:alter table tabelName add column fieldName dateType;; F: h" m; Q2 @) M8 E
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;; f& G6 r5 `4 n$ v
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;4 E, j1 V7 @+ v4 Z/ e* H
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";& E9 _- J/ R3 |6 V
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;" l" } M4 z; j' N& L
查询时间:select now();
( V; E- n: ^4 g2 |% R, H+ B 查询当前用户:select user();/ W; I# L' l" j7 p: S
查询数据库版本:select version();
3 P U0 x4 j2 k" Y! W5 d 查询当前使用的数据库:select database();/ O+ G! N9 r* U" `) I# i
. ^2 o# m% P3 j" a( y2 U" t! s 1、删除student_course数据库中的students数据表:
2 j* E: O) X# y# y3 [" F: q rm -f student_course/students.*
% r* S; g& M/ r c* U" ^4 U$ S
$ @3 b3 o, B& H R% Y 2、备份数据库:(将数据库test备份)" X; Y" x0 d( |# O) W
mysqldump -u root -p test>c:\test.txt
( B$ y4 d- y; B/ r. w 备份表格:(备份test数据库下的mytable表格)9 T2 d; v" c0 n- g
mysqldump -u root -p test mytable>c:\test.txt
: \# n$ b5 W- v; x3 @( d2 e0 M 将备份数据导入到数据库:(导回test数据库)
+ G3 I# q9 }& \ ] mysql -u root -p test<c:\test.txt& ]5 o* z% z/ F( |
' s0 n0 p. W- K! V% _) A
3、创建临时表:(建立临时表zengchao)
) z4 i/ v8 \) ^# I: @- d( D* e create temporary table zengchao(name varchar(10));
. G: ~' s$ ]0 _/ Q9 }
) s$ u" C, D+ g% w 4、创建表是先判断表是否存在/ _6 z, w' M3 X
create table if not exists students(……);; q$ T5 e2 ?% O& G6 V! V3 U
8 F) }3 p% L9 m% `) K' n
5、从已经有的表中复制表的结构; S4 _) m. h* @
create table table2 select * from table1 where 1<>1;
$ t% A2 |1 n$ ]4 Q) g. X8 C
p' M$ G; i/ F4 X. O$ F2 ] 6、复制表
1 G" U7 i( ~/ U+ W `$ P0 m create table table2 select * from table1;
& H1 ^0 w+ T8 [/ M5 o
O6 t% ^ B; c7 X# p$ N 7、对表重新命名! E- b. q! ~& P- q# ]
alter table table1 rename as table2;" ?2 e( E2 f# z( O+ _1 f. F4 \9 T% T$ ~
8 V- M4 b9 q; F% Y# r, ` 8、修改列的类型
3 i/ n' a+ W; l; l% U' o3 t alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
) w9 R1 c0 Q1 ^7 R0 V" C: ? alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
+ c3 w' k& c6 I- R9 q: K: o # H1 F! [5 o2 f6 k- k& u! b
9、创建索引
3 N4 }3 g1 h: t1 `: q alter table table1 add index ind_id (id);: P! z/ d" F4 {6 D. l$ Q' o+ J. u. t
create index ind_id on table1 (id);8 g* o; o; J/ ~# w
create unique index ind_id on table1 (id);//建立唯一性索引+ M* x( d* z6 L9 O+ \8 _6 F: ~3 ]/ R
# r* A" }: C1 m1 ~8 e4 l 10、删除索引
1 |$ C- E3 q/ i- ^5 C- x' y. f+ h" ] drop index idx_id on table1;5 v+ e5 h: [3 v/ e
alter table table1 drop index ind_id;
# V% y. `2 t% S+ Z0 a$ K/ }2 w% w+ O 7 y: s& w2 c5 I0 n' B
11、联合字符或者多个列(将列id与":"和列name和"="连接)6 P+ k) o9 ?: S5 ?4 k
select concat(id,':',name,'=') from students;; w/ o: d# S1 I& J& K
1 M0 g) n! U2 c4 ^3 F 12、limit(选出10到20条)<第一个记录集的编号是0>
! {; \3 T" |( ?4 ]" p3 l1 Q select * from students order by id limit 9,10;) }6 X6 k! ^1 k* ]) U6 F( ^. [
' F: A. p0 k; N. m o5 [
13、MySQL不支持的功能
5 D- T( g! ?' W4 @ o s3 L4 x 事务,视图,外键和引用完整性,存储过程和触发器
1 C L( ^4 g q" x0 B* t
% X2 n; O3 }/ W6 P+ N. O
0 a( I' ?1 Z4 ?' v T 14、MySQL会使用索引的操作符号
- ?; }! z0 \1 T7 O. y4 e' s( _ <,<=,>=,>,=,between,in,不带%或者_开头的like. d1 T0 C0 k9 w
8 A, A. j K' I) l$ t; }3 Z
15、使用索引的缺点
7 D# P/ S* \, `1 |4 {4 r% u 1)减慢增删改数据的速度;- E" D7 {( n5 Q6 @ A
2)占用磁盘空间;
) ` M% P3 I; D' b' Y) {7 G+ u 3)增加查询优化器的负担;3 p0 c% _' g9 M# k; Y
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
6 l- G# u/ i3 O ! v ]9 _% }' F$ x7 C9 ?
16、分析索引效率
: a* ^4 v9 Z: s( f0 w, ~0 G 方法:在一般的SQL语句前加上explain;
2 w$ X0 u% b6 }- u% S 分析结果的含义:
: `5 a* y/ v9 t 1)table:表名;
9 a9 P& J3 Z2 x$ e3 q ` 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
7 U( b. N, C' u$ C5 H; M 3)possible_keys:查询可以利用的索引名;
5 a0 H+ p0 y/ @$ C 4)key:实际使用的索引;
) Y9 B3 x$ ^2 V% q y 5)key_len:索引中被使用部分的长度(字节);
$ q* F0 | I* Z$ D( \, G; y 6)ref:显示列名字或者"const"(不明白什么意思);1 g5 S. r! R9 D4 z9 L4 M
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;1 ~0 v7 A% K: N; O* Y# g
8)extra:MySQL的建议;7 {, T' P- r6 {2 p- J/ d3 z' Z
$ N$ k5 _. [$ p
17、使用较短的定长列! [+ h* q+ j7 A. l" c& v' B0 F' [2 ^
1)尽可能使用较短的数据类型;
# n: k/ F/ e! E3 r$ T 2)尽可能使用定长数据类型;
, Y- n$ R( L$ a; b) k a)用char代替varchar,固定长度的数据处理比变长的快些;
' G) l0 w) A" Z8 _$ o7 S b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;2 ]& |! l: x1 N: Q B/ O
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;! \( l! v9 ^7 G o" c" E# E* L
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 o1 h& s0 p) f8 J2 ~8 }2 e
# _% h* \) S0 _
18、使用not null和enum
. d1 ~0 b5 y3 l1 K% N3 Z& Z 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
. \1 l I0 _3 E( u$ p1 l1 n$ b 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;" V1 b9 V- F( Y7 ]5 N% P3 }
5 e0 O; `, z# o$ |, D7 X 19、使用optimize table2 R) J& q4 n3 s
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
1 C4 k3 v7 Z0 q- _* }; x" Z ' o, c/ W! T4 Z- K# V6 M2 W X1 G: I
20、使用procedure analyse()8 I: ?2 z: D- t) u5 w- l( I0 l1 j* d
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
% j U% V% E' R* A select * from students procedure analyse();
l1 {3 W$ ~" ?: t. U$ B0 q select * from students procedure analyse(16,256);
) A& G9 a9 _5 Q3 u+ R9 x 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;& c: A& }9 V' f% l6 j3 Y2 a
) J8 ~' K2 Q+ \" g7 q
21、使用查询缓存
9 g' p+ b0 ~9 a) v3 p; v0 p: v 1)查询缓存的工作方式:
: w$ d0 x" w4 }/ L( `& ~) U" x 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
* q" }3 n, y7 O+ x0 |" j 2)配置缓存参数:, H7 q) O6 z& _/ @) s
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
: v C5 ]+ _9 x- X# T( i! r 1 g5 D2 B1 v, m) p0 o7 C; ]
22、调整硬件1 |; g. U" b1 G7 |: @
1)在机器上装更多的内存;5 ?. {2 Q0 }0 U
2)增加更快的硬盘以减少I/O等待时间;
/ [9 ~% Q9 _6 s6 j1 Z/ z 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
( D( B" W* J, V 3)在不同的物理硬盘设备上重新分配磁盘活动;) S( }) V" n) `, ]/ [
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
0 e: F$ j3 _6 c) G- G3 o |