启动:net start mySql;
4 D, B4 u) V! b! G# e5 K; c* s5 B 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;' y0 i6 D( A2 ~/ N4 l4 _' ~6 l* e
列出数据库:show databases;
, |. F, _# X6 T/ Y; d 选择数据库:use databaseName;7 q, E2 m7 k# ?% t% L! N
列出表格:show tables;
1 v4 O1 }+ F) L/ T 显示表格列的属性:show columns from tableName;
5 x% {* U! B9 ?/ p 建立数据库:source fileName.txt;
: F# ], L9 l' @7 ?" C& O' S 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
6 h3 l3 k, ~2 W 增加一个字段:alter table tabelName add column fieldName dateType;* }$ I; A% Z8 Y q# ]
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
# J: Q# Z1 {* M4 F 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;, c. \: A+ E+ N3 X: F2 A8 `- F
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
# w" o8 k( p$ }. b1 X 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
1 ^3 u. J' N/ e I$ A 查询时间:select now();+ Q* \( C) w7 E( ]7 @
查询当前用户:select user();
/ t$ t. z! P; j0 H3 [, f4 Q 查询数据库版本:select version();* y2 M1 H& l2 s8 } E
查询当前使用的数据库:select database();( \0 d% v; a/ F5 T( D0 v* w
+ I1 G$ `8 A) P; e8 R
1、删除student_course数据库中的students数据表:
% d0 J( l ~% ]% E7 } rm -f student_course/students.*2 W3 j2 _; G8 g$ D7 j# L
+ s! \% ~5 e+ I7 @% W! g7 u
2、备份数据库:(将数据库test备份)# w3 o+ H9 ?0 z* O$ A0 o0 T0 N! u
mysqldump -u root -p test>c:\test.txt
F$ V" U) d+ |4 [ 备份表格:(备份test数据库下的mytable表格)- j$ D3 i" d: @3 G
mysqldump -u root -p test mytable>c:\test.txt
! N3 m- e, @) a" ~# O" l* F6 q 将备份数据导入到数据库:(导回test数据库)
+ ^2 ?5 v( ~& w0 L0 l% ? u mysql -u root -p test<c:\test.txt2 _0 q$ @3 d0 B2 E5 ?# n# |
8 x4 H0 }# L/ @; n 3、创建临时表:(建立临时表zengchao)
: R$ E5 }* u* } create temporary table zengchao(name varchar(10));
: Y2 c! J/ X* \8 w. Q ( q; o: d( }0 \, c( X G
4、创建表是先判断表是否存在
" _4 T$ V+ P5 r. O create table if not exists students(……);
3 \0 u2 b. G, B 9 P' b, |: h9 g/ \" \
5、从已经有的表中复制表的结构
; J% X9 ]0 H7 b5 w* J b create table table2 select * from table1 where 1<>1;3 m" ]1 T* [. k; A( c; O0 S
+ L9 @/ |1 U, S" g: B" a 6、复制表
s% J/ H, ^2 O/ n! z$ { create table table2 select * from table1;
2 _- x1 [- W7 y8 q
- O; @. ~# R! X- z7 K6 s( F 7、对表重新命名9 l5 y$ U: _+ [: a! q
alter table table1 rename as table2;* q) [: m+ L- D3 @& g1 h
- C) a" h* h0 c( k
8、修改列的类型
8 R( N2 }& U( ]) [7 L# \$ R alter table table1 modify id int unsigned;//修改列id的类型为int unsigned6 Z5 m# H1 M! c5 c
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
- `5 g; [. U; {: Y- U 6 V# l/ ~% L% i( B" L1 R, m, |* l! l) }
9、创建索引
# A# u. f- g1 x. I7 A2 v+ [ alter table table1 add index ind_id (id);
3 t+ T. d* J, I3 ~ create index ind_id on table1 (id);
* |9 f8 R( U. ^( G4 s* x/ A( D9 i create unique index ind_id on table1 (id);//建立唯一性索引
% |% f, h8 h* ?7 e! x/ j
. v O$ I0 U6 ?, X2 W; M 10、删除索引$ E8 N1 Q! l" d4 Z/ r
drop index idx_id on table1;
& k, N0 h- Y5 _ alter table table1 drop index ind_id;
2 s$ g3 c/ W9 R; L, H4 ]3 _
# ]7 q" @+ N1 N 11、联合字符或者多个列(将列id与":"和列name和"="连接)8 a; S B- i- N7 V' o( m
select concat(id,':',name,'=') from students;' u- J, g! A; k
# r$ U/ S1 B+ ~1 C8 q 12、limit(选出10到20条)<第一个记录集的编号是0>
; W! F/ t# k3 K |7 ^ select * from students order by id limit 9,10;% x9 }; m5 ]& u( s/ H
( u [* A, {% n' ?) t9 m 13、MySQL不支持的功能
: {5 P, b" G8 a4 d/ l: Y$ v" B 事务,视图,外键和引用完整性,存储过程和触发器: j( \( q( b0 F) R) g1 f/ E$ d6 y
( p9 U& O; [0 e
: w% C; X/ J, G
14、MySQL会使用索引的操作符号3 G0 H* v: l# s. }9 S8 O
<,<=,>=,>,=,between,in,不带%或者_开头的like/ M3 v9 p: h& b# h% }0 h% l" E9 B
$ a2 c4 H2 f; D- M2 |8 H: v$ A/ l 15、使用索引的缺点! n7 r: E7 N/ P* s4 ?9 T
1)减慢增删改数据的速度;
\ H! s5 n/ Y$ o8 C# _$ T# k 2)占用磁盘空间;; q6 H" J8 g$ W; ~
3)增加查询优化器的负担;
" @* z" }9 h0 [1 o! y 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;% ~0 K' E7 n& q$ V1 K I+ E2 H
, I% ]1 o: A5 Z4 g- U 16、分析索引效率
3 x. B5 Y2 u! d* Z# u 方法:在一般的SQL语句前加上explain;
. A4 q4 z5 Z- S$ C* o5 x 分析结果的含义:
+ P! ^0 D5 K$ Q/ u" M 1)table:表名;% I- Z w2 ~ w1 k3 n7 E* U
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;8 |+ ], W* g! S/ o5 G; }, W
3)possible_keys:查询可以利用的索引名;' \3 E" t* u; j9 I7 C
4)key:实际使用的索引;
5 }8 Z/ Z0 M* h5 I9 V3 ?- ]6 w 5)key_len:索引中被使用部分的长度(字节);
8 r$ T6 S9 _8 `( i2 A. R 6)ref:显示列名字或者"const"(不明白什么意思);
+ L( Z& P# _# Y) D& P4 @ 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
4 u% u* p# h0 z9 H2 E2 n7 Y 8)extra:MySQL的建议;- X% y! G4 J- F' N
+ C! s8 L: U$ r9 B: u 17、使用较短的定长列% P! |1 R+ O( A1 V& a
1)尽可能使用较短的数据类型;
9 ^5 K7 ]6 }: f9 }/ ]+ P* d 2)尽可能使用定长数据类型;
$ \% S: N! N K# Y' O" W4 A, G3 G9 H a)用char代替varchar,固定长度的数据处理比变长的快些;
% Y1 P/ G, d8 ]: v1 V0 A b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;; ]9 X( p+ b( ^+ X, ^0 a
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
4 j$ L6 c- A) | d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
/ T9 K4 A; i9 h7 `
& C2 i/ E; _ n' e! u' d 18、使用not null和enum M: g z# E- |# E4 I% r+ T7 F0 G
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
4 A) G6 @( f0 Z' H4 w7 _ 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;" `- h2 k4 \+ o3 v
' Q3 z9 L3 R H' O 19、使用optimize table
' J8 Z, k6 \ G# a8 b$ j 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;3 v0 h7 F" B0 r8 i( m2 D+ I
* F6 v0 I% M3 c# T
20、使用procedure analyse()
; H# T: a3 {: M 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:! @( K( f* M; J: b! I0 C i
select * from students procedure analyse();: u6 N) e$ ?/ H5 L: t# l2 F
select * from students procedure analyse(16,256);0 E9 P1 \5 P: h/ d
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
* ?+ ^- e |( Y: p$ [
+ i* a, Z$ r* [, q4 u& H% T 21、使用查询缓存' ?7 U6 A; v, `* C2 E5 O
1)查询缓存的工作方式:
. a: r. g; K; `4 P4 L 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。* [% T6 s* u1 r$ Q
2)配置缓存参数:3 }1 r Z5 u8 B8 J9 g% s0 [4 Q
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。% W& E# P( q+ c
- \, {9 k. K; F; U- l6 y! L 22、调整硬件
0 J- t/ u0 H4 d 1)在机器上装更多的内存;, V3 T, @ e4 g0 C
2)增加更快的硬盘以减少I/O等待时间;
% T9 Z9 ^/ H+ p; K9 C( u 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
; S+ P S& y9 x! }( z- A. G 3)在不同的物理硬盘设备上重新分配磁盘活动;; J% H- z( A; l+ V8 d: R. s$ _
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。! t2 m$ `& }( z* ^% p5 `0 B3 S
|