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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
4 |$ f/ @; Y! \0 X  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
) h3 X* z7 a2 C0 y. ~0 B; X! `7 j9 ^( ^  列出数据库:show databases;) d. H5 e# o7 Q
  选择数据库:use databaseName;
2 R: J3 ?! D0 p) s; `/ R  列出表格:show tables;
! }$ t+ H' t) J" m& V5 i  显示表格列的属性:show columns from tableName;
( S2 i+ n# h+ K5 T4 b9 \/ P+ ?8 F  建立数据库:source fileName.txt;
$ g2 z, |6 k9 {& [* ~- T  [3 y: w  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
0 u/ x, i  A0 ?/ f  增加一个字段:alter table tabelName add column fieldName dateType;
/ C; W; O" M9 {1 x+ ^1 {4 a  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
5 U. k# |9 o' U* K4 {* Q  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;2 C" z) d3 l8 J0 ~2 ?
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
/ M1 R  Q' a8 |$ o! ~& |) k: C  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;) I% D2 ^- V4 N* t( P7 `
  查询时间:select now();1 V+ z# b% @( G% T8 b* f7 `/ [+ r
  查询当前用户:select user();
1 o/ v2 L* V8 `: Y! Q  查询数据库版本:select version();' a6 i) X  p9 M( Q+ |7 x
  查询当前使用的数据库:select database();
2 L$ r" K$ S) j7 J  / w9 ], d5 l4 E$ }; d0 Q3 j) X
  1、删除student_course数据库中的students数据表:' w8 [1 z2 o# J9 Y+ z5 r2 d/ p
  rm -f student_course/students.*% H6 N: e5 q/ ?$ b/ S0 N! |
  0 z" ~2 H1 T1 w" B6 z
  2、备份数据库:(将数据库test备份)
- G( Z2 M; i) K5 w1 Z  mysqldump -u root -p test>c:\test.txt- K, k/ u2 I8 v4 R6 c; v' G
  备份表格:(备份test数据库下的mytable表格): Q4 L* V  @0 `" k2 D
  mysqldump -u root -p test mytable>c:\test.txt
" {2 ?& m# i4 m' l- V' [2 z  将备份数据导入到数据库:(导回test数据库)( @# L- \! Y; q8 @
  mysql -u root -p test<c:\test.txt
! r0 X! Y, v# ?7 d+ r1 W  - O7 o7 s9 M$ o! h/ M
  3、创建临时表:(建立临时表zengchao)
5 H5 q; I# u0 p: o  create temporary table zengchao(name varchar(10));+ Y. ]" \0 K+ z8 H
  
# I! e4 r# x2 \1 ~3 i7 i" w" b9 d  4、创建表是先判断表是否存在
9 v+ @' w, c/ r3 w: m4 @  create table if not exists students(……);8 z3 c& g2 Z0 v. ~% H6 n  R
  
: {- A9 {3 }- e0 q  5、从已经有的表中复制表的结构/ Y" V. O" J# g6 M2 c
  create table table2 select * from table1 where 1<>1;
: Q7 W& P) Z' L  : [+ Q1 j8 a/ j" ?$ F
  6、复制表! g( y: `6 U& Z% [/ k1 ?
  create table table2 select * from table1;
2 U+ p% h- J& B# D. G  
1 u7 e7 K5 K. o' X  7、对表重新命名, E* T( D- ?" _+ Z' T8 E
  alter table table1 rename as table2;7 Q8 l: K2 Q: W4 ^9 s- O; E5 P% o  Y
  # N' b' R3 ?" U* P7 e/ n
  8、修改列的类型5 F) N" o# t  r5 |) x; N& B7 `
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned! l/ t8 w- u* c* X" ?2 G
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned0 E2 X9 o$ ^: G3 ?, [- W& \
  ; A0 C/ h2 [- ?# R! q
  9、创建索引
* h3 i6 N  H0 A% \/ g) I) n2 G  alter table table1 add index ind_id (id);
% N% K) v) L9 b6 T' O  create index ind_id on table1 (id);* K& U7 @2 w* l- c) `) q& i
  create unique index ind_id on table1 (id);//建立唯一性索引
2 _$ P$ @( j) d  . P  a- N) G0 |! V, V$ M7 z
  10、删除索引
/ a  A. _+ f2 q  drop index idx_id on table1;/ c7 r9 v$ [7 Z9 ?7 ^: D
  alter table table1 drop index ind_id;
/ T+ s0 J* u; t5 N  5 w5 x  C  R2 r# y  \
  11、联合字符或者多个列(将列id与":"和列name和"="连接)( C% M  x/ l- L0 G
  select concat(id,':',name,'=') from students;3 q: C( V% r8 q8 r
  $ k- i  h/ G. M  R* s7 o* S
  12、limit(选出10到20条)<第一个记录集的编号是0>. ~& n. B% l8 @! M- {
  select * from students order by id limit 9,10;/ O2 n4 A6 q( i6 {2 ^7 o
  # M' g9 z# a+ h. |8 ?
  13、MySQL不支持的功能
! `9 A4 G! T+ M  事务,视图,外键和引用完整性,存储过程和触发器/ B* q7 ]/ d% R0 P# P
  
! z( O. H! C  d/ l$ i+ H" _, s  
+ f, k/ j5 O/ g( Z& f  14、MySQL会使用索引的操作符号
1 ]$ O6 C* G# Q: u6 Q) J) [  <,<=,>=,>,=,between,in,不带%或者_开头的like' D8 {+ P7 m! ]* L! e& ]" l0 A% d! S
  ! @" P  J8 M# @
  15、使用索引的缺点
' F" c4 @! Z! A8 O% I6 R5 a  1)减慢增删改数据的速度;
$ ]" M8 i  b2 K  2)占用磁盘空间;8 }  C, E1 m% U0 {( i
  3)增加查询优化器的负担;
& f8 {  s* p/ n  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
, D6 N7 \: Z. I1 L7 P, F  6 L9 i$ U; V- v
  16、分析索引效率. c& J% A% S: p6 S6 \; ^
  方法:在一般的SQL语句前加上explain;
- u/ ~# Q( ~4 h2 k. i  分析结果的含义:
0 R+ v1 M$ B* [6 M! b: `# N) w  1)table:表名;" R# H/ X! g0 V- P
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;  x. M% n3 t! Q
  3)possible_keys:查询可以利用的索引名;5 d( X$ I  a- W
  4)key:实际使用的索引;% P: q9 Y' a9 P0 G8 @- n" X# Z5 o
  5)key_len:索引中被使用部分的长度(字节);* H$ Z9 d; r, h5 f/ `
  6)ref:显示列名字或者"const"(不明白什么意思);5 K0 x( `- O4 U2 y. o. B3 f
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;% o8 X2 l$ z" }$ K
  8)extra:MySQL的建议;
) t. W8 {. g" _1 [  # R0 V+ ?) d! w7 m1 P
  17、使用较短的定长列8 K# @" W7 F* o" K- ?( }8 H- m
  1)尽可能使用较短的数据类型;
% P8 {; q5 b  s  2)尽可能使用定长数据类型;
4 z2 N" B: ]6 g$ `+ Q1 S6 @" |! _) y. n  a)用char代替varchar,固定长度的数据处理比变长的快些;
5 E  h9 b3 o% U$ n  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;3 p3 |) d6 I% A# P3 m
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;: ~9 E* l& `/ D, h3 w8 d
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
# s* O" b, @1 ^1 b7 |! O# h  * \7 t9 v9 k+ u5 L
  18、使用not null和enum, x+ i; u$ x) @& E+ g, e' U$ D
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;) I$ T6 S/ r# o  T: k) v4 h
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
) g! u' k( \& k" [$ J8 u# g* [* }  1 [" L  ]: q# I" j  b
  19、使用optimize table
0 m. x" v# `" x% o  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
" t! D/ U: y4 @, L0 X1 U5 ^  : e3 ^7 R4 }# @4 g
  20、使用procedure analyse()% I2 B% z& X8 _
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:* [, R1 [3 c. G5 x$ X% N
  select * from students procedure analyse();5 ~0 k: L5 i+ L4 n6 }
  select * from students procedure analyse(16,256);
" A) k' ~4 b0 K% w' z. |  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;6 Z  N) {/ i0 B- f+ d
  
( ^! Q3 S% j5 Y/ T2 p* c( P  \/ V  21、使用查询缓存1 M0 G9 r' {, O! x
  1)查询缓存的工作方式:
. k( r$ u5 [/ d$ b9 B  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。4 C% o/ O" D; K& B
  2)配置缓存参数:
% W! Y1 w6 h. z; f6 n- P- r  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。7 P+ C8 K8 B* z
  
# `  m& g- i( ^, J. D" r. k+ [  22、调整硬件. |& r1 i5 N  u0 L0 ^* ]
  1)在机器上装更多的内存;: n, o+ n0 T0 N# v# P( j
  2)增加更快的硬盘以减少I/O等待时间;
9 V8 B" ^1 y& _  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;1 R' m/ R; `8 n! r+ n; Q4 \. A
  3)在不同的物理硬盘设备上重新分配磁盘活动;1 {: P- D! T  F* B! ^' J, X, C9 V3 y
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。* h# |8 v1 j$ _0 p" l+ V  ]
回复

使用道具 举报

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

本版积分规则

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