启动:net start mySql;
8 ]; Y) o7 l, y- D8 i5 ` 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
& B7 a# T' B$ ?% g* h" S3 F7 E+ R 列出数据库:show databases;
8 T1 _3 L5 U# w" J 选择数据库:use databaseName;) u9 y4 r4 a% O+ C' Q, ` \' l' y
列出表格:show tables;
C( d$ c0 y- @$ C# j1 q7 ` 显示表格列的属性:show columns from tableName;
/ F& E) M- a$ W$ c 建立数据库:source fileName.txt;4 z, ?* I9 W! ?) X
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;* z$ e/ z# [3 U O( R
增加一个字段:alter table tabelName add column fieldName dateType;
' U2 ~2 a8 ~- j# Z% a: g' p4 s 增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;* W0 c! Z6 U; Y0 u7 t
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
8 E) `" u. @) V 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";+ M" s2 Q* o5 a5 w/ d% E; I" _
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;, ^9 l( M: K3 g1 z ]4 [, s1 V* S
查询时间:select now();
( b% G0 D# w2 c) [$ C 查询当前用户:select user();, k/ E& E2 w/ `1 {1 E( G
查询数据库版本:select version();
6 E2 N* q% Y! g& A5 I' \. g4 B6 N% F 查询当前使用的数据库:select database();* T1 Q+ Z! v" ^
/ l7 a0 }- B0 `/ f
1、删除student_course数据库中的students数据表:
9 u8 c0 F. |7 T6 g rm -f student_course/students.*# K6 p0 r- T2 k/ e5 h
" W4 d* U0 @# E% H" o
2、备份数据库:(将数据库test备份): X I/ f4 h2 ?7 l# J& H7 j2 l
mysqldump -u root -p test>c:\test.txt6 }( g# P) f! M' |, r
备份表格:(备份test数据库下的mytable表格)& e8 R3 K3 F0 v3 W0 k B4 C# M+ V
mysqldump -u root -p test mytable>c:\test.txt
7 X; k) c9 B( @6 Z V 将备份数据导入到数据库:(导回test数据库)3 p5 ^: t( i5 P) J1 M$ Q1 z. Q, S
mysql -u root -p test<c:\test.txt3 O' {4 ?" ?4 z* N% C
5 v4 [. v+ S7 g- Q0 F
3、创建临时表:(建立临时表zengchao)
8 }( ^4 B+ C1 I. Z! r create temporary table zengchao(name varchar(10));
9 V+ C5 Q0 E: g" ^6 _8 W
' U5 I! A0 b- r: D& Z# C 4、创建表是先判断表是否存在; \2 B+ P5 J9 L( T( j( z
create table if not exists students(……);; A% S: f. g+ c* T
2 R* x7 T/ y4 Q% u3 k
5、从已经有的表中复制表的结构
+ g2 K6 I" H7 ]! N& O e# D) T create table table2 select * from table1 where 1<>1;! [* m h4 `4 @' w- ?
+ q: T4 K) c' r2 y/ @ 6、复制表
- o, w; K m. f5 ^3 k$ y) { create table table2 select * from table1;
% x' H2 F( Q+ d4 V9 z# u
2 E! @* P( A" ^ 7、对表重新命名) o3 K% d9 m% {! f# N l
alter table table1 rename as table2;
7 }# W9 Q4 h+ q1 M2 n9 x& a
5 {: x' p, B* R9 @* R i( D! G 8、修改列的类型! m0 o. u, z; T! s- V& V# n; d
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
2 u; A! T/ t* ~ y/ ]0 H$ i, D alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned% d- C: k4 \# X9 T" \+ _4 @8 y
" Z. S2 ~/ }/ Y9 o- ?/ l6 e. {4 y' U 9、创建索引) e6 ~8 L3 h1 r& a
alter table table1 add index ind_id (id);$ M" H% G# a1 x& J/ m+ R" t+ B
create index ind_id on table1 (id);
8 q: D: d& j |. x2 \. p! b5 I' a create unique index ind_id on table1 (id);//建立唯一性索引+ j* T8 r( Q# Y) ?$ @+ b% Y; t& J8 O
( O. C6 F3 X# P! } 10、删除索引
1 P1 `6 `4 g9 Q: v( Q% _+ V drop index idx_id on table1;
' X; @! U( O* H5 w6 P7 o" Y, D7 W% V alter table table1 drop index ind_id;
t {( H. N) Z$ m" L
. q7 B6 m/ k) h7 {' X( d 11、联合字符或者多个列(将列id与":"和列name和"="连接)+ f* ]: Y& M' o- a
select concat(id,':',name,'=') from students;$ G% w9 [: U, w+ J) M
/ ?) u% G: B7 H7 A 12、limit(选出10到20条)<第一个记录集的编号是0>% N0 M8 j; R! A% m
select * from students order by id limit 9,10;9 l Q( A B! {5 L: h
' b- N) J& K$ S; R3 O
13、MySQL不支持的功能: A; j8 w/ }9 l
事务,视图,外键和引用完整性,存储过程和触发器
\; g! |8 A g m# p
9 _$ A D8 z, [0 R3 k: |
! o0 X0 L/ Z9 v1 ~ 14、MySQL会使用索引的操作符号3 D$ x5 ]! U& F. }
<,<=,>=,>,=,between,in,不带%或者_开头的like2 t( R) X3 t6 A; M1 k
, Q. m9 z, F3 t0 O" x. l* ^
15、使用索引的缺点8 j* k+ Q6 }9 W% C2 n7 Y$ d
1)减慢增删改数据的速度;
0 ?6 m- x& ]) p3 Z6 M 2)占用磁盘空间;
: Q8 s& h; x8 T# M 3)增加查询优化器的负担;/ v6 S, I% W V/ N, ^/ g
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
# g8 S% d6 y* y1 y) Z
+ g3 Q% T6 Q: P 16、分析索引效率
% I7 S4 l/ G/ O3 s. @' G 方法:在一般的SQL语句前加上explain;2 D( g0 i) ~8 U; O- K7 w
分析结果的含义:6 ?$ z; s: T- @" S
1)table:表名;6 M) U: W/ Y/ i9 N n' E7 C; M
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;# M% J& O6 Z- k9 c' I
3)possible_keys:查询可以利用的索引名;' A- F: B) |; v, D+ N2 j
4)key:实际使用的索引;2 ~- I4 t5 N& {9 \8 h: G" U
5)key_len:索引中被使用部分的长度(字节);
' ]4 t, Y& N) D% |: ?/ Q& i 6)ref:显示列名字或者"const"(不明白什么意思);
, b7 T! S8 s& a$ U7 ^/ o 7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;* D" A! W# C0 Z4 m Z% R
8)extra:MySQL的建议;
+ D, p1 s2 c- w$ k ]- i # Z, F' Z$ Y6 L0 S8 a3 {8 _
17、使用较短的定长列# \# z* b# R& D4 r. ?& A+ c
1)尽可能使用较短的数据类型;0 o8 R$ i" G5 ~5 n4 _( h' a, ?
2)尽可能使用定长数据类型;
2 Z. i0 G/ }, Y a)用char代替varchar,固定长度的数据处理比变长的快些;! ~, w7 n9 b) P5 ?
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* q; g2 a' E8 r c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;- Q2 O8 c( @, q# r+ H
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;" v5 a K8 z/ {9 b# t
) ?; F2 @- i& ? 18、使用not null和enum
8 M1 p; I- d3 R4 Z. _ i: E 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;! W: {0 Y) z4 @, N% G' @
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;' ]8 \1 O2 ^# D7 f/ i7 ~% s
6 M" ^/ [& e/ N8 l 19、使用optimize table
6 q, C) r5 k- l5 ]( y 对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;6 x( O: g9 ^6 ` X+ c
" N, j+ k3 t& A# V* M 20、使用procedure analyse()
8 a+ J% {6 N' i0 }- n5 D4 P( } 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:( ~( [6 o. ?8 y$ V# i$ T
select * from students procedure analyse();
3 ]8 P7 B8 w o6 M$ w select * from students procedure analyse(16,256);$ J: S6 j9 i6 b% i5 U
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( n# \) }' J. p( M: v. U4 @# V8 Y: q
0 H- y8 Z1 E- j6 D; w) i0 o 21、使用查询缓存
$ ^; q l. J- z% W0 |6 H ~ 1)查询缓存的工作方式:
1 {; ^! h. R. P8 f* ?: c# D 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
8 a9 [7 Z# K$ z5 }+ h 2)配置缓存参数:: d0 H: | q" D }" d0 e
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
3 J1 o9 ~7 k% J2 C3 Q6 `
4 C# o# J6 u% m8 z! @# A 22、调整硬件
( n' u8 a" |. H2 x: _/ n 1)在机器上装更多的内存;! V2 ?/ P0 H1 g: ?& A
2)增加更快的硬盘以减少I/O等待时间;
& M' a& Y) }' V# P* S$ R 寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
( ]; k0 o3 D4 t! _ 3)在不同的物理硬盘设备上重新分配磁盘活动;
- J: S q; w9 K/ y+ L 如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。) W* \/ _* E- O
|