启动:net start mySql;# f1 k& T$ V: w6 _+ O; L
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
5 C3 R. N2 s. W& s$ H 列出数据库:show databases;: A6 E( b) u9 B; {! C y: `
选择数据库:use databaseName;! |% J+ @8 r5 ^/ A
列出表格:show tables;% }! R& J: O4 W1 f& |# R. d: r6 w
显示表格列的属性:show columns from tableName;
; {+ w3 C* d# u- Q, K$ v+ S, h: n 建立数据库:source fileName.txt;# ]# X P& a1 Q) H. e2 v
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;# U; q% \1 t6 X: \* u4 d1 ^
增加一个字段:alter table tabelName add column fieldName dateType;8 c0 |. p' k% Z: K( o) O( _% ?" |
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;9 A/ b/ Z6 q( R! R" V* S [/ I0 {& S9 s
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;/ n- @0 |" q+ @6 h& O! n" M
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
6 `6 D( v e8 n1 t) K. t. S7 v 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
2 M7 X5 D2 u/ j: j% t7 G 查询时间:select now();
9 H) }' w. Q) O 查询当前用户:select user();; P2 C# D4 f( }! n
查询数据库版本:select version();9 i& V/ l4 K5 L: Q# b
查询当前使用的数据库:select database();% ~0 \; b/ W9 v( X! w8 T, s
6 Z/ {& m( J# i" `. C/ o# K7 h 1、删除student_course数据库中的students数据表: c+ E ~* w+ G' u& t! c
rm -f student_course/students.*/ u S' ? P% }2 P; _3 T' V" R& b
. k" H* j: Q( l- _# J, p
2、备份数据库:(将数据库test备份)# [* j. C. o1 P. @/ b8 {
mysqldump -u root -p test>c:\test.txt
, G6 M# E0 F' r 备份表格:(备份test数据库下的mytable表格)- b v% e2 n+ u6 f# w3 O
mysqldump -u root -p test mytable>c:\test.txt
6 W4 ^# n) i2 B 将备份数据导入到数据库:(导回test数据库)
& k9 J2 }( c& C( ? mysql -u root -p test<c:\test.txt" O! K2 E8 M5 b( P# K- r. @
1 o m! \7 ]2 z
3、创建临时表:(建立临时表zengchao)
1 l* n9 `& c3 G/ ]$ F Y create temporary table zengchao(name varchar(10));, Z6 y3 M6 R. G) t0 ^
/ I+ _, x+ y2 Q% x2 n 4、创建表是先判断表是否存在
- T& H5 P( A* [. D create table if not exists students(……);$ P) ]" q" j5 A" `# B" J9 v
2 h6 `" M. _4 V" S0 o 5、从已经有的表中复制表的结构& O+ R) d: a, U
create table table2 select * from table1 where 1<>1;8 g2 Z! r. E* X/ P2 Y, O
( u, j" B7 |+ q: l
6、复制表 N$ t' t2 l1 T5 Y9 a8 H- j D
create table table2 select * from table1;1 i, r) [& N- i G+ N3 a
' `! O$ O* Z {- `9 B- B 7、对表重新命名% |+ u+ b% _& K# M2 b5 f
alter table table1 rename as table2;
# T) K0 l7 g8 T$ f8 ^7 w z ' W$ A3 F) G6 u% {) Y5 e, ^
8、修改列的类型+ A! F3 F0 Z) U! n1 T
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
j& i5 D* ^" a* q9 T alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned2 @2 e p* \" B: Q: g) P: z
: I% Q, ?9 T) j9 B/ T/ H% s) ~0 ~ 9、创建索引! B* B; ~8 V8 s
alter table table1 add index ind_id (id);
2 R" ^$ t f# H+ Z create index ind_id on table1 (id);
E: A9 X9 D" @" J create unique index ind_id on table1 (id);//建立唯一性索引
+ K( C9 @/ U4 i! b - _, _# e+ X+ D* t8 v
10、删除索引. S* e7 Z1 x' L( `( u& n
drop index idx_id on table1;
# G) T4 q p2 P6 d alter table table1 drop index ind_id;. D- x+ V$ G% S2 X5 u& r
2 n4 t6 n4 v, c 11、联合字符或者多个列(将列id与":"和列name和"="连接)- l* |5 e- t9 y7 f6 o" u6 Y; ]
select concat(id,':',name,'=') from students;
( j* E5 y# F: y7 B; w' h, ]* a 7 a% L( G/ V( j& I" m' ?; u
12、limit(选出10到20条)<第一个记录集的编号是0>
F& o. u! p1 f: S7 O1 S$ u select * from students order by id limit 9,10;5 e3 _+ G% ~# h( f8 y3 c# U
! M; i1 P' x# G3 S' g* n 13、MySQL不支持的功能
( E/ f$ q }+ {. ?/ ~ 事务,视图,外键和引用完整性,存储过程和触发器
' n' J3 V% q9 i8 h
; G6 N- w9 P1 @# B
' l3 w2 M) |8 k6 y 14、MySQL会使用索引的操作符号* D- e1 U; p( s# Z4 m" p# n. Q' U# j
<,<=,>=,>,=,between,in,不带%或者_开头的like1 H1 b R; Y$ z% S
) C- n& U( ^3 T) R( `5 O) Y, F 15、使用索引的缺点
$ L( E8 ~2 b. X5 } 1)减慢增删改数据的速度;* k+ E7 s; e: [% i/ B: y6 n! P, |9 z
2)占用磁盘空间;9 f, _/ u9 t. \( A( o6 ^+ A4 A- ~
3)增加查询优化器的负担;. Q8 T- U9 p1 G) X5 d8 {; W) x
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;- m# L3 R" ~# |5 \2 H9 Z) J& L
) y# Q, B$ J" b
16、分析索引效率' t; R* X6 @1 q) b$ V8 [5 w
方法:在一般的SQL语句前加上explain;
: p+ P: q0 D4 _6 u- d 分析结果的含义:
" [! L: `- x: N 1)table:表名;
3 L6 {3 H0 T/ \* B 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
( C8 o/ f7 R6 q7 e6 W0 ~ 3)possible_keys:查询可以利用的索引名;
E1 Q1 a' M8 P$ F Z1 S 4)key:实际使用的索引;
j* D7 {0 ^& {" R3 b' E* P 5)key_len:索引中被使用部分的长度(字节);
/ a/ T$ S* c2 A8 W2 y& U 6)ref:显示列名字或者"const"(不明白什么意思);
) Z/ ^- [% o+ I! L7 j 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;! w$ M) E7 S7 P; ?# K. h8 n
8)extra:MySQL的建议;
6 B: e: z6 c6 L$ m 1 O5 |2 _' g7 V# a8 ]
17、使用较短的定长列% @2 \2 d' w. y u/ Z; M' v) t; D
1)尽可能使用较短的数据类型;
/ L" `, ?- }* e! I6 ]5 `7 _ 2)尽可能使用定长数据类型;
2 \+ ~: O% N! {1 }7 T- [! | a)用char代替varchar,固定长度的数据处理比变长的快些;
$ a' [) }* {- b2 y b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
& I0 H/ h( z+ o: Q' T1 o; f c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
# a$ t' |1 q5 R% N8 f8 m d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
1 _! p0 {$ x5 j! j. z/ q: e 7 O: n; G& d, P! B. p
18、使用not null和enum) f! ^! n# } y! y) q( R3 z
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
% n0 L) C, n4 y4 F: f! O% L) [ 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;% ^ p9 f/ S' ~1 C/ G; _; w
) ]+ ?' F' s: T/ r9 H9 U' V
19、使用optimize table1 B3 I' ?$ a. D6 U9 f2 }
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;* P9 m' _9 c& E* E0 X/ w
8 n3 \. [* Q X/ I- V9 y0 v/ A
20、使用procedure analyse()
$ g3 _9 [' T. o& z3 H: c6 y 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:$ Z7 e: b$ `6 u& u6 [
select * from students procedure analyse();# v# s: I5 U" ]8 `2 f5 r2 T" b
select * from students procedure analyse(16,256);7 q2 f, N5 a1 B* i: L& ] X
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;4 C+ ]% M2 i% n$ s9 z" S
( O8 B- H( w' E& h3 ~, Z" l f. \ 21、使用查询缓存) _' L1 H9 r( W K0 Q7 N# z3 r. X) ^1 `9 l
1)查询缓存的工作方式:
^" T, X9 f0 P' s7 o. I) A 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。; z. ?. D& U! b2 X- t6 ~" q
2)配置缓存参数:3 y9 J9 o: W) R6 j; D
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。/ v i" g/ k/ [, I
2 |/ @: ?: U) {, K4 y5 p4 a1 X$ n
22、调整硬件
' [. N* j) w2 a8 T$ P) c" t$ L2 G E 1)在机器上装更多的内存;
9 z, H% { O$ A- R; |0 ]# Y 2)增加更快的硬盘以减少I/O等待时间;2 N: B; e. r& d% ]( `; ^' _0 c
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;) S2 u% e S4 y2 f9 L9 s) f0 h) M
3)在不同的物理硬盘设备上重新分配磁盘活动;
6 O7 M' t" w" o* i5 d: @5 s 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
6 ], P) Y# \ P' c) M |