启动:net start mySql;* f( B5 C+ p2 Z5 t9 q
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;4 q7 x3 o8 ]& J: U5 D/ k1 j% ^
列出数据库:show databases;) X. q7 C9 ^: n2 @+ y
选择数据库:use databaseName;7 F) S$ d, K) g& g2 E' k7 B
列出表格:show tables;
! O- {- B1 W# t- K, Y 显示表格列的属性:show columns from tableName;3 b8 D* j* U+ I( ?$ ^* p
建立数据库:source fileName.txt;5 L% q( c d$ T a, d) W! @' G
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
* x; k( W: h( b% y$ A 增加一个字段:alter table tabelName add column fieldName dateType;4 c3 h3 E) o) |) R( D
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType; I( d* q: ?4 \7 M/ x( g
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;/ S7 d0 F0 h9 Z0 Y( I+ X% v
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
% {/ ?6 w8 p' e7 T' t" L 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;4 g# z. \5 U$ s' v3 K
查询时间:select now();
" n9 H7 O% F: J8 j 查询当前用户:select user();
9 p* J) R1 f& H5 v 查询数据库版本:select version();
* a0 B* v) x; t 查询当前使用的数据库:select database();
- L, j$ R/ {0 o8 V3 g , H# [0 _9 m' Q# @5 I
1、删除student_course数据库中的students数据表:
) P: T, o2 \: X5 [$ `& ] rm -f student_course/students.*
+ V: H5 _1 e) U8 ~& ]; y' r 9 }0 c# }; V6 Q( V
2、备份数据库:(将数据库test备份)
) V- E: D$ G) n$ h mysqldump -u root -p test>c:\test.txt1 l& A5 C$ j2 G/ j) D: O5 H
备份表格:(备份test数据库下的mytable表格)
5 s/ N' i5 K+ T1 i, j mysqldump -u root -p test mytable>c:\test.txt, |% n& s! X6 k
将备份数据导入到数据库:(导回test数据库)
7 _/ T$ g3 Y% j, _ mysql -u root -p test<c:\test.txt
$ |' X9 U8 R2 W: L: f; [ / O0 X% r( x0 I c n3 A0 E
3、创建临时表:(建立临时表zengchao)0 ?4 X3 x3 |: M# e0 {3 ]
create temporary table zengchao(name varchar(10));) a5 ? C( E! \4 d* ~: O
/ f2 X/ Y' Y) c* s G
4、创建表是先判断表是否存在6 p* W7 N `- C, h2 c
create table if not exists students(……);" s9 W3 K5 K0 f" q0 t/ ~" f0 E
) T+ Z) w' n$ c( w& r 5、从已经有的表中复制表的结构3 U* P4 D9 ?, U$ d, {+ N- r( J& U
create table table2 select * from table1 where 1<>1;; W8 o5 ?# u' z2 X, n$ c! o- c: j
3 j' u0 q) V; L0 y! j# i5 i& f 6、复制表
) z Q8 B/ w1 J6 c" K% i% Z create table table2 select * from table1;; O( y& M; y7 Z+ V- I! c* X
/ n- \- X. Z S' a/ g' v( p 7、对表重新命名
% @! h) A$ h3 |) e8 e1 ]1 a alter table table1 rename as table2;
9 | B) ^, {* Z$ r6 r2 M : V. l" X5 S) C& `$ g$ b% |
8、修改列的类型9 g- Y6 J9 m3 B/ ~2 s( k3 U
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
' X( r5 H+ Y. i alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned% V1 Y! z2 C6 {7 N
) J$ I) U% E# g
9、创建索引" \" G+ b% n. Y2 ]+ A# q
alter table table1 add index ind_id (id);/ }1 P4 N, x8 H. a1 J8 r
create index ind_id on table1 (id);
0 g! P. h9 M1 v: b6 Y; W create unique index ind_id on table1 (id);//建立唯一性索引4 T' V5 E2 S2 E+ ^, L
( e* O* p7 J3 a' Z: m9 r
10、删除索引
$ n& T* o. B1 |1 s- d% z3 g$ x drop index idx_id on table1;' s3 S$ y! E; N! X/ `- o& e' o
alter table table1 drop index ind_id;+ x' Z, \4 |! W O
0 K4 [- u: M; D2 w2 ]
11、联合字符或者多个列(将列id与":"和列name和"="连接)% ^. |( h8 R! x5 V7 j' J( X
select concat(id,':',name,'=') from students;
" u' n: _! w0 C: Q & b2 C4 }$ m- o3 P) F! }& }7 a+ O
12、limit(选出10到20条)<第一个记录集的编号是0>( S2 j3 X/ ` ^: m2 Y
select * from students order by id limit 9,10;
7 Z3 V+ F. u8 y/ A( M
& @8 r1 F+ l( M$ P 13、MySQL不支持的功能
% ` L' ~: s9 b# {( w, R6 h g 事务,视图,外键和引用完整性,存储过程和触发器
$ k& i$ b$ q9 K) Z
5 B0 b. a: i7 X; H' z
: Q3 _9 w' Y2 r. `2 X6 h" t 14、MySQL会使用索引的操作符号
( ]* F' u; U, n2 d n) ]1 | <,<=,>=,>,=,between,in,不带%或者_开头的like
7 w7 M/ ?) K2 _! l ! ^+ H% _0 J. c% k9 U; ~. C
15、使用索引的缺点& m/ `* D5 y6 @7 i* B3 Q7 ?0 f
1)减慢增删改数据的速度;
Q7 K, W' a6 i/ `' ^* I! R1 V 2)占用磁盘空间;
% n# b7 E3 a) @ 3)增加查询优化器的负担;; L0 g& [" f( U" G8 X) n$ n
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;+ U9 j+ d2 W$ E) b B$ i
5 b4 T4 L x& ?4 q, l: M) ?/ V 16、分析索引效率
, L& ]* F4 ]2 R6 k0 f 方法:在一般的SQL语句前加上explain;
/ R% a4 L; |4 X4 E 分析结果的含义:
( S+ a0 ?$ s% C/ } 1)table:表名;! f V% q# y5 P
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
! O) W; D5 K" |% m6 D 3)possible_keys:查询可以利用的索引名;
! _: w9 ?7 t |, @0 H 4)key:实际使用的索引;
) ]7 l! b) M5 x) Y 5)key_len:索引中被使用部分的长度(字节);
6 S# ~4 P2 U6 R+ y! _ 6)ref:显示列名字或者"const"(不明白什么意思);
& U3 l3 O* U T) [" ]8 V' Y8 C7 h 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
2 ^( Z& x' e5 t+ J* I9 K( { 8)extra:MySQL的建议;
8 I" x% w" @. y , `* F% A' v' C4 r3 [/ E/ ?" k
17、使用较短的定长列- Z. L; h, u+ v9 r
1)尽可能使用较短的数据类型;4 z4 }1 x$ k# I& t9 [
2)尽可能使用定长数据类型;
: X& E$ p; a* T/ m- c0 I/ X% q a)用char代替varchar,固定长度的数据处理比变长的快些;
/ F8 ?) j: B- Z! u0 ]/ C b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;. h& t. r/ _4 b7 K
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
' p, ?* W' x g2 e& T6 @4 m3 d d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;4 H, D5 Z# S- c; @
/ n/ M1 s0 F) ~( [
18、使用not null和enum
9 A- `3 [6 n! Y5 _ 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
Q& I* L- Z; g2 X7 H I 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;; l5 v5 s' r% Q4 v% T) I' A
& L! {$ q% r" C3 B- n3 I$ V
19、使用optimize table) b- h& I7 L: L; \2 P8 l. |) W$ S
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;0 w+ ~ u: k4 ~8 J
# _' O3 |( u+ Z/ G! c
20、使用procedure analyse()
" f, {3 Q T6 v! E3 i! i7 T, L4 z, I 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:7 N2 [& X! H8 O7 A W
select * from students procedure analyse();
9 x' j! C2 X5 D8 u select * from students procedure analyse(16,256);- L/ j3 a" y, ]; e+ M
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
! _% I2 H5 @+ ^% M0 _+ P/ Y
$ \- Q! E) I# B" q7 j |6 e 21、使用查询缓存
7 `, S" O5 ]1 N& s, [; e 1)查询缓存的工作方式:$ `! M: {" Y5 v; ^5 w
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
' p) z5 v* ~ o' d: ]; Z% R 2)配置缓存参数:* B3 c; g+ |+ f6 v6 l
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。) r0 e9 R1 p; k7 D+ c
i; q) ?. F# L( D# l4 m 22、调整硬件* Y, `' d1 s& s3 v* T' W
1)在机器上装更多的内存;
" C6 u/ i% t1 n& i% b/ } 2)增加更快的硬盘以减少I/O等待时间;
2 e7 w) ]# ~1 a6 V& U& V 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
7 @% S3 c. y$ ]6 V8 |$ U8 Z 3)在不同的物理硬盘设备上重新分配磁盘活动;
/ A+ e! z' B! F& O9 G 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& X" }5 T9 c1 W8 }
|