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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;: j9 V9 g  ?" h, y2 K
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
  y/ b- G  e4 j8 l9 a  列出数据库:show databases;
' M; o0 s- p  Y; j, r5 P  h# g  选择数据库:use databaseName;
' W, ]- l; o7 s# E- ]: ]  列出表格:show tables;$ [2 p+ w: V' @* a; z
  显示表格列的属性:show columns from tableName;
1 z- M/ f. F* h& F  u  建立数据库:source fileName.txt;0 `0 W0 b. ~# J1 P9 W
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;* w2 _8 b& N/ @( |! i! j. L. V
  增加一个字段:alter table tabelName add column fieldName dateType;
$ T( A# _  d) t9 w# S7 ?7 j# f- z4 V  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
% ]3 G+ v7 X8 B  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
6 o7 s+ _$ V/ j- m) ^  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";7 `- I: g+ P+ d$ @. T
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;/ @5 u& V9 A) x# D" t" ?1 B
  查询时间:select now();
# p, o: ~! M' w( B$ O  查询当前用户:select user();! `+ b; D, r, S( d% |
  查询数据库版本:select version();# T5 q8 r/ B" n6 m
  查询当前使用的数据库:select database();8 n+ i  a9 |' g  U, x4 n
  
; T. Q8 V7 ], g2 D- Z8 P- r6 W  1、删除student_course数据库中的students数据表:
- _* `8 t0 t1 J" _$ |2 t% O0 c  rm -f student_course/students.*9 Q8 C$ Q1 V2 J5 z5 O) J/ l" q
  
/ j+ u, }$ l' [; E5 a+ i3 c  2、备份数据库:(将数据库test备份)
. w$ {. s5 ]: c" i0 e& I7 B  mysqldump -u root -p test>c:\test.txt* o$ k  D' c& u6 R
  备份表格:(备份test数据库下的mytable表格)9 |- V! U) c, V/ K
  mysqldump -u root -p test mytable>c:\test.txt
6 L0 x4 d0 z1 Z; h/ V  将备份数据导入到数据库:(导回test数据库)8 C* c7 ?! \) Z& Y
  mysql -u root -p test<c:\test.txt
/ ~9 n1 p1 v+ f. G2 x5 h4 T  ?) F  
# h. V9 p% t1 O1 T3 E  i3 f/ G  3、创建临时表:(建立临时表zengchao)
$ V2 N, n0 G9 z. _, S4 f  create temporary table zengchao(name varchar(10));
+ z- d3 J0 h& b- Z, P  2 j: c, j- ]: m( a% K1 y' c  k
  4、创建表是先判断表是否存在  n, Z3 t' j8 c( N8 w7 ^
  create table if not exists students(……);$ x- K* b* ?+ m) t
  7 x* B' w; H5 k7 Y
  5、从已经有的表中复制表的结构
$ l- s3 ?2 b8 N6 C5 \6 @% K  create table table2 select * from table1 where 1<>1;
( o2 q9 W+ n; y3 ^7 g' j  9 d* j: G2 d9 J" m
  6、复制表& E) m3 P6 _! M% x+ M) D. J
  create table table2 select * from table1;* [2 e9 f6 }, z4 x% Z' W5 Z
  ( V& _1 F2 p5 E) q0 y7 G4 z& V
  7、对表重新命名
3 S& i0 {$ B! j3 k7 _7 D  Z  alter table table1 rename as table2;
/ ~4 N, D0 T( O6 Q! O/ |  7 |- G! e" D; ~. w( f
  8、修改列的类型
4 t3 Y* T9 U  [3 V- _7 e6 k  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned5 M6 |% l( j6 L" t
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
: F- H0 v5 B4 C# X) w  
) B  z" g! ?$ V9 |' F% @  9、创建索引
1 z5 _% x4 d0 k. O( D" H+ k  alter table table1 add index ind_id (id);
1 j9 h- x5 ?9 C7 E  create index ind_id on table1 (id);5 C8 d% _+ J3 F4 B9 G7 T
  create unique index ind_id on table1 (id);//建立唯一性索引' K8 ]. n9 g1 K* V& ~; c0 G8 r
  
. I4 M, }  C* k( ^7 t: i2 t  10、删除索引. H* q  ]* z" f! R0 V* I0 I* p
  drop index idx_id on table1;, K% r# \- t+ j. C" L: q8 @
  alter table table1 drop index ind_id;8 I5 w7 X& U& e" y8 N+ o
  
8 k" _7 V+ I/ \# `! _% h" g  11、联合字符或者多个列(将列id与":"和列name和"="连接)0 O  z3 e) K  `" m3 ]# `* v
  select concat(id,':',name,'=') from students;5 P! i  }& g" d
  
5 ?8 q, V! A8 ?. ]" I" c! z  12、limit(选出10到20条)<第一个记录集的编号是0>
  ^( C, Y! H3 R- f+ Z: w' D  select * from students order by id limit 9,10;, p2 U9 G$ A! E# ?+ {, V
  
5 A5 `  ]) x, l% o0 X  13、MySQL不支持的功能/ X, [9 @5 k8 u7 c. _( X+ H( j
  事务,视图,外键和引用完整性,存储过程和触发器
* i& Z$ D* h, G4 l, T8 [- |  
5 H! j7 J0 ?! m" P9 c" C  
  D% }/ z0 E7 E1 u  14、MySQL会使用索引的操作符号
" G( B& j  c7 K) ^7 x  <,<=,>=,>,=,between,in,不带%或者_开头的like! K3 l. z% C! X7 c
  1 U! t" N2 W# b' i% t9 d7 A6 i
  15、使用索引的缺点7 O5 T7 R, v0 D5 o- e) e
  1)减慢增删改数据的速度;
; b1 r( H. P# Y. m  ]  2)占用磁盘空间;
+ ^& b6 O9 t9 M  ?" ~' l  3)增加查询优化器的负担;0 K3 p$ ~7 [1 T3 C% A& G+ `9 R
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;. ]7 Z' E0 X  @5 E1 R
  
' O4 p9 Y0 K! z* v% ~7 ]0 ?  16、分析索引效率" b! A0 R; C# ^0 X" {
  方法:在一般的SQL语句前加上explain;
2 P8 M) B% p# o; E  分析结果的含义:
$ B1 |& b1 a# F& l2 i  1)table:表名;
% z6 P' j& t: w! I9 j  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
, z& J: G) D& L% q0 o  3)possible_keys:查询可以利用的索引名;
+ g4 y$ D' Z6 v. F  4)key:实际使用的索引;
' {! V; P' _& Q  q6 r/ I  5)key_len:索引中被使用部分的长度(字节);0 F, G+ f3 k0 d  [8 _( W2 w
  6)ref:显示列名字或者"const"(不明白什么意思);7 W8 a1 ?# P5 [" Q* v; Z$ Z$ ?
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
; q9 c+ C$ E$ T5 A# c  8)extra:MySQL的建议;
. _* m$ J$ n$ K2 g+ q1 k% Y/ x  * w( g) A5 E; q/ d# p
  17、使用较短的定长列7 j" h& |( C$ F3 m/ U& k
  1)尽可能使用较短的数据类型;& h+ t: z: y+ m1 K
  2)尽可能使用定长数据类型;
0 Q% I) s  _- P  M& L% i  a)用char代替varchar,固定长度的数据处理比变长的快些;8 a  W# T8 w' _
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;- u) K6 ~+ U! I' _/ M# N0 p+ X0 d
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;9 E( I: K. u- {! A9 j4 I$ Y; l# R
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
( }- E3 w$ ~2 e/ S- b" b) w. O  
* M8 q# a  C! J  18、使用not null和enum
7 w2 e3 Q, [9 M$ n& z, }3 M  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;% L3 Z" Y* ]  G$ [  t/ Q
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;) X% s8 t6 U5 ?7 O& R
  
* a) d( S5 j; a* _3 S: ~  @% N* X  19、使用optimize table
. }9 Q5 {" R+ g, I( G/ I( R  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
9 _; [+ O/ N  A8 P  
  f0 l0 I- K" y! R0 T( H& r  20、使用procedure analyse(). W4 J/ g4 i7 J1 x/ v
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
7 \) w, t1 p3 z0 I0 f  select * from students procedure analyse();0 M# A2 k# @7 n0 v) _
  select * from students procedure analyse(16,256);
4 B" m) e5 r% V  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
) Y2 a8 _6 N& U  
9 M9 B3 x# r9 [. U( s: ?4 x  21、使用查询缓存% z9 |- w1 a& }& Y- e
  1)查询缓存的工作方式:5 a6 z, a( y% \. l* e/ j2 V! h& Y- M; U
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。7 v8 n% Q3 n, g* n: N' {2 ~
  2)配置缓存参数:
+ x4 H# G. O3 N8 b  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
  @2 U* `6 ~8 u, v% W  P1 T  % \4 Y2 a) W3 [: c
  22、调整硬件* g! ]( r" P+ ?% c
  1)在机器上装更多的内存;' f  E1 |# ~* h9 ~& M: d
  2)增加更快的硬盘以减少I/O等待时间;& q4 [2 i/ e4 q4 u; r4 |
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;+ U# k6 b: T9 f$ ~" _
  3)在不同的物理硬盘设备上重新分配磁盘活动;( o2 G' w! L  v# I  w2 h
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
6 P8 r0 B2 q3 v  i
回复

使用道具 举报

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

本版积分规则

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