启动:net start mySql;
& R8 b5 M. X+ E 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
% o [2 ]7 s( b) P2 A 列出数据库:show databases;8 j6 v2 k& ~- [& Z/ Z0 ?
选择数据库:use databaseName;
: N. r1 o$ a, q. o! P 列出表格:show tables;! h7 a1 ^% u/ K. n3 |% X
显示表格列的属性:show columns from tableName;! x: E. `% M5 V* B* M+ o' X
建立数据库:source fileName.txt;- S1 k* L2 |# D( d1 p( p$ ^
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;- b9 c& t p J& E$ J/ v7 `( n" {
增加一个字段:alter table tabelName add column fieldName dateType;
4 H2 r8 a* V- H/ j2 _2 j6 Z8 E: o ~3 v. n 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
8 U4 O9 ]2 L; t2 _5 K) S 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
5 O- ^5 W1 [; r' x2 S3 y! a0 J 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
+ Y" }. U$ u/ W. l; b7 w2 W& { 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;" l+ X* k5 @( _2 b3 @2 `% Y
查询时间:select now();/ ]/ u6 o. u( v4 A
查询当前用户:select user();% `- V5 y7 X, r' F' m
查询数据库版本:select version();
6 J3 R2 Q8 y- q) [ 查询当前使用的数据库:select database();
4 E: p6 W+ Z8 w4 U9 F2 k8 H : L% T3 n4 ]9 B: q4 p" d' s; ]
1、删除student_course数据库中的students数据表:" o( L' w k/ g) D, R& ~. D- u
rm -f student_course/students.*
- o3 @5 ?' t3 b
9 _4 z2 I# b4 T3 E5 W: q! F* g 2、备份数据库:(将数据库test备份)
) w2 D2 ~& g' S2 S" i mysqldump -u root -p test>c:\test.txt) r/ |& J! {6 o d
备份表格:(备份test数据库下的mytable表格)
+ K5 H0 A% S5 b% r7 u4 q4 {1 \7 U% e* I mysqldump -u root -p test mytable>c:\test.txt2 l2 }! @: K) u- @
将备份数据导入到数据库:(导回test数据库)6 Q% z2 y. @8 W0 `+ D7 g
mysql -u root -p test<c:\test.txt
& _" Z, e5 O6 a1 g* b+ e' w4 j. q ; T! U+ a) o# j" h$ S- J7 R
3、创建临时表:(建立临时表zengchao)
# g. B+ ?7 v! [' p$ M9 J create temporary table zengchao(name varchar(10));' ~ D, q) |% R/ H, K
# J( a& ^: a, i, O O E# i
4、创建表是先判断表是否存在
; N: H0 q5 M- C; U create table if not exists students(……);# z& a @$ T' j# l* t
+ t; v" i, |4 N- i- O( D' X1 q
5、从已经有的表中复制表的结构3 o) `0 o) _; t! J: W b s# J8 u
create table table2 select * from table1 where 1<>1;0 j% o6 ^, V; U: D; @+ S1 @
. v D2 `5 ?5 T5 d" g 6、复制表
5 o/ I0 t2 l7 p: r( n create table table2 select * from table1;
) Q: E9 K8 s* G3 F$ w7 ]: p4 O
1 Q$ e% |+ L2 ~) g1 _ 7、对表重新命名5 M, _1 q ^8 \9 m. n: t3 r ?$ y/ c
alter table table1 rename as table2;0 Q3 f7 U; p1 s' w
& N% p: x1 R: T$ p; y6 [
8、修改列的类型3 ~) v$ e7 x* ~; _: a
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned* ]. R% l& i/ Q
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned- M& U3 G. K7 b* W( ? V
" H! W# R# F0 i+ s2 A) g. \ 9、创建索引
; K. F) u! x5 L6 ^ ?: K alter table table1 add index ind_id (id);0 S+ k! Q4 \/ m% t0 z S
create index ind_id on table1 (id);
' @0 Y/ c! y- X7 c; W5 C& m& Z create unique index ind_id on table1 (id);//建立唯一性索引( ~7 C8 f2 r) ^6 u* T# ^
, {7 E( ]: k1 ]2 y- {
10、删除索引
" q$ _! V7 H+ @# H8 B- F! { drop index idx_id on table1;
: N U* g: @+ M0 X. { alter table table1 drop index ind_id;; K" N0 d6 d/ [
0 _4 p; o- o* n D
11、联合字符或者多个列(将列id与":"和列name和"="连接)
) F, ?: `9 Y( g4 T M6 x select concat(id,':',name,'=') from students;. ?+ t# j7 a7 O+ o/ z. B d6 D9 }
; Z7 W9 \$ g D# h! z
12、limit(选出10到20条)<第一个记录集的编号是0>
9 [7 t: J2 e7 P- C K% z9 P select * from students order by id limit 9,10;- k' [, [$ _. P* B
) _- g5 C: R3 e( x5 U7 S! N1 e 13、MySQL不支持的功能: b9 i- L' j% ~: x4 k
事务,视图,外键和引用完整性,存储过程和触发器* P& L9 Z, o$ b; I
" a. \' w9 L: W0 p$ \ 0 Y4 e) W! J( ~( p/ I: S" d6 @
14、MySQL会使用索引的操作符号
+ {- B f; ?/ o3 t4 [- k* S2 G <,<=,>=,>,=,between,in,不带%或者_开头的like
% Q; d2 r4 r: P3 m5 J/ g0 j! |
; @- S! w" d9 B. W 15、使用索引的缺点5 h! n, }1 k [) z \
1)减慢增删改数据的速度;" `2 d7 |9 B) y. n
2)占用磁盘空间;
0 j, Y9 ]' N7 n3 h6 o/ {) K9 f9 s 3)增加查询优化器的负担;9 [8 @9 a2 u! j8 A# g/ v
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
x: Y# i9 k" p4 ]$ p5 b# a+ F+ {
* L# y6 {! a, u8 ]# {& @ 16、分析索引效率& i" }! E7 l9 |1 E: T. J
方法:在一般的SQL语句前加上explain;
6 {; p0 J4 y+ Y* y. n m7 o 分析结果的含义:) i- j, c6 X V' L: Q
1)table:表名;3 x; m( [0 f; |+ O9 R
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
$ T& Q; s, G& W1 x% x( R F 3)possible_keys:查询可以利用的索引名;0 r3 R2 b$ Y% i6 q5 F6 B
4)key:实际使用的索引;
" g4 m% Y* c* Z: ]% B 5)key_len:索引中被使用部分的长度(字节);
1 M1 {# ~8 ~ o 6)ref:显示列名字或者"const"(不明白什么意思);5 |2 z3 { ]& l8 U7 k
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
: r y# ^# G! |, a& s9 d5 d, B 8)extra:MySQL的建议;/ w2 ?' `0 t& a/ x5 @. f% R
5 E4 A0 o6 [" M! E3 S: W, O
17、使用较短的定长列
k* W& k ] S: @* W% f 1)尽可能使用较短的数据类型;
! h+ c/ j0 L. ], _) K5 @- U8 G- _ 2)尽可能使用定长数据类型;( T$ b5 D% j' m. F% }) m
a)用char代替varchar,固定长度的数据处理比变长的快些;
7 Z" \" R. c0 K# A b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;/ U$ s9 x# [) M# i3 H0 Z
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
3 H$ f5 l4 ]% E/ o7 J d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;# }6 i7 t8 l" I& `. X5 z
+ b$ ?0 S( C4 H5 ?
18、使用not null和enum
+ U0 N9 K% k" k; h 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;4 `8 ^2 c! k- _/ C
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的; T. o6 T* k5 }0 I% Z
8 Q8 `+ |' P6 R A$ S/ A# I8 e; \+ t 19、使用optimize table( ~7 z; o$ M+ _5 B& `! e: z
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
* [( Z9 h6 g* Z9 o( ~4 s" F6 P
8 P8 |5 P. r! V, Q* `) V 20、使用procedure analyse()
/ p+ n6 C4 ~5 K/ o0 ` 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:+ v- I9 ]4 k& Z" T1 T9 i- y" U% w s
select * from students procedure analyse();
8 d; c# w$ e, `2 U+ S. L, i select * from students procedure analyse(16,256);
; x4 o/ t, \5 m9 g' s# t* J 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;5 P/ S+ t. f' W$ V+ ?; {/ ^) g! c
7 N; v. w+ ^# J) k- K, ]1 j 21、使用查询缓存. ]# r0 j' j9 i2 ~4 P
1)查询缓存的工作方式:( `. k8 \0 h! U: t2 q
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。) z) w/ U q# N) h5 n: T
2)配置缓存参数:, w( _& N3 P- J6 |6 d: v/ }1 U
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
- `! t* X x5 L1 j8 L @
5 t7 Q7 o5 l$ Y9 } A% _ 22、调整硬件
) y/ J e% K: D U, | 1)在机器上装更多的内存;* I% n5 |) C( t/ M1 J
2)增加更快的硬盘以减少I/O等待时间; J& A/ ^4 I- q4 V# ]- t+ `
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
- Q8 x* T3 R5 u8 z# P; z 3)在不同的物理硬盘设备上重新分配磁盘活动;% E2 |, c. U- ^9 B, j# E
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
& }9 ?9 `- J6 O3 o |