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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;
* N: w* w8 N7 p! \6 ?  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! y5 k/ p4 H" G7 [  列出数据库:show databases;4 O; I: U0 h& u8 |! \  h' Z- K$ W) m
  选择数据库:use databaseName;
& P% a& Q( g+ @  r# I  列出表格:show tables;
* H' ?+ c* ?& N  V; E1 ~9 f# D  显示表格列的属性:show columns from tableName;# D' M0 l9 c5 y- k) e
  建立数据库:source fileName.txt;( S0 Y5 E' a+ z5 _0 Z2 ~. F. [
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
# C9 i3 `- M) c7 [+ j  增加一个字段:alter table tabelName add column fieldName dateType;
  m- D" Q' |% {# ^1 l& B  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;$ q, Q/ ]0 |9 \$ v& Y  Y3 s
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
- n5 W' N3 K! {# K/ |; S3 q' r  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
# O% b1 R+ t" s' z/ j  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
% r1 Y5 S9 a' ?9 k4 s% ^9 I  查询时间:select now();$ k, q3 n; q4 \
  查询当前用户:select user();
4 f/ j% D$ g! [  V: M4 w  查询数据库版本:select version();
# Q5 \# U& ]  d9 d$ Q/ t& d% b9 w  查询当前使用的数据库:select database();6 Z5 s' `- @4 R/ T5 V0 r
  
5 J# {/ K/ I( S2 y7 ]3 J: }9 s  1、删除student_course数据库中的students数据表:: }3 Z! z, P5 s5 x. u' y
  rm -f student_course/students.*
  J' B/ m$ e6 G" ?$ y, N  ; w3 T* u% k/ `9 C1 D; r' D( L
  2、备份数据库:(将数据库test备份)
/ I/ O8 }7 I+ y! c; [( j% z2 }  mysqldump -u root -p test>c:\test.txt
' v2 G* \- l3 C) {" Z  备份表格:(备份test数据库下的mytable表格)2 I4 B  p' J) t2 m6 A7 L1 c
  mysqldump -u root -p test mytable>c:\test.txt1 O3 c. t2 |. d8 B. ]
  将备份数据导入到数据库:(导回test数据库)
2 b+ l7 U3 {  m& D/ r( q  mysql -u root -p test<c:\test.txt
9 f" V  `0 y: j) z% |+ K* u  $ h( L$ K6 }+ ~
  3、创建临时表:(建立临时表zengchao)
( y: K0 Y3 w# k6 u  create temporary table zengchao(name varchar(10));* u4 c: x7 U" B/ k; A& B$ @! ~
  3 E' C0 }* c2 }# C8 d
  4、创建表是先判断表是否存在3 @6 J8 C% w3 d
  create table if not exists students(……);- D& U$ B* t& L# H, I& \! v: Z& g
  6 [* V2 k* M" ^9 j2 ?$ y- t( \
  5、从已经有的表中复制表的结构
/ v0 u( a! f! M% O* D  create table table2 select * from table1 where 1<>1;
# o/ X3 i+ o6 W! t* W& ]  D3 F  8 N& O# n; p' C+ c
  6、复制表8 F' s6 X/ J5 j$ C, |: f1 V9 ^
  create table table2 select * from table1;
4 d8 s# C. A/ R, H6 a  
& O. l# ]( p1 ?: L9 y( w: w  7、对表重新命名& o% M) x" H  q$ {" E% f
  alter table table1 rename as table2;. M/ ~" _$ ]9 R; g, C
  
) I) z0 m6 }$ e  8、修改列的类型: I; B, d6 b! c4 N& j7 l7 u
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
% D! z0 d, |/ g9 P+ A7 j  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned% D- T  {9 k8 E6 q( L, w
  
0 E: I/ J7 v0 ]6 {) n* M  9、创建索引  a0 ~- c# ]- j" v
  alter table table1 add index ind_id (id);
6 e, L6 \" m) J8 b- B  create index ind_id on table1 (id);. U; Y' b; F! L, f" _5 v4 A6 N4 f
  create unique index ind_id on table1 (id);//建立唯一性索引( ^% ?4 K( b( D" x9 I5 X! k
  . ~$ a+ X7 R* A* y8 H6 m) u" {
  10、删除索引1 w) Q8 G. k, J0 y( t% D1 r
  drop index idx_id on table1;
; o, n" T) V" f" A- v7 r  alter table table1 drop index ind_id;: X5 q" K; G' H5 E# e6 A0 c
  
, h; z9 P# B/ s: @0 b" J( ^  11、联合字符或者多个列(将列id与":"和列name和"="连接)
, Q" N$ p0 Y. b/ P* @$ O; h  select concat(id,':',name,'=') from students;4 g8 y+ x' f# t9 n7 ?! z' K
  " b/ f" q& z9 U7 a6 r$ O
  12、limit(选出10到20条)<第一个记录集的编号是0>
  \$ n' S' V. X7 z+ i4 F, U2 [  select * from students order by id limit 9,10;6 H  `( s% i: U) ]. C
  
# q* e, p4 Q/ t! e+ A  13、MySQL不支持的功能
' M8 k8 ~, G  `8 S# |6 R  事务,视图,外键和引用完整性,存储过程和触发器
$ D: R; w. x  J) P" c& h" d. |  ' N- ^1 u1 j; S: f5 k$ j9 F7 t
  8 Y; h1 U+ Y/ e
  14、MySQL会使用索引的操作符号. C) F* U& Y, M8 x& k" d& g9 t, W
  <,<=,>=,>,=,between,in,不带%或者_开头的like
# K3 L: r+ J! {# k! i7 Q( |  
+ `; P! [$ P0 z0 [+ e* h1 {+ w  15、使用索引的缺点) Z/ e  _/ b* K. t8 J1 A
  1)减慢增删改数据的速度;
0 p7 O2 m& m) J& l+ E$ B- T' S  2)占用磁盘空间;
. v9 \% |8 v! P  3)增加查询优化器的负担;
7 d' I0 H4 a& B3 D7 f3 z1 W" t) ~& o  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
/ v6 g4 l* [" E) k% K+ y! Q) r( M; Q' Z  $ D7 O5 i+ O% n1 S
  16、分析索引效率% g. [- t, f. X' `& X
  方法:在一般的SQL语句前加上explain;6 }2 f6 _* K# g# P0 `) R8 @, i) n2 |
  分析结果的含义:. Q  x  x/ A7 f9 ]2 x+ f+ t
  1)table:表名;% F* r6 ~8 H. k; y
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
7 [1 x3 j3 X3 a  3)possible_keys:查询可以利用的索引名;* y- D& Q; W9 F$ q
  4)key:实际使用的索引;
' J/ Q% ~/ y7 a3 Q) W  5)key_len:索引中被使用部分的长度(字节);
$ a1 ?# A0 f' Q5 Q4 V* [  6)ref:显示列名字或者"const"(不明白什么意思);5 M8 n! }$ `6 X/ u
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;; x8 d0 B# X- k8 T  g# n
  8)extra:MySQL的建议;* _! X& i$ N- b' i
  
& G  f) N3 x- J# S( X* A( f  17、使用较短的定长列$ m; e2 x; e+ Z+ `, g( Q
  1)尽可能使用较短的数据类型;
" |0 {7 Q0 G& `: F  2)尽可能使用定长数据类型;& W4 b' O; N9 p  {# S
  a)用char代替varchar,固定长度的数据处理比变长的快些;" ?% K# t0 P7 }9 O3 e6 a% g
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
9 w& ~8 O' n( w9 ^# k. O7 T  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;; E; G% m: o9 J0 R
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
* i" Z- R3 @/ I* O7 h. d  6 R, _; G: z% W, G4 D3 L' p
  18、使用not null和enum
, l- y% F  d7 E# C9 G9 Z: d  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
$ A/ W, T, h4 ^( X# `* ?0 R1 c  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;. O2 m$ Q- s9 U* p
  
2 O& D/ y1 k/ X- S( @2 _* Z  19、使用optimize table2 Q4 t. q8 W6 H9 L
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
  \7 G& b! ^& P2 [) N1 @# j  
2 k" d7 [. O+ u  \9 u' @  20、使用procedure analyse(): `8 J6 Y4 @3 `& z( {/ I
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:+ t! k+ d0 H) o& P. K- {3 I
  select * from students procedure analyse();
, W, d. o1 ]) c. M: ~' `) X  select * from students procedure analyse(16,256);8 j; X6 e5 {" d) S0 r, j
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
6 ~* C& e6 V3 q9 [( C  ; X; B1 ~1 J" D$ ^: L1 ?/ @
  21、使用查询缓存( V+ h9 h; I. z8 T6 S% u
  1)查询缓存的工作方式:
+ |5 _, Q9 |( F5 f$ U3 C  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
$ Z# v2 T  q, _1 |9 {' Y& ]  2)配置缓存参数:+ }$ @1 |7 M* d( ^) n! {% `/ q5 c
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。/ ?8 ?  }5 R: e1 W- _. L
  
$ }9 ~1 j1 A% h2 x  22、调整硬件
( C9 E1 W, N+ E! z' ~: g( S+ ~5 T  1)在机器上装更多的内存;, P2 U/ q* Y8 Q6 \
  2)增加更快的硬盘以减少I/O等待时间;
. t& b. K8 f( J1 b  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
- W% L7 ^7 L9 N; F2 i. e  3)在不同的物理硬盘设备上重新分配磁盘活动;
0 C) g; W# `/ _- c& g! }: T- Y$ W' G7 ?  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。4 i2 K  |/ ]3 M1 ^, p
回复

使用道具 举报

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

本版积分规则

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