启动:net start mySql;, ~8 X; g, X0 W! Y- g
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;" y7 u% }! a% d/ B) m
列出数据库:show databases;2 J4 H% Y& b: K& ^3 u3 P
选择数据库:use databaseName;7 X- X" ~. a3 q& c6 o
列出表格:show tables;; J! C- Z& W2 x
显示表格列的属性:show columns from tableName;
' e! ^7 o2 ~) l h% X 建立数据库:source fileName.txt;/ I0 f& K0 t. R4 M+ m
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
4 `3 X: u$ h0 S1 f" Z/ c; _ 增加一个字段:alter table tabelName add column fieldName dateType;5 j$ g( h* \9 S4 b! X
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;; N$ ^) r# Z a% ?# r) f3 J v
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
# U1 b. {3 _# b: G 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
8 L: }' x/ e8 o# t& N 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
/ ]* b8 L2 d3 x8 h 查询时间:select now();
0 L1 E3 O( j: J& T* n2 K( M* M# E 查询当前用户:select user();
, D' {# j* i% P+ |6 A 查询数据库版本:select version();1 _! R3 ]) @" `6 O
查询当前使用的数据库:select database();
8 b" n+ s8 i- L. ~1 K% _, A( k0 [7 f
% ~9 Y% |% \& y- u7 z( i 1、删除student_course数据库中的students数据表:1 {% k5 `* G! g5 n: H" t
rm -f student_course/students.*
8 m5 w% J' W+ @# _0 D
6 Z' R1 G, Z- R u& s3 G 2、备份数据库:(将数据库test备份): s7 ?, G. J4 U, D; p5 e2 S
mysqldump -u root -p test>c:\test.txt
6 c3 I2 m' R, o2 s3 q 备份表格:(备份test数据库下的mytable表格)! K# N& W" e5 E; v3 I+ f, E
mysqldump -u root -p test mytable>c:\test.txt
5 j* ]0 G$ a" }, } `- X' E6 M 将备份数据导入到数据库:(导回test数据库)4 m2 |# y/ [5 @% S, X
mysql -u root -p test<c:\test.txt: k' w0 r( i" J* L( t3 g
& S9 A' r! ?9 L) @% K$ `' T
3、创建临时表:(建立临时表zengchao)
8 F- Q4 _5 a3 D6 r) w5 W% d create temporary table zengchao(name varchar(10));) \. N/ f* e5 x
$ `2 E+ ]! e3 j/ F9 Q 4、创建表是先判断表是否存在
' c; R6 k6 G2 |+ ~! X+ P2 |3 a create table if not exists students(……);) R& D7 H$ ?5 C5 y4 H1 t9 k
# h6 N1 g" i9 \; V
5、从已经有的表中复制表的结构
7 R) Q. D4 b, z" ?5 j) a create table table2 select * from table1 where 1<>1;3 j) }) d. l3 L
3 H( }9 B# L' H4 ?4 |* _1 U. N0 D9 v- L 6、复制表
1 X4 V. v/ ^$ q: B: @" C5 { create table table2 select * from table1;
5 v; y; X1 V' X' y& Q" ~8 ? " q7 Y/ d3 z$ q0 \8 e4 X1 l
7、对表重新命名
0 \0 v- ?2 M n8 L alter table table1 rename as table2;: H) l( ?% e% ^. K
3 j9 u7 \% L0 c( S
8、修改列的类型
+ \' ]" u1 L" I! C, C9 s, ^+ S5 R alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
& @- _$ G2 `8 S% Y! T1 A I alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
6 b; T% y$ ~( g' {
. M4 t# ?) u: d* b- |7 b r1 B 9、创建索引
2 d& V1 v% R- m$ v7 I$ c* x, w! } alter table table1 add index ind_id (id);
3 n; f! Y' [- s* w$ d% p# z create index ind_id on table1 (id);
3 z! P: A/ H; V2 P* Q+ z; N create unique index ind_id on table1 (id);//建立唯一性索引$ K M, V! k1 _3 L$ B# K
3 y! U; S1 x+ ]
10、删除索引
1 F3 A5 V( b$ Q' Z* ^ drop index idx_id on table1;' u9 ^+ S- y' g* \; X+ R
alter table table1 drop index ind_id;) W4 D! M% i4 @
9 k h! i& b5 V; l9 {
11、联合字符或者多个列(将列id与":"和列name和"="连接)
% D2 E* q" n, m6 w# H- ]3 Q select concat(id,':',name,'=') from students;& P. d4 t: C4 G1 T
E* t. m! _3 X& s8 A; k 12、limit(选出10到20条)<第一个记录集的编号是0>4 ^7 x2 h/ M2 j/ V' _6 S
select * from students order by id limit 9,10;* ]) [3 B8 t8 U# b+ u0 S
1 J0 r+ e* q" s* _$ _ 13、MySQL不支持的功能
% a% U/ U* K9 b% r& ? 事务,视图,外键和引用完整性,存储过程和触发器- t+ \) Z# p4 _* c. I- w' O3 v
) a$ t2 @( d; \ ( H+ c$ c) S" A1 T; _8 g( D
14、MySQL会使用索引的操作符号* b4 A3 S& C$ C. r! O0 r2 Q: c
<,<=,>=,>,=,between,in,不带%或者_开头的like- D# H9 M# P% O1 G2 G x! [' r
* s' q8 X [, x. z
15、使用索引的缺点
* p/ w0 M7 F- e6 ^- `% V; |3 _ 1)减慢增删改数据的速度;$ s/ F: w' ?* i* |6 h a
2)占用磁盘空间;
6 `% j! ^. W0 Z5 ?- \! {; @) s; h 3)增加查询优化器的负担;8 Z% x* Z7 J/ m' d! m
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;1 X/ G+ N# N4 @2 E$ W) c
' O% t' o# I M# H* f- M7 y& `% Z 16、分析索引效率: W* C# a4 F3 H! \/ z. `5 t
方法:在一般的SQL语句前加上explain;
; j6 l' p* d0 n/ c" n, n6 q 分析结果的含义:
5 ?& D B& b% A$ T+ B 1)table:表名;8 V- J. _5 J# R$ M9 ^
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
: e9 O' B" c9 M# `, \4 l0 g. s 3)possible_keys:查询可以利用的索引名;
, Z2 F7 h0 v2 w 4)key:实际使用的索引;/ e6 L: C) C! O" [- r# ~6 ?
5)key_len:索引中被使用部分的长度(字节);* Z; G8 H" e) X" F/ G+ q m
6)ref:显示列名字或者"const"(不明白什么意思);
" E+ ^ b' F9 X: K$ f 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
0 Y( h' N( R7 I, L6 z# E 8)extra:MySQL的建议;
' E; @+ n& }- p+ D* W3 f , W' C f4 Y5 D4 W
17、使用较短的定长列
6 [8 X" ]9 ]; j9 b0 F 1)尽可能使用较短的数据类型;
8 w/ \" ^& Z. ^& i1 V. q 2)尽可能使用定长数据类型;
2 p" o# k$ V0 }) @ a)用char代替varchar,固定长度的数据处理比变长的快些;
1 O, j, f) U8 s7 _* F0 r. a0 o b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
8 {( a* W+ y: U8 P2 V, S c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
! |! [* D0 w- \2 b1 h+ @# D1 C/ \ d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
9 m1 `. M( t* g* n$ k' I! A
4 g+ D2 t% u& ]3 n! ~* l' C 18、使用not null和enum* j1 t; C2 T1 O. Y# g; ^# l
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;; t* q9 k7 u$ G
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;9 j% C9 [. @& H; q( A
' n. i( X; E! Y* [+ h1 T 19、使用optimize table
6 \9 K4 b5 o7 u# _* L7 c& P 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
. |% \( t" m9 ?! y2 } 2 Z! j6 |7 v; W$ [& a% ?, v A
20、使用procedure analyse()
) L& t4 s; ?8 A s 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:% s3 s z% _- [6 |! i- g7 d
select * from students procedure analyse();
7 y3 V4 y4 [, n& u2 N, | select * from students procedure analyse(16,256);
8 s; h& t0 z& R+ e 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
& P; Q! V6 K0 S8 L! }( D7 X/ j r * o8 T8 e/ c" @
21、使用查询缓存
- r. }! ?; i& A; b$ F: Z 1)查询缓存的工作方式:: D5 m7 t" r$ T; x
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
1 E! H" I3 I3 [( ^6 h 2)配置缓存参数:
- e+ T8 T* e$ b 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。! d0 f' X& ~+ |3 m( \
- I8 `0 o. S9 |3 a0 H$ j0 T8 ]4 t( L) @
22、调整硬件
. r, z0 A: O* Z+ E- I& z/ T 1)在机器上装更多的内存;
1 ?& W/ Y! Z' Y6 z$ X1 r9 { 2)增加更快的硬盘以减少I/O等待时间;
' A! H* E7 t) W \ S 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
& H3 |5 d8 ^4 i! b. I6 V/ O& V% X 3)在不同的物理硬盘设备上重新分配磁盘活动;, D: N% E8 @& N9 u
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。9 k6 |5 P+ q D6 ?$ }5 q
|