启动:net start mySql;$ B+ t1 ?( K8 L- p9 Q, q
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! p. q; X1 c/ J6 k( {( {6 w' N 列出数据库:show databases; X7 ^2 ]8 B' Z+ Q% W& r$ M+ l& d0 S
选择数据库:use databaseName;9 L1 t. B. Q! W. m7 p" y# A6 g
列出表格:show tables;
3 d2 Y# b: E+ J* g0 ?) u! s 显示表格列的属性:show columns from tableName;
6 T ^6 Y" a; j# d" B' P 建立数据库:source fileName.txt;
7 N8 D( ?" b* ^0 g# ^- F9 U 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;6 o) l8 l! A1 _! ?- i4 z3 g- S' t
增加一个字段:alter table tabelName add column fieldName dateType;# i4 s* d: w/ k
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
3 M" ^+ y8 q6 @' o 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;' m3 Q$ j9 f$ k$ l, g N
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";% Y3 S1 x6 `% v1 w4 Q0 c1 \1 `) x
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
7 N @+ }* A/ A. o 查询时间:select now(); l% p+ Q. p6 Y6 ^& i
查询当前用户:select user();% e( F- E, Z5 g% o: D2 h) y
查询数据库版本:select version();' P5 E9 y) f" l. |9 V1 R& v
查询当前使用的数据库:select database();) Q+ F; Y- d: T4 I
$ S0 F8 O$ A) J }+ W5 r 1、删除student_course数据库中的students数据表:! v% V9 u" j7 n: I% G; e; |
rm -f student_course/students.*
0 ?+ S" G- m% \9 R4 [7 t : d: t8 D: ^% w5 `7 |. @" \, E
2、备份数据库:(将数据库test备份)
, w p v4 ?# |. }- m! t3 P9 z mysqldump -u root -p test>c:\test.txt
0 T" Z6 x2 i7 Q; f" c8 C 备份表格:(备份test数据库下的mytable表格)
0 W2 E( W: V& @* g" d mysqldump -u root -p test mytable>c:\test.txt
& i/ D* R3 u" z, A 将备份数据导入到数据库:(导回test数据库)/ a% [! x6 P! S! X2 y
mysql -u root -p test<c:\test.txt7 s* t( e; _4 ?7 |! [; y
5 f9 ^) R" C9 X5 p
3、创建临时表:(建立临时表zengchao)
% B1 A) `& B& K `' r& z: |' T2 R& l create temporary table zengchao(name varchar(10));
; K# P5 Y1 b( K' w$ x% \7 [$ h2 k 4 o4 ?' }& J: C; w
4、创建表是先判断表是否存在5 ]- H, c- n+ \3 g$ w2 O5 b' p
create table if not exists students(……);3 E6 j" H9 o* |- P
! }2 l' U' A3 ?- Q) v& A! S 5、从已经有的表中复制表的结构
+ h! N7 ]1 w3 v/ \7 |: B/ j0 ^ create table table2 select * from table1 where 1<>1;
3 B$ D0 C' |/ L# Y4 @1 z5 E # i; K" \# D5 z' L# k1 X5 M
6、复制表3 J3 ~9 A/ q w* |, a
create table table2 select * from table1;, d% _9 N4 i5 |0 o
) |" k& y2 K5 h' k, e _
7、对表重新命名
5 i; y' ~) y3 a/ w/ E2 ? alter table table1 rename as table2;
9 q9 c# n1 ~$ w4 _5 _5 W 3 w c5 p0 N* s
8、修改列的类型
: m( g" [) f+ Z: {5 M- { ~7 c alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
& u# H0 @# h H6 B8 _ alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
( `' K5 F6 [! [$ A" Z1 e & a1 h% A n% c- F+ Z/ E
9、创建索引
1 l0 N6 L$ m; _6 ^1 f5 K alter table table1 add index ind_id (id);5 r% ^$ D9 C. g; p; }
create index ind_id on table1 (id);
$ x9 I7 a) ?( q' u* O9 S4 \( Z create unique index ind_id on table1 (id);//建立唯一性索引- |4 g( Q3 i6 k! {2 C
/ _! ?& l' p# ^7 } 10、删除索引
: D ~7 {' a R8 Y5 n drop index idx_id on table1;$ Y. w/ N* F! C7 H
alter table table1 drop index ind_id;+ ?# P1 g" {3 S6 N1 a2 K5 n
6 V( m* x+ |( Z2 L9 f* z 11、联合字符或者多个列(将列id与":"和列name和"="连接)* l& s6 b$ C4 R
select concat(id,':',name,'=') from students;
9 S) \$ p9 j6 N; Y4 x 6 J% s- f7 K' s
12、limit(选出10到20条)<第一个记录集的编号是0>
& y5 a- y) Y* s2 P0 s& z* x select * from students order by id limit 9,10;0 X% `" P2 }6 X; D7 n
; P: J" G5 |: X, ]: R! r
13、MySQL不支持的功能
7 ?8 Q5 q" D$ ^. S8 a6 x 事务,视图,外键和引用完整性,存储过程和触发器
7 w6 Z: y3 Q6 [# B5 h: O 7 ?! Y! }2 {0 e5 j k" M6 q6 u
/ |+ e6 L$ Q6 B8 A4 B" f5 }& q+ u3 J
14、MySQL会使用索引的操作符号
; y% z, q# s' N" ?: S <,<=,>=,>,=,between,in,不带%或者_开头的like" y$ a" }0 C j
6 w; V/ q# P9 q/ z' H9 e
15、使用索引的缺点
$ X5 ^ r5 G& D1 f 1)减慢增删改数据的速度;) r' ~" J k d; e. S
2)占用磁盘空间;5 D9 ?3 n" c1 P
3)增加查询优化器的负担;
8 ~0 o0 `1 \' I8 |8 f6 F4 m 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
( _7 O: C, s" x( P% \ + |. Z/ n+ J) M6 q* j
16、分析索引效率
* B1 o0 t$ v2 C3 q. K 方法:在一般的SQL语句前加上explain;( H, r& b0 [3 T
分析结果的含义:
( f7 A) b0 h8 u# o 1)table:表名;
5 J+ \/ \/ t, n/ @& S4 }0 l9 } 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
+ F/ S: D a% w+ Y: X& T2 E' I 3)possible_keys:查询可以利用的索引名;
/ L% V1 r8 I9 O X 4)key:实际使用的索引;. b. R) d8 V( Q, l: v! S* U2 N2 \
5)key_len:索引中被使用部分的长度(字节);3 {- q& i! n0 G! l0 B
6)ref:显示列名字或者"const"(不明白什么意思);1 U5 l& d) z7 d" ?9 r# c7 ^
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
: n7 I( ]/ W: m! D' B 8)extra:MySQL的建议;8 n8 h) ?7 y8 n) l# ], h @
- T& _* f" Z! x1 j2 r
17、使用较短的定长列' I Z/ g6 ^8 F, ?4 k
1)尽可能使用较短的数据类型;( ^8 z' n& w c$ N( n* b
2)尽可能使用定长数据类型;
: Y& g; k; F6 ?/ g9 x$ T4 F a)用char代替varchar,固定长度的数据处理比变长的快些;* U# C2 n: [5 f0 }7 }
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
k& ^/ n& d/ G4 E: \: }. ~ c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
+ h4 S% r6 y; B: R% P0 ~ d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
' R) o. @, c% S6 f( ~, T % Y ^& l/ l- w: _) E0 g
18、使用not null和enum g5 z' H) j* R) l2 w
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! S0 `( [4 j t* c 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;7 b. C; Q9 L7 `; g; m
. e, c, _$ i7 U4 S1 c 19、使用optimize table
# B; E& W% |4 T- v! J2 v& C! m 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
' q) p( z* S9 t& ]+ h9 C, a / K- a4 |1 }9 L( o4 }9 P3 t0 s: @* O
20、使用procedure analyse()
3 @& j9 b( G8 e' n4 r+ h2 D 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:" B0 _6 z! {# }3 P
select * from students procedure analyse();
) p$ ^! v: x' m: p. X7 \/ ? H. c select * from students procedure analyse(16,256);8 v; ?5 @0 B7 [
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
7 p4 v5 J- F/ N( V' ]7 P 0 g6 }+ b% [' Q
21、使用查询缓存
9 A2 ]+ \4 w7 s8 d& @; Q) f 1)查询缓存的工作方式:+ i& x$ P7 I- R. P* f* Q) h
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
$ C5 H l9 r5 x' ^, d 2)配置缓存参数:
2 H4 R" s; u; d( d 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。. E- B! }2 [" a5 x$ A+ w* M
( k) y. c1 I) `& g) \
22、调整硬件
! E. U, ^9 p; J0 g0 ]. K 1)在机器上装更多的内存;
" Y. X# Q0 }) t1 {" D2 o 2)增加更快的硬盘以减少I/O等待时间;
: u" l4 w# m- A' | 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;+ [$ V/ Q$ L8 O- Y \5 r' o' M7 g
3)在不同的物理硬盘设备上重新分配磁盘活动;- M6 e( s+ z7 g) X4 C2 A
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
8 R9 k8 {: m; g2 {3 E" g8 M# q |