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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;& w4 z7 Y$ A5 @) `7 r
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
/ R- f( n1 |0 e" g$ J  列出数据库:show databases;
, L; w! @% O% P& r: ~  选择数据库:use databaseName;
( Q; u8 q1 \  n/ J; P  i  C  列出表格:show tables;3 d5 y0 _3 n1 M# }
  显示表格列的属性:show columns from tableName;
1 Y  f, l  Z% Y+ \! J3 c  建立数据库:source fileName.txt;
$ T1 r6 ~0 r* K4 F; m  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
, C$ ?) ^9 H$ h# N; K; z  增加一个字段:alter table tabelName add column fieldName dateType;' E7 f3 y3 b0 [% l$ x% [
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;; q! w' \8 W& u% Q/ M0 X5 |; x
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
  K  [) _- C+ k& Y8 ~  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";6 n+ t; `1 r: `1 D
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 A- V0 @- x% ~0 w* _
  查询时间:select now();/ {" v, l6 u4 u/ y
  查询当前用户:select user();1 S* \$ X4 E5 o( T  Z
  查询数据库版本:select version();
8 L. o3 G8 ?$ W! w  查询当前使用的数据库:select database();* q2 E8 o+ P3 B
  ( J5 F, ?; U) L1 U
  1、删除student_course数据库中的students数据表:* U2 S0 q1 G3 ~" f
  rm -f student_course/students.*. h9 \; n3 A  A' k- [
    b* G$ i6 i5 Y6 ^9 G9 f
  2、备份数据库:(将数据库test备份). M) l8 M( @# _
  mysqldump -u root -p test>c:\test.txt
1 Y  W) j8 m  H/ t( @* J. F  备份表格:(备份test数据库下的mytable表格)
: w  ^) A5 p2 |1 c9 y# a" J. O1 H  mysqldump -u root -p test mytable>c:\test.txt
; r. z4 D( u- i) b+ }/ i2 i- R  将备份数据导入到数据库:(导回test数据库)) c+ @' \+ P: ^* s1 b# ]
  mysql -u root -p test<c:\test.txt
, |( _7 N6 r! i9 W6 N( x. Q  : q/ v2 ?& I: Q5 C: Q; w8 X6 p3 \; N
  3、创建临时表:(建立临时表zengchao)
) E6 w) N4 ^0 H6 c0 U  create temporary table zengchao(name varchar(10));
) x' l5 m: ^/ L, j  : e9 p# g; M+ Y3 |+ Q8 Q6 Y
  4、创建表是先判断表是否存在
0 w0 Y$ \5 q2 L# w$ B7 i" C  create table if not exists students(……);
( l& ?: a9 U/ M( L; u4 R8 A  
4 _2 [3 _2 m5 A  5、从已经有的表中复制表的结构
; x1 ]# R& s  k5 j! n1 U2 _" u6 L  create table table2 select * from table1 where 1<>1;
- J; ?& ^3 f& ?) S( k  
4 z) L( C* j. O' |7 Y4 z* U* y% C  6、复制表; v' _- j6 c0 `3 ]
  create table table2 select * from table1;
' ~( v7 v- S7 ]% A  2 {( Y9 x: J3 X6 u+ ]% Y6 F
  7、对表重新命名
  u' o* [, c0 g# {) j$ z" a  alter table table1 rename as table2;
& v2 v6 a% p" C  
4 B6 U; u- G# c/ \& @4 P& C7 q  8、修改列的类型! R! F: ^" Q4 `3 r& }
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned* \8 {$ Y+ I; H3 O' N1 n7 }
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned- T0 t  _' G6 }2 H
  7 `8 O5 h9 G9 R, X
  9、创建索引4 i6 R% e5 M" o, F7 F
  alter table table1 add index ind_id (id);: t4 J, t8 F- n6 P0 k8 N8 L9 O
  create index ind_id on table1 (id);7 l$ d5 @/ F9 [* q- m6 O
  create unique index ind_id on table1 (id);//建立唯一性索引
. G8 ?6 g1 u1 W+ F- V  : ?1 A5 l( X0 b
  10、删除索引
5 c- m! D3 B) f: Z8 I) v  drop index idx_id on table1;
9 Y# d$ Q* \6 f0 a9 g4 [  alter table table1 drop index ind_id;
& O: J  A5 Q, P/ @- N  
7 x1 B( r3 c% e% @+ y  11、联合字符或者多个列(将列id与":"和列name和"="连接)2 W% D3 Q& V8 a7 Q
  select concat(id,':',name,'=') from students;
+ G; v1 b, d8 u8 a  C. j+ R$ S5 x  
+ m+ l& T( G- c: n+ l6 v  w  12、limit(选出10到20条)<第一个记录集的编号是0>  u: _$ W1 g# u. P4 Z
  select * from students order by id limit 9,10;/ s5 I  K5 M/ `# e1 @: [/ p
  7 ^% `7 Q9 j) n- G8 @' `
  13、MySQL不支持的功能& M' |: O8 Y6 V1 h+ \" j7 w, L) ^
  事务,视图,外键和引用完整性,存储过程和触发器# p1 K( _/ S9 E1 u
  1 `3 \5 R, w, T) [$ x3 j7 [/ M
  
5 J- n9 H# C8 d8 H7 D- H) S$ O  14、MySQL会使用索引的操作符号
; W" H7 x; ^/ k" @  <,<=,>=,>,=,between,in,不带%或者_开头的like& q& Y2 j7 ^" D+ J) H8 y( E
  
" Z3 v: e0 ~; P6 o( j$ c3 J7 u  15、使用索引的缺点, n& s  c# [6 R0 j3 D2 V* t9 q; \
  1)减慢增删改数据的速度;
) D# _; f1 u# R  Z- S  2)占用磁盘空间;
( R8 b) l! @2 X  g  3)增加查询优化器的负担;
- C4 Z% m1 |* d( Y5 M  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;% Q% m0 ?+ _, E+ a& L2 w
  , X! S# E8 T9 p
  16、分析索引效率
# M7 B, G; U4 W& T  方法:在一般的SQL语句前加上explain;
# T+ j8 x& Q6 C9 k5 l! W: C  分析结果的含义:
0 x4 |$ ?. z5 v2 g& J& E6 O  1)table:表名;5 K. b) p3 I2 |
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;* c5 u: e- m5 d- G# r. U
  3)possible_keys:查询可以利用的索引名;
# ]( B; F5 y+ N' @' D5 E, E  4)key:实际使用的索引;
3 ^, l1 j& Z; G/ ?$ R  5)key_len:索引中被使用部分的长度(字节);
* g0 o" [7 n# D% {7 p  6)ref:显示列名字或者"const"(不明白什么意思);' L2 t- a9 H) i0 g; a7 |; B
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
! Q9 F' Y) x- f# S: q  8)extra:MySQL的建议;
  o9 |3 I8 D2 I% }# r  
8 w+ F2 E/ X& E  I2 F& H  17、使用较短的定长列3 e1 Q# F! i6 j; Z% d) E% e; U5 o
  1)尽可能使用较短的数据类型;
* i4 b0 ?! I& G4 k" i6 J0 F  2)尽可能使用定长数据类型;% k0 ~- V. ?4 }* T/ `( P3 O% d
  a)用char代替varchar,固定长度的数据处理比变长的快些;8 x$ \/ s+ {# ]- @) S7 \/ }1 T
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
) j: G% M9 l! k1 h) D# _& M  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
& Y) h8 P& \  s" d  g  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 z" Z7 R* w7 F. e# @
  ) a1 |! D, y9 o) e3 u5 T( K& w/ D) Y
  18、使用not null和enum, o- ~. {1 ?9 T3 ^; W8 V
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
1 }. g  N8 t, E  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
# D4 U4 M5 G3 l9 I8 C6 ^6 Q  
8 n1 a1 f' Q$ {/ @6 `% V( Z: t3 z  19、使用optimize table
+ A6 ?2 m8 T& c3 [" G, L  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;* ~3 q$ i- I! ?0 H( M
  3 g9 n9 X$ P1 s3 \& ~8 q! v9 P
  20、使用procedure analyse()1 Y: E' V- l% G' Y% o' w) U
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:, }6 |( l/ T1 _
  select * from students procedure analyse();
2 T; ^8 G( _2 i, f; ^  select * from students procedure analyse(16,256);% _9 D; ~# _! h  ]/ w1 u! ]
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
' _& ]* Q' u5 t  
, ], p" |: g2 a9 d7 r' [! P. z2 T  21、使用查询缓存, X7 p& d& _2 X6 o
  1)查询缓存的工作方式:
$ \  k) q) v3 Z$ D0 N0 z  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
6 }0 q' P% K4 V8 Q1 @  2)配置缓存参数:
. B  v: F0 L9 L3 I  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
! b7 \% F, d3 h: Q9 J8 a  # A( M6 q. J) A3 E3 V2 I8 M
  22、调整硬件
9 E, @# ?0 r) _  1)在机器上装更多的内存;
! |8 o  P3 B& C0 G8 [  2)增加更快的硬盘以减少I/O等待时间;
: T% H" |. o! o  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
+ [7 g  l2 _, f  3)在不同的物理硬盘设备上重新分配磁盘活动;
2 P9 V/ ~, W0 A0 R1 J2 L' p( V$ @  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。3 e6 U# ^- h6 u+ P6 l
回复

使用道具 举报

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

本版积分规则

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