启动:net start mySql;3 `5 D6 P2 S) {+ R
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
7 i% r. I3 Q$ u3 N! a/ r! | 列出数据库:show databases;
1 n% A6 A" k) |& m5 A3 p 选择数据库:use databaseName;& b" ~+ I1 C8 z2 f0 N# R0 ~
列出表格:show tables;% F# m0 |, v8 M* T
显示表格列的属性:show columns from tableName;, P9 f1 r% o% D G
建立数据库:source fileName.txt;
: f2 i( j' u2 a; \$ G0 }. D) ?% k 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;; Q+ y8 z5 K: t0 ~
增加一个字段:alter table tabelName add column fieldName dateType;& s7 ]' w& c) P! X! r8 y
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
7 b! ^+ T( o0 T1 ] 多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
V m; J; \6 B 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
/ b, `3 ~' U6 ~( d0 w! W9 M 每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
' E" B- C1 C! o% ~ O, e7 _ 查询时间:select now();
0 n$ D4 { \' c& _% E 查询当前用户:select user();* ~- T* p* U8 c1 }
查询数据库版本:select version();
/ b2 ?, X# w" s8 c4 e. v 查询当前使用的数据库:select database();: e4 Q. X A! N- S: o, z! e# c
' D: U0 o' \, Q+ g 1、删除student_course数据库中的students数据表:: n/ d \$ k+ L3 N4 d( c' x
rm -f student_course/students.*
* z! t; V: J9 B9 U1 M; P s( {% w
' f2 A, X. |, v 2、备份数据库:(将数据库test备份)
1 Z6 _. m( I7 y0 o- f1 I, U* ~ mysqldump -u root -p test>c:\test.txt
2 L: k) W4 n# v) D. k2 {5 m 备份表格:(备份test数据库下的mytable表格)3 l1 _6 }* |. h# z" v5 e9 H
mysqldump -u root -p test mytable>c:\test.txt6 N% p6 o/ K! l/ z/ X7 l+ k8 \
将备份数据导入到数据库:(导回test数据库)
8 x3 |4 t* ~$ Y3 C mysql -u root -p test<c:\test.txt
l' S M8 o1 P) z6 ^+ I, Z5 y# y8 Z$ D ) O: c5 _) ?% @$ `5 h) _: u! G
3、创建临时表:(建立临时表zengchao)/ t- m' i# q0 }4 M' p9 D
create temporary table zengchao(name varchar(10));# u. L" b( i0 i& _
1 U2 j8 [& n" l% Q! z
4、创建表是先判断表是否存在2 ^9 ?; B: z6 K O% a5 M
create table if not exists students(……);+ Y, D& [5 H9 T; a+ W* @- i
9 v6 B% ?' p% j; a G
5、从已经有的表中复制表的结构" j0 J9 d \! l9 t5 ], o
create table table2 select * from table1 where 1<>1;; V" r( J1 D8 H+ q/ u( S
8 n3 k5 H8 h: J! R' ^* c9 f
6、复制表
: k' R( [( h5 Q k" s/ i4 E' ^ create table table2 select * from table1;
1 M" K' l5 K, k( p
+ [* ~7 v% T8 b e# c3 b- j 7、对表重新命名
0 e$ P. l( x2 @' t alter table table1 rename as table2;
& }# r. ?) [- ^: z0 g' | " z# \8 H1 V! J4 w* q
8、修改列的类型
$ q8 R! e! o$ i3 k8 k alter table table1 modify id int unsigned;//修改列id的类型为int unsigned$ ]1 F% [+ Y. Q& I; T. v# C
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned" Z! o% m; G/ |
# p: f- d4 m4 H* u3 H+ I 9、创建索引. \' r' z) P7 g& ~
alter table table1 add index ind_id (id);3 _9 N$ _2 V) a
create index ind_id on table1 (id);
8 [' z7 z; L6 v$ D( J( L create unique index ind_id on table1 (id);//建立唯一性索引0 r4 A. V% D# l! x
) M3 x. v5 a4 L4 ~ 10、删除索引+ O! b! |4 e" o3 j9 o N1 z) _
drop index idx_id on table1;
5 U; o7 d( o! {5 O) G$ ^6 c alter table table1 drop index ind_id;; f3 \! ?0 Z4 W% |! |
# S6 y( g3 O4 p; _4 L
11、联合字符或者多个列(将列id与":"和列name和"="连接)7 Z# P. W6 a8 I T
select concat(id,':',name,'=') from students;! I" d6 Y9 [1 K
% u: I+ r) c9 n* I 12、limit(选出10到20条)<第一个记录集的编号是0>
& J- K- X4 w+ p. D8 z select * from students order by id limit 9,10;! F1 p' S% Q+ Y( Y
' S3 ]6 ]: F: e+ q1 N4 v" X% [- s$ a 13、MySQL不支持的功能
1 m. j3 T; C! A* N2 ~, b/ j 事务,视图,外键和引用完整性,存储过程和触发器
- `6 S. j" w0 f& K
! A+ z. p6 P5 \; N7 x- O8 Z) K * K; p. T0 Q' c5 t: s
14、MySQL会使用索引的操作符号
* |4 Q: H! j ]% ^6 {) H <,<=,>=,>,=,between,in,不带%或者_开头的like
4 k0 [$ L. z! s
/ h8 v- n' a5 r: G( h 15、使用索引的缺点& P3 ^% l; y5 p
1)减慢增删改数据的速度;
& T9 t! \; A$ ^# I 2)占用磁盘空间;
. U+ M$ ]6 `2 N8 k0 J 3)增加查询优化器的负担;
( `$ O6 p+ l7 \6 d) y1 K 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
; t) t2 R7 `" i! @0 Y" L+ L! Q 7 c. t/ _) q7 ^' S
16、分析索引效率5 R8 {1 Q( Q& |0 B- R. ]+ l& M7 x
方法:在一般的SQL语句前加上explain;8 m0 S, r- Y' h0 e+ T
分析结果的含义:
5 i$ c* S/ D3 b, A1 {3 m8 w" n# [, D( m5 L 1)table:表名;
6 {" U$ v$ {7 J6 R" d) c+ m W" x 2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
2 C; c! S$ a3 ?# o3 O* y' j: R% e 3)possible_keys:查询可以利用的索引名;1 a/ E% w1 q; X0 ~; o. K: v% z+ H6 n# Y
4)key:实际使用的索引;" `4 w8 W. ~ n# \% X
5)key_len:索引中被使用部分的长度(字节);! W: g$ N/ @4 G6 j1 T# _8 z
6)ref:显示列名字或者"const"(不明白什么意思);; L+ u: n: |( n$ _/ s6 M) s6 M
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;. s& Y5 |! Q% S0 d$ x; r
8)extra:MySQL的建议;
& J, p* x' z) k0 d: z+ V u0 k$ M0 e0 e+ {+ ]% y
17、使用较短的定长列
: W9 t; V$ o9 k. ~' F1 C 1)尽可能使用较短的数据类型;
5 J8 U* q5 }* ?/ z; |2 s9 [' T( O 2)尽可能使用定长数据类型;. w/ u* I" X- _3 d+ n4 k, k
a)用char代替varchar,固定长度的数据处理比变长的快些;
# K4 T' L5 @7 p9 r$ p: Q6 } b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;& ?: J' Q0 p6 e# V' e
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
- }; [0 C4 t+ z( b- q d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;$ a+ u+ p5 F# m3 i- B- q) W
8 W$ \2 Z. ~ [- C, L 18、使用not null和enum ?& v9 t6 l0 b0 y: ]- J
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
( n$ V0 k( d, A1 ~1 X% i3 ^ 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
* G! ^: H8 T( w, W: p7 q8 N" v6 I
! M1 g. z( n+ f" ]& b0 o( n; a5 z 19、使用optimize table+ T L) I# w5 w1 j \; U" n
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;7 r' o( w+ w! i* d: W# M. x6 N( G M
! g( H" w, h) k W
20、使用procedure analyse()4 C$ l7 F7 f+ c& }
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
( P* U1 q5 \6 q C' T* E. [ select * from students procedure analyse();
, B" b: M1 o4 x; w select * from students procedure analyse(16,256);
3 S3 Q: }% j) G" ^7 c 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
9 k: c5 Y: R4 _' j) S$ i
% m1 d, b: t6 r# @& W+ C' X- P 21、使用查询缓存
: U- g( Y* w6 d! F; V- z 1)查询缓存的工作方式:
3 S! w9 E& d% Q. U3 A) Z 第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。3 g/ Q# b' {) m0 Z* m
2)配置缓存参数:
# {- U4 F+ b, E 变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。- S9 p2 q7 r1 R5 \/ \3 T+ g/ {
4 `* V7 D1 `' F 22、调整硬件
# f4 h) a& ^& A1 B' Q! l9 y- |5 {7 Y, q7 Q 1)在机器上装更多的内存;
# P3 F7 H% l* ] 2)增加更快的硬盘以减少I/O等待时间;0 q. z" l, K" U- ~6 u
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;. g8 H7 U! ]* G4 Y. M: |
3)在不同的物理硬盘设备上重新分配磁盘活动;& F) z& a6 G( S
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
2 T9 K9 `& e- s |