找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2278|回复: 0
打印 上一主题 下一主题

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
+ u/ q* s9 o  [. F' l+ i" r  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
4 C: r4 W4 M! o( ~  列出数据库:show databases;
  }9 u6 e0 q! m; w  选择数据库:use databaseName;
) d% b# c2 ?% J( m  列出表格:show tables;
8 a+ x0 ~; J; f+ ^, m  显示表格列的属性:show columns from tableName;( H5 ^( e* t' S. T
  建立数据库:source fileName.txt;
/ w+ Y- ]; \$ H$ }8 h% F7 z$ t6 w0 d7 I  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;& D  c1 M- L9 p7 s
  增加一个字段:alter table tabelName add column fieldName dateType;" c$ V1 n% F+ e; z
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
4 }" Z. q: j: E  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;" j  u5 O2 g1 G. b
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";3 h# H% g1 @! i, N' R, ~
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 E. ^# |2 S) P) O' H, Q) {
  查询时间:select now();
9 s+ n' x  F$ a! V  查询当前用户:select user();
- ]9 I+ Y$ O6 O: Z- W- }5 v  查询数据库版本:select version();
( P0 s3 {7 E" v# S9 ?6 c; u  查询当前使用的数据库:select database();
2 _9 v; x! Z. X% k' _  9 V) h) C4 K2 F: ~. G' ~% B& E' j7 c
  1、删除student_course数据库中的students数据表:
. m% K3 G6 t5 e" x  rm -f student_course/students.*
: e% w( c9 p3 o, u% s/ r  % y2 R/ X# B# w' k
  2、备份数据库:(将数据库test备份)4 W% E* u( _, Q# i7 F0 {) V
  mysqldump -u root -p test>c:\test.txt
* ^3 u& @, v& X4 S" p  备份表格:(备份test数据库下的mytable表格)
8 w) _# d7 Q# E2 b# i  mysqldump -u root -p test mytable>c:\test.txt
, x7 n1 D3 Q; b5 T8 h1 ]  将备份数据导入到数据库:(导回test数据库)8 I9 R! r9 g: z% X/ V+ n, K
  mysql -u root -p test<c:\test.txt+ ]) r  a2 g- r/ t3 e( e
  ) h3 X1 S  ^9 l& B) Y1 i+ I
  3、创建临时表:(建立临时表zengchao): q! S, s$ L2 F; v7 L
  create temporary table zengchao(name varchar(10));
! @1 R/ d; v1 w! l- E  
0 G* e$ u2 ^. t; X0 f  P% ^  4、创建表是先判断表是否存在" d2 _$ [$ y0 O
  create table if not exists students(……);7 p2 Q4 `7 v2 F0 B0 {
  
- R6 s. \; Z  |$ c& x; o  5、从已经有的表中复制表的结构& |( X. P' Y' U  j( o% \3 o1 J. x
  create table table2 select * from table1 where 1<>1;
) X9 t' @2 w8 V" `5 A7 C  
  P: @' [  K8 X  W* `" ]2 T# x5 o  J  6、复制表
% V$ S/ c8 ?" W2 x# m  create table table2 select * from table1;% d1 s  U4 n0 ^3 y3 O+ E( B
  
  F0 L) I3 d. Y) y' i4 c  7、对表重新命名
$ M( I$ p1 j+ r  alter table table1 rename as table2;  a1 L8 f3 z+ |4 p0 D+ K# W
  
9 O) X5 V0 d$ J4 f' S0 Y  8、修改列的类型, |2 n; [% G0 C; Y, _/ n
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
8 B' o& e. h. A  d3 J# T  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
6 P8 b  s$ \* b4 u3 }/ [  7 B8 I; G  z/ d3 u8 U
  9、创建索引
% |' _1 y0 a- e1 x# u  alter table table1 add index ind_id (id);
, j2 J; B1 `' ?; e  create index ind_id on table1 (id);
9 O- ~4 m- C+ f. e% H7 A) e9 |. r4 t  create unique index ind_id on table1 (id);//建立唯一性索引
1 D, d! o2 ~7 u" h7 ?  
! R% U- [' Y9 D' H/ `- I9 R. L  10、删除索引
: c& o( ]  j/ d3 K  drop index idx_id on table1;
$ W2 [1 i: M+ g  alter table table1 drop index ind_id;* b& v. n" E& }/ P  G
  
0 C0 _+ J- f- ?3 B' j  11、联合字符或者多个列(将列id与":"和列name和"="连接)
( [. C$ I* d/ v' K( }  select concat(id,':',name,'=') from students;
5 }5 o$ Z& a; u% f: Y  
9 i( }: \/ g4 h( `! d. u- L  12、limit(选出10到20条)<第一个记录集的编号是0>
" P& \" \7 r' `- s* L) k# t% T$ u  select * from students order by id limit 9,10;
" X" L" M8 h& e4 g+ y& n  
( ?: V% o) T+ D0 ]1 m( n1 `  13、MySQL不支持的功能! T; g$ s$ Q+ y( Z- g& e
  事务,视图,外键和引用完整性,存储过程和触发器
- m; X0 L# T  E1 ^" I( f' X4 d# b7 q  ' d0 y. u  E1 r# }# x' }
  
/ o+ r; ^# N; f. \5 A2 d' l0 B  14、MySQL会使用索引的操作符号, D* M9 M/ e' u" `2 }
  <,<=,>=,>,=,between,in,不带%或者_开头的like
9 N. V* P5 ~' B6 T0 q6 q  
7 E; O9 ~& J3 w6 f# E7 ~  15、使用索引的缺点
3 g& X: n) f9 z4 o  p  f' S8 k  1)减慢增删改数据的速度;
1 N4 E9 H* D2 L1 e' B  o) e" G  2)占用磁盘空间;
; y1 A1 Z# a6 X; T7 {3 c  3)增加查询优化器的负担;6 b. ?! e$ U' ^6 A6 Z3 z$ Z
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
' `! z6 s! I: X, W  
7 E, O0 V  @+ N4 ]: n) B  16、分析索引效率* C2 n4 D% m) F: R' A( N
  方法:在一般的SQL语句前加上explain;
. M8 h  l5 R/ {: E, a- o  分析结果的含义:
" B) E' I# K6 r. [  1)table:表名;
- d1 Q& c! c' ?8 {" \, {0 k! ?  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;) d$ e- y- H1 s, z1 v: A7 j( h9 ~
  3)possible_keys:查询可以利用的索引名;
# Y; n& v& @" \- m  4)key:实际使用的索引;
1 M7 ?, p1 a# t  ]5 S% O( i1 W! R  5)key_len:索引中被使用部分的长度(字节);7 \% v5 Y+ f" ^! w8 M
  6)ref:显示列名字或者"const"(不明白什么意思);
! c8 }) x3 T. s: {; C4 T  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
( O2 g; x" o) u: L! U; @; A  8)extra:MySQL的建议;9 `/ L1 [7 d* m- B8 r: `! x2 G
  
: J6 K) I# O- m' h+ c7 @0 f  17、使用较短的定长列! ?# S, n6 m# V) _* m2 P5 {* x
  1)尽可能使用较短的数据类型;
! N' i4 o" X) r( R& i  2)尽可能使用定长数据类型;2 G, ^; L% L% ~$ ]
  a)用char代替varchar,固定长度的数据处理比变长的快些;
- M4 \7 x8 o4 H, X% r$ i  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
. l+ z0 E$ C  x" B  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;. d4 f+ ]8 m6 I6 G
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;& ^8 ]/ o) b/ r, J$ p& p* ^
  0 k5 N9 z) y- {
  18、使用not null和enum! F, F/ T* y) ]" C; N) z; b
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;9 N$ @5 l; K2 ~3 y/ R/ k1 {
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
4 D9 M2 T! _- c, X2 m' O% s  
2 ~! ]; T! y* [( T+ k3 H! h  19、使用optimize table
; N" ~# }1 k8 x9 Q( k$ ^4 N  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
: T8 \7 T8 N  x; r# x: Y- T; j  
) m$ l# W8 S$ T! B: J$ C$ n  20、使用procedure analyse()
6 t1 F, t  f& ?+ l* N! k3 ^! S  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:) s$ P" v* \2 X. T- Y1 Y( w
  select * from students procedure analyse();2 r- F, G" I$ y) |7 p! v
  select * from students procedure analyse(16,256);
; \1 U; L6 ?+ e  c1 y  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
: g% W- ~6 S/ E4 E. D  7 X1 ^& Z& N# q0 H) n
  21、使用查询缓存
4 ?4 ?* a0 q" l) T2 U: Z6 h& b  1)查询缓存的工作方式:
2 I2 d, |/ j" `+ M  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。1 i8 n  P9 C5 W0 ~
  2)配置缓存参数:. s9 b, k4 b8 R1 i+ A; `* Q! ?/ H1 M
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。* P- a" Z. P( ?: V
  1 \8 t6 I) t" v: W/ d
  22、调整硬件1 V3 S. I' p. @! y. |( P
  1)在机器上装更多的内存;
) _  v! a6 d: \; s1 `  2)增加更快的硬盘以减少I/O等待时间;9 S6 [8 n, f% b( u0 h
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;; r5 i7 }( ^. K4 g
  3)在不同的物理硬盘设备上重新分配磁盘活动;1 ^, n* I( s/ B; \4 u7 l: p6 G
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。. Y/ G& |' @0 m, V0 C2 N; C, Q5 m
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表