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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
0 ?% V8 l  a0 S1 I/ M9 k  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
/ z. Z" O0 |: s9 R8 z8 r  列出数据库:show databases;/ I$ ~& ?$ ~8 P& t6 Z# \8 q
  选择数据库:use databaseName;
& \  `/ \! U: @, k2 i- t. |  列出表格:show tables;
5 h2 I) [6 q6 R, c# k2 H  显示表格列的属性:show columns from tableName;
9 g; j4 @( }1 j9 p  建立数据库:source fileName.txt;! X8 o; G1 m) V
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
0 x) J; p9 A; P5 B- y; A9 ?8 Q! Y  增加一个字段:alter table tabelName add column fieldName dateType;3 D/ o3 n! _3 v5 E# ?) a
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
/ o2 v4 S7 Q& J$ X  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
$ u7 E% _7 \2 J: D: Y4 }6 p  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";2 w# i. T: W6 [7 r0 k: x
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;/ i1 s; B- Y/ z& T  N  r! C
  查询时间:select now();
# z7 V% |, b1 I8 G, B1 j' ^  查询当前用户:select user();
9 }+ O. w5 ^  C8 E" c& b  查询数据库版本:select version();
9 z/ b& v" \1 ?# S- \6 R) ]  查询当前使用的数据库:select database();& H* }7 [( x, b: m! t8 q0 y
  
4 }9 g$ Y) A% F) K) c  1、删除student_course数据库中的students数据表:/ x8 m; W+ o* h- z/ r, l' \
  rm -f student_course/students.*
4 m2 r7 U& @* F9 ~* K  * _( `8 P1 h% n( h
  2、备份数据库:(将数据库test备份)
! U' s; C0 i& m8 ]+ j  mysqldump -u root -p test>c:\test.txt
7 w6 V3 i( w+ H8 z  备份表格:(备份test数据库下的mytable表格)5 ]( q) i# W8 p5 Z  v7 y% C* O
  mysqldump -u root -p test mytable>c:\test.txt( ?% I6 g/ f7 i) ~+ @
  将备份数据导入到数据库:(导回test数据库)
% @3 }; G+ \2 R; {0 Y, ^2 Y  mysql -u root -p test<c:\test.txt8 T' H4 H  J! N/ n% A/ x9 [
  ) b- h. r8 C+ {- `0 G$ \
  3、创建临时表:(建立临时表zengchao)/ n4 E/ e2 y- g0 l: S" d" A6 m
  create temporary table zengchao(name varchar(10));9 G0 {  K2 g+ Y/ _: R: k& _
  
, u; U  r9 ^6 T% [/ X  4、创建表是先判断表是否存在0 j& p  n7 Q7 V: {) I# o
  create table if not exists students(……);
. n% o/ J: v  X9 K1 f, H8 C  t) |  6 g; i! B% c! O6 N  Q4 Z# d
  5、从已经有的表中复制表的结构/ ~' Z, g( s0 c
  create table table2 select * from table1 where 1<>1;
2 y3 B/ {' r+ v* T1 n1 h  6 o  A! N& ~; l8 W# ?! s
  6、复制表
3 u- h0 g8 t8 @, f  create table table2 select * from table1;! C8 t( K$ u" U( W  q
  6 [0 y% j4 x: J  R0 h. V( f
  7、对表重新命名  Y8 v$ z: r  b
  alter table table1 rename as table2;
9 ^+ b3 J) Q# t! k2 ?  
$ N$ ~# @0 w0 R' V  8、修改列的类型- e3 l0 b. e1 U) |
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
; g, f$ Z! p' L( @) a, |$ r  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
' s6 [# {) x7 r  
. X$ P7 w1 H8 ~; ~  9、创建索引
: l0 x1 v3 J, C  alter table table1 add index ind_id (id);
* ^) N) k/ ~3 R% ]2 t! s  create index ind_id on table1 (id);
2 A/ ^( K7 E$ H  create unique index ind_id on table1 (id);//建立唯一性索引7 _& x* I* R' H
  ; ]7 E, g9 g6 u' @+ R- {. k
  10、删除索引) z3 h& \( |! M* L2 a# E( [4 X
  drop index idx_id on table1;% R2 y; K! R% ~* z/ w4 h6 G
  alter table table1 drop index ind_id;! X1 k* [9 x7 c/ x0 a6 r$ c1 h
  - k% \" L. S! y- g* c- R) H# M; F
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
1 S4 g( j/ F# s, b  select concat(id,':',name,'=') from students;
! N, S9 I1 X8 B% m  f  ( F# B& x4 s  E+ @
  12、limit(选出10到20条)<第一个记录集的编号是0>+ J& }0 _, I9 G: o7 J. I) h! g
  select * from students order by id limit 9,10;
% D- A% A  \5 q( o3 f  
" Q$ s5 h4 V! X) c2 c2 U2 I  13、MySQL不支持的功能9 W3 }9 h: G; t- r& h9 _
  事务,视图,外键和引用完整性,存储过程和触发器
' u: U; L0 f1 c3 p1 M! R) i5 G% k  & F" z6 d+ O7 N8 Q7 r, e
  , K5 R+ V, [( W
  14、MySQL会使用索引的操作符号9 }- T3 s9 I4 z/ f- O9 F
  <,<=,>=,>,=,between,in,不带%或者_开头的like1 U8 }6 m& J" l, M2 s+ I$ V
  # y3 i- C% R: K( a% O
  15、使用索引的缺点7 B( t. H$ t) K9 X: Q7 b+ W
  1)减慢增删改数据的速度;5 [2 o$ \5 _$ L3 \# U' `
  2)占用磁盘空间;2 y4 C  `! D/ A! T: I! i
  3)增加查询优化器的负担;
! N# n( y) Z9 g- L+ ~" K& i2 g  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
$ j5 [% r3 K7 c* `9 U  
0 q' i8 A" C7 t, m. C  16、分析索引效率6 C4 `, a0 ]6 z1 c7 {' N- P
  方法:在一般的SQL语句前加上explain;6 C0 j# p* i5 ?6 j
  分析结果的含义:
5 q5 S/ U" m7 f) E5 @; x  1)table:表名;- B, \& h+ l5 ~* c- n
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
1 Z& f4 X/ f9 B+ T$ J7 Q" P# v  @  3)possible_keys:查询可以利用的索引名;
3 u7 s2 y* _, y1 N; p$ Q) V  4)key:实际使用的索引;
( c! Y3 D7 ?6 ~, U  5)key_len:索引中被使用部分的长度(字节);
8 @: d# w4 T; A% V) x7 U$ S+ N  6)ref:显示列名字或者"const"(不明白什么意思);! Z. P- V4 E2 u. m8 K& F
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
2 W% c6 o$ @( C4 U4 r/ M  8)extra:MySQL的建议;( m' k- q: R! S" e6 c
  6 x4 f" \  P- [( }. G% m+ M
  17、使用较短的定长列
& F, b1 R3 k$ |3 ?  1)尽可能使用较短的数据类型;
. I. F9 I& q, l; T  2)尽可能使用定长数据类型;; a5 w7 z, \( F$ I" c
  a)用char代替varchar,固定长度的数据处理比变长的快些;
. _0 l, {- l2 ?4 q) H  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;. S- H0 I# ]% ^
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;& Y% u1 t/ Z5 M# l% ^3 J) Z" ?8 q
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;# ~4 N! A0 w1 v# G2 ]2 K3 `5 G, i
  / h3 N0 {4 V) F4 D
  18、使用not null和enum, B; z% J1 f# c0 ?( V# v  E2 E
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
  D; o  |' d9 @7 t: W) t" w  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;. j: L' \9 m9 p3 R% T+ a
  ) D; }# s5 b1 L) x5 n! @/ k
  19、使用optimize table
. @$ U# Q1 D) f' P! \5 Z0 ^5 y  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
) L4 h9 p8 N5 a6 H  
6 S7 \  v/ e; J% B0 ^! A  20、使用procedure analyse()
! o8 {, V# b# {  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
2 M% K$ w# B9 p! Z  select * from students procedure analyse();' T) ?1 m" v$ \2 P$ G1 s
  select * from students procedure analyse(16,256);! W1 z4 }  N- t. N$ ]! H% I: A$ L
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;7 E1 e! ~$ S* @4 V
  0 ?3 |) ]/ J+ ~# P6 a- Z. K
  21、使用查询缓存
) |$ m* Y% c7 C8 r9 l  d# C! T  1)查询缓存的工作方式:
, m/ O/ C' H+ [2 C9 D$ a  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。3 s' R. _8 M' A) G
  2)配置缓存参数:
3 s9 T/ l3 Q& j# O9 f$ |9 X1 }9 R  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。  R9 X& |& K" f: V2 g
  
/ V2 M( m6 P- k  @" u3 o: y4 w  22、调整硬件
2 g! y" L6 d$ X  1)在机器上装更多的内存;! m, e9 L- G2 r, V0 f* J3 q
  2)增加更快的硬盘以减少I/O等待时间;* y- ~6 L$ l0 S( X1 X
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
  M# u" G, @7 J$ x4 r4 [$ V6 j  G8 M  3)在不同的物理硬盘设备上重新分配磁盘活动;5 r, g. B0 {" C" q/ N, t
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& b. Y+ M$ a* G1 ], w
回复

使用道具 举报

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

本版积分规则

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