启动:net start mySql;
: u! O9 c' a. c, Y- ^2 y$ L9 Y6 v" ? 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
, z( h' h$ b8 ^* Z& z& { 列出数据库:show databases;3 |/ B) y; J r" z4 ^; }8 K7 }
选择数据库:use databaseName;% p0 L$ H* k1 ]; G. r
列出表格:show tables;
- P, F! H4 v! E# n1 g% M7 h1 x9 I 显示表格列的属性:show columns from tableName;
% q* P3 x% t: w# W" E# p 建立数据库:source fileName.txt;) O, X3 W ~5 r; H4 v
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
7 X: L! ?1 y7 ^0 N% d" n 增加一个字段:alter table tabelName add column fieldName dateType;/ c( z! G8 h* _' t5 g" v
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;! D8 s7 V) |& q! R/ B P5 {& ]1 r
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;* n, f9 j' E- J; }8 y
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
$ s% B; O( r; n* v 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
" e9 s* M+ z. z: I. e1 u$ |, L 查询时间:select now();) L. a+ I2 f( J" d. k
查询当前用户:select user();! s/ q) F7 B: {. o. A2 U. t
查询数据库版本:select version();3 k V5 Z3 |# B+ l" B( g0 I
查询当前使用的数据库:select database();! U9 l6 p& ^; ]; x
0 F9 a9 q0 p; T$ x- j) M( z 1、删除student_course数据库中的students数据表:6 k1 P/ D8 S0 S& y/ f
rm -f student_course/students.*2 C0 T) J. b+ b4 \: `+ U
; c3 Q# D5 e& A" C: H/ a 2、备份数据库:(将数据库test备份)' ~( j1 L1 c$ p
mysqldump -u root -p test>c:\test.txt" ]) a/ m' m$ f2 M8 Q
备份表格:(备份test数据库下的mytable表格)
# ~$ N; _$ V2 z mysqldump -u root -p test mytable>c:\test.txt
% K+ A9 w" c: c1 Z. T2 X; h' O/ u 将备份数据导入到数据库:(导回test数据库)/ u' K$ A- o, A O+ \
mysql -u root -p test<c:\test.txt1 r; Z; _& W- n* m' D
% [, R/ |6 n5 R# Y 3、创建临时表:(建立临时表zengchao)6 ~ `3 ^# S+ y% m" y2 a1 Q5 u
create temporary table zengchao(name varchar(10));
* e* p! _5 h1 Q 9 i9 I; b' p+ C+ ]. ]) x
4、创建表是先判断表是否存在
, }3 s7 ?# @3 i/ V9 \! R create table if not exists students(……);: Y2 n; X N0 \2 f
/ S# J4 s2 i3 b Q% u 5、从已经有的表中复制表的结构
8 C8 ]; T h1 S# y create table table2 select * from table1 where 1<>1;' R$ e' y2 V& m8 y- C q2 a
: O% P0 U, v1 b1 W
6、复制表" L. r/ \. E: r, c
create table table2 select * from table1;
8 z+ D0 Q) c* y5 y% K {" O' V
* ?0 H3 q! Q3 [% p, j 7、对表重新命名
/ b$ `5 u2 I9 Z' z9 ? alter table table1 rename as table2;2 a9 b+ C% n' A+ ]" O' J
5 X; g# x! P, x8 l$ @+ w# K 8、修改列的类型2 `9 a2 Y* b" F$ U' S
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned/ o/ ~! {$ B; @+ I
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned' y6 a8 U9 ~- t
8 T5 {3 }$ h! L" k# g" v' m 9、创建索引
2 r% H4 T; c2 I Y) ?# Z alter table table1 add index ind_id (id);& o# e; P, [1 `! ^" e! j% }$ \* s$ w
create index ind_id on table1 (id);6 q% }4 g, `: c8 ^; [2 o/ \
create unique index ind_id on table1 (id);//建立唯一性索引3 H3 Z6 ?" d# |4 j
, v+ S! u6 b; Y
10、删除索引! ]& ]& f7 P$ ~4 \5 m4 g
drop index idx_id on table1;, N8 `2 E4 n. {; e
alter table table1 drop index ind_id;* ]. {% @- s, ?4 I6 v
* D, T$ j8 V$ g. |$ Z5 d. Z 11、联合字符或者多个列(将列id与":"和列name和"="连接)
' n; G2 C3 r- }1 a select concat(id,':',name,'=') from students;, A7 z2 K' }! v% @
. M# x7 P$ U) w' ?! y! W/ X& B0 O
12、limit(选出10到20条)<第一个记录集的编号是0>+ z6 d/ ?9 G: d
select * from students order by id limit 9,10;' U) f5 G# D) {1 r. U) u' M
9 L i, \) L. {, a 13、MySQL不支持的功能
( X0 ^$ ]4 y. j 事务,视图,外键和引用完整性,存储过程和触发器
; h2 x$ ]3 g1 Z1 z
0 P. I& ~" V% K2 j- v " M5 x) {" }0 W$ z
14、MySQL会使用索引的操作符号6 Z; `+ }+ J* f( m% N. V, c
<,<=,>=,>,=,between,in,不带%或者_开头的like5 _: T9 M# c5 i4 H3 d0 A
/ _. d; |& x3 k0 H+ X1 E$ K 15、使用索引的缺点
# N, J Q$ I# W# D. f# W9 x9 B: g 1)减慢增删改数据的速度;
2 Q' Y1 m+ E9 a" Z/ O 2)占用磁盘空间;6 p3 `/ j" b6 l% ^
3)增加查询优化器的负担;6 {. e! r3 v# X( Z% ~4 D" m
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
# `& n& `6 Z3 k E& w: U5 \
# M7 w z9 a, s/ z* t 16、分析索引效率
& I" u* K! K7 x; W( \ 方法:在一般的SQL语句前加上explain;
7 [) F/ q8 P0 r5 ^5 E, O3 P 分析结果的含义:8 l! e1 A2 D! |" Y- m3 L9 |9 \; |' e0 j6 s
1)table:表名;
. B( Y+ k/ P& |1 F 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
; _0 H+ f4 S) g+ X3 L 3)possible_keys:查询可以利用的索引名;3 m1 C1 v9 n% Q% O w
4)key:实际使用的索引;: r; |5 Q2 a9 }* f* ~" e
5)key_len:索引中被使用部分的长度(字节);& v* {: @1 @! i& K! A- M
6)ref:显示列名字或者"const"(不明白什么意思);
: U& O0 s9 A: Z; _ 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
/ @' N \1 x- J) H7 [2 h+ D) | 8)extra:MySQL的建议;
0 t B5 |) ?! { # f$ v* H( l3 b7 I$ t
17、使用较短的定长列/ h; r6 t6 g. i9 ]
1)尽可能使用较短的数据类型;" H. \( e( t$ O8 X/ w2 i1 B) ^2 g
2)尽可能使用定长数据类型;
, g E7 ^# ~6 _3 K1 O- G a)用char代替varchar,固定长度的数据处理比变长的快些;
& ]; z9 p# I$ x b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
1 Y: Q% Y2 r: Y: b( ]7 b c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
5 K% K: ^/ u. F5 s, |' M, V/ n d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
t* P8 k+ x. q# r' |& H& R3 W ' o6 G4 e0 c1 p
18、使用not null和enum
' G2 |. Q7 U ^/ N/ J6 g5 j 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;4 O) [" W5 r( |; V5 r( k
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
! M& N- g* P- U3 _. f' _5 q
& l& R' U4 e. O/ d 19、使用optimize table& a/ d; O. y" z
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
. K& U/ q( `* u) M0 Y
: y" y) b, Q1 v" f9 J, Y* i' ] 20、使用procedure analyse()
2 \6 I. E' e4 t8 G2 H0 C& |! u 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:! W+ t. g5 d+ i* \2 `
select * from students procedure analyse();) n7 J4 I' p. w4 U# P
select * from students procedure analyse(16,256);& c& y/ H5 i$ H
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;9 o4 Q& t$ |4 g! \3 i, X
R8 b3 |: C: u1 b3 M W9 e" j 21、使用查询缓存
* ~$ f; [! a( k# w' ? 1)查询缓存的工作方式:- H1 m( {; y& @$ n. I6 j$ J1 C a
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。9 D! ^ f! G. Z$ ^" S$ }" x
2)配置缓存参数:
$ @" p- G4 |- G 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。0 U1 r) |4 Y9 o O% N _5 w3 b$ |
& v z5 C; z2 u- O 22、调整硬件
- p1 }+ h, a( l7 R" y" N# H, a5 o 1)在机器上装更多的内存;
2 J7 f( O. k& h 2)增加更快的硬盘以减少I/O等待时间;5 h% \& B' C% e
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
6 S6 x4 h! B- J% s/ h6 h+ \ 3)在不同的物理硬盘设备上重新分配磁盘活动;
9 q7 [. K% h( T( G5 V1 p, s; E 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
0 ~( }5 I- l' K" j f |