启动:net start mySql;
$ ~9 g5 i- V: ~ 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
: ~+ W% F. ?0 Y+ c: {# B 列出数据库:show databases;! H% o5 l" u- q" B% K7 F' {: G% r
选择数据库:use databaseName;
4 r, z+ K7 k) }( H5 C4 l 列出表格:show tables;: `8 S& u9 G9 j7 \
显示表格列的属性:show columns from tableName;6 C5 _' S$ f* O* a7 V4 P
建立数据库:source fileName.txt;; C! [8 o# M% L9 o
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
3 b" f) n" H. l8 M& H1 E) ]: Q1 b 增加一个字段:alter table tabelName add column fieldName dateType;
+ N8 N9 T. f8 G( P } 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
5 h( r: L/ B; T$ @0 E( Q1 E 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
9 ]% C9 a+ N! y- E* L! { 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";- e9 z+ Y8 y: t
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
" d) B I z' I6 A 查询时间:select now();; Z+ @3 o, e/ K8 V7 U2 R+ S
查询当前用户:select user();
9 \; [9 s" s! E$ Y 查询数据库版本:select version();
) [) @" ]: O) H4 U( k2 C" M 查询当前使用的数据库:select database();
o4 u& A- j& s* ~; D
7 r4 i9 h- {5 `# C# | 1、删除student_course数据库中的students数据表:1 D% H) ^6 D# S# K% f' }9 a
rm -f student_course/students.*& I8 y& U# g( P1 a2 ? N) ~
8 u3 ]: c/ }/ z g" j: M: t" Y9 X
2、备份数据库:(将数据库test备份)8 O }8 M' \/ G$ {3 _6 d m
mysqldump -u root -p test>c:\test.txt
* e! }. [& y/ } 备份表格:(备份test数据库下的mytable表格) i1 ^1 `5 n) e
mysqldump -u root -p test mytable>c:\test.txt$ b" U! p5 Y% E
将备份数据导入到数据库:(导回test数据库)3 V# x0 q8 l- X# e! g
mysql -u root -p test<c:\test.txt1 {# K# ?8 O- l& h0 r
, _* Z* f+ L0 \/ T
3、创建临时表:(建立临时表zengchao)
( [) w* I: l3 w4 L" ] [6 R$ e9 W create temporary table zengchao(name varchar(10));
( }$ t% W+ }- f9 b- K" d ' }! T* B( n( T
4、创建表是先判断表是否存在
( c* A6 i9 N' ~ create table if not exists students(……);& a. [! o% j* H' E/ B. \3 ^( Q# q
$ x5 e$ q* Z8 Z/ a3 }4 D4 \$ h5 _% D
5、从已经有的表中复制表的结构
- a8 W: u) l0 h create table table2 select * from table1 where 1<>1;* L" ^/ C$ n1 e
5 \* S9 }. l% E2 o. A( g) G
6、复制表
9 T+ t, @$ y$ s! H( o$ {1 P- i create table table2 select * from table1;
9 l9 E+ v( B& Q0 _5 [3 v: | 0 m% Q& Q6 B) }, o" Z
7、对表重新命名* I- @1 \. d- Q" ]7 y
alter table table1 rename as table2; k! @; O. V0 n2 `* y" V$ r9 I: P
+ D$ l2 `) Y) Z+ n* h6 a3 E- Z
8、修改列的类型
7 l P% j8 @. X# A alter table table1 modify id int unsigned;//修改列id的类型为int unsigned. H8 B& S0 K3 ^3 O
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned: O# Q; W* \4 z7 I- I# M, z
6 D; J. r6 h" g5 M0 Y" U8 p! T5 q/ p& V 9、创建索引) F3 j. T" H; f' L- N8 h$ |2 [) `
alter table table1 add index ind_id (id);
! K- o' |9 W: ^ create index ind_id on table1 (id);
2 C" H8 r4 y0 e# K8 ?" O create unique index ind_id on table1 (id);//建立唯一性索引
2 h' A3 R, a8 Y! D, E$ V9 I
8 x$ u, @4 M( l( |' Z: r 10、删除索引$ ?& |0 {% P, O" s( m& D5 S
drop index idx_id on table1;. x h1 q2 ?& V( w* Z" t
alter table table1 drop index ind_id;
" M6 I5 I$ [8 u5 T) t 4 O- ?) o; t/ w0 q
11、联合字符或者多个列(将列id与":"和列name和"="连接)% i# r6 C3 s# d- o. p1 Z) n: Z5 V
select concat(id,':',name,'=') from students;
* h- J3 f' ^! D
' p6 x! ?: }; Q" J3 ?/ Y 12、limit(选出10到20条)<第一个记录集的编号是0>; P& ~6 k" E6 ?% K% n& a8 J* i6 i& {
select * from students order by id limit 9,10;
2 J7 k+ u: _2 a5 Q2 x
- t' I- h# P+ [ W 13、MySQL不支持的功能
5 P. @; b, |/ q' _( k( b: b7 Z 事务,视图,外键和引用完整性,存储过程和触发器
* u/ S6 x! [0 V7 R' X9 b$ H
+ I) J; Q! u/ h' X4 T
# T. L0 d6 F O* `3 n 14、MySQL会使用索引的操作符号
% I- m5 i4 {& D( a: U <,<=,>=,>,=,between,in,不带%或者_开头的like0 W2 E+ {; u/ C
+ R; [5 B9 R2 @6 ?# L, z% y- U 15、使用索引的缺点
' R0 C, k6 b3 W8 t$ F4 e6 F 1)减慢增删改数据的速度;/ r1 h0 ]$ P1 e/ o
2)占用磁盘空间;4 M. B1 b9 {0 N7 g7 m" V& f& K# ]
3)增加查询优化器的负担;& l+ w9 A. p% r. t; }
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;5 |, G2 L% ^$ ?9 s0 E7 C( D
6 {+ |+ V5 L0 P2 G) C2 i 16、分析索引效率
, z9 N0 l- y7 e- _ 方法:在一般的SQL语句前加上explain;
, C) l1 ~) J/ P W3 I 分析结果的含义:) R7 L4 M4 x6 v2 L/ @
1)table:表名;
2 L* E* H0 m* e 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
3 d3 o! x; D1 ^ 3)possible_keys:查询可以利用的索引名;& b0 X$ t5 f( Q: }& f
4)key:实际使用的索引;
" Q ~6 a2 U. m( ]& x! k 5)key_len:索引中被使用部分的长度(字节);" o: X' c4 M. _+ H8 L1 `2 T. z+ u
6)ref:显示列名字或者"const"(不明白什么意思);
- E7 u# ~$ _- S% S6 g7 k5 { 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
$ p" z8 q* T& [7 {9 X" V, f 8)extra:MySQL的建议;
; L! w# W0 \: g% o" ` % A( P: ^+ }2 ?4 |3 ?
17、使用较短的定长列
. L+ M" j& @$ b( P; D0 ` 1)尽可能使用较短的数据类型;# R1 c1 |% \: `* a
2)尽可能使用定长数据类型;$ }* D5 _" _+ w; d
a)用char代替varchar,固定长度的数据处理比变长的快些;& J0 O2 A1 {, Q
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;5 w, Z* ]2 B1 s% U7 S: s- u9 _. o, I
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
8 w+ T' Q) t1 N& A5 y, J9 f3 @ d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
. \) P% u9 J2 G& k( a) h; p
~5 K5 g6 }1 }. J 18、使用not null和enum
0 ]7 y- O2 B& E. X6 ^$ a1 I' r4 _& P 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;3 x0 e! {# X3 i" b2 I! T& ^' o
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;0 q% a) s- d0 J8 s
& ~+ j- p0 ]3 V: v) E5 d
19、使用optimize table5 c) r0 }6 M3 K; w9 T
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;8 W2 O# `5 ]8 J; \% I0 z
5 Z6 `6 _. w$ _$ I) ^* E- S
20、使用procedure analyse()
7 L; N7 T- A2 X! i* L: p/ y5 y 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:" E# C/ H6 C1 V' h# L
select * from students procedure analyse();( O# k5 G) \4 K! P) R+ w0 T
select * from students procedure analyse(16,256);
; V; r: C& |2 a8 M/ D* @ 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
9 O/ E% N1 Z+ s$ q* S7 P/ J
: C- `: N3 M: _1 W' b% z. o2 N3 X 21、使用查询缓存
. T% l& K7 ]1 n% \% B& A 1)查询缓存的工作方式:
/ [) s, K! T* v$ J 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
6 u/ h" P6 U( a! P0 M 2)配置缓存参数:* G1 M8 D$ z; Y$ |9 c m1 d: O
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。. c% D. k: b( O% i
( `7 Y( X" p6 C 22、调整硬件
: w2 W0 J) M7 P. N0 f2 ~$ a" y6 O 1)在机器上装更多的内存;( E" D" {3 V* ] Q
2)增加更快的硬盘以减少I/O等待时间;) r3 v" I- p' i( [4 o+ n! N
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
: o+ x! J# T" W9 n. k) e 3)在不同的物理硬盘设备上重新分配磁盘活动;
' G& c' G$ [1 n8 v7 ]( H 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。% q. r$ k1 ^$ U( \! s
|