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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;  o( z. ?6 z' }( g. J/ h
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
; o) ?$ Y; ]0 [. \! f- ]0 G  列出数据库:show databases;6 ^7 v- o( r4 y
  选择数据库:use databaseName;- ?6 A. s  s/ @) C
  列出表格:show tables;
0 d3 F% Q, [7 I7 l0 N$ K9 B2 {7 x  显示表格列的属性:show columns from tableName;
* y8 Y# W% _" P- a, Z, P3 V* N" N  建立数据库:source fileName.txt;
" ~+ m8 m. e# i  D) ]+ m( r  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;5 q8 |2 U+ `* y; K3 O0 [8 h4 V" x
  增加一个字段:alter table tabelName add column fieldName dateType;
: H& {' g' T7 B/ O  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;; U0 U$ W  D5 H* k. |: e5 X
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
  Z2 U1 [# f% F2 q/ [$ |  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
  n1 P) c1 z& ~; p  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
/ J* S/ s% {3 o& b  查询时间:select now();
2 e; x- K1 L: A* @2 i6 V  查询当前用户:select user();
# C  @8 r# |. ^! r' m  查询数据库版本:select version();
1 h8 e; e% E9 Q4 x# P0 c. [2 V  查询当前使用的数据库:select database();" f+ o6 ?  s  Z( ]6 [* i' |3 F, F
  
5 B- G% u7 M1 ]3 q8 a: S7 P  1、删除student_course数据库中的students数据表:1 N9 r  c; }  u9 D0 J* c% Z2 p
  rm -f student_course/students.*
4 g! O$ ]$ ~  r% p/ C( N  
$ S, l! c' g/ c, ]# t  2、备份数据库:(将数据库test备份)
3 r9 R7 n3 |2 q3 }$ {1 V9 g  mysqldump -u root -p test>c:\test.txt7 V, b: h: V( ^- ?
  备份表格:(备份test数据库下的mytable表格)
& ]/ ]* S) k% }# ^  mysqldump -u root -p test mytable>c:\test.txt, c9 Y3 m' O0 n
  将备份数据导入到数据库:(导回test数据库)
: }/ z" G9 `+ ]  mysql -u root -p test<c:\test.txt
" M9 m1 O8 z  Q8 G$ c1 f& P* b( h  6 v; C2 q" O+ {' t
  3、创建临时表:(建立临时表zengchao)! ^' R; J9 g5 B9 X0 w
  create temporary table zengchao(name varchar(10));
, C) r$ d! E6 ?6 _2 ]  : _8 t6 D( }* s
  4、创建表是先判断表是否存在( l& Z, p" Q+ o3 v' L2 X$ f% e
  create table if not exists students(……);
+ e6 y. R/ ]) j: y9 ]+ H  + S2 d) O+ r2 l) n" I; O
  5、从已经有的表中复制表的结构
" ]/ b# F4 w% {# ?, m2 ~  create table table2 select * from table1 where 1<>1;
/ n! D0 `1 i8 @  ! f: [& q, c3 e: E5 o( l
  6、复制表
- h* `3 N& L! V6 [  create table table2 select * from table1;
: R. G" H" R9 v% b5 d2 c2 @  % W6 Z! O3 \! `, U: q+ Y& N
  7、对表重新命名
) i: a1 z9 I8 X7 p  alter table table1 rename as table2;
( F- H- k7 O8 S& Q  
( o% b9 e- w: z3 A+ V  8、修改列的类型
, ~4 g6 o$ h1 U  A/ C  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned& [3 H3 m; c. k# z% W0 a+ P
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
! e7 P- ]' z" F7 U  ( c4 k) L3 G; A9 b6 l
  9、创建索引' M9 Y4 T- M. d" ?
  alter table table1 add index ind_id (id);9 e; F" ?1 N: \! ]( p7 Z
  create index ind_id on table1 (id);" z, }  q# g: f
  create unique index ind_id on table1 (id);//建立唯一性索引3 H) y, o+ f# Q; }
  0 w. X$ ^8 H0 t' P0 }) T& u
  10、删除索引* m/ ]& P4 I: ^8 z1 }' ~
  drop index idx_id on table1;, D* V! D8 ?) U
  alter table table1 drop index ind_id;
; w" s& ?$ v% Q+ o/ [0 Y1 u1 x" R  
0 B% c1 H3 _5 M  11、联合字符或者多个列(将列id与":"和列name和"="连接)8 a" R6 F# d6 ?6 b0 b* d) ~5 M
  select concat(id,':',name,'=') from students;: W& d$ C: Z  W: i
  
6 R. K+ L; l( n! p" Y6 V* _7 P  12、limit(选出10到20条)<第一个记录集的编号是0>% [( ~+ {. @0 Y0 q$ Z" {
  select * from students order by id limit 9,10;9 g  J( _' K5 g& n; F+ i
  & |# ]# C9 i2 m: _7 r
  13、MySQL不支持的功能
$ B7 d3 q$ N/ V  事务,视图,外键和引用完整性,存储过程和触发器
  D4 h* N2 N4 B2 Y8 C/ k$ v8 }  % ~. F+ B& s- Y3 z
  ( J5 p* U! ^0 @, x9 ]3 t' o( H
  14、MySQL会使用索引的操作符号0 A( {3 s, A: ^' G2 y
  <,<=,>=,>,=,between,in,不带%或者_开头的like1 t9 S! B7 l4 z
  
. I. Q! J% t1 o& b6 D  15、使用索引的缺点
4 _. V6 [- _. }" p. z6 o$ u9 @& c  1)减慢增删改数据的速度;+ r- d5 W( d* d! S) V& _: l
  2)占用磁盘空间;
' l' y% q0 K$ a$ r. ?) @+ Z& {6 i  3)增加查询优化器的负担;$ G3 F  A! Z* ?0 Q/ g
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;+ P" E3 L2 [: ^1 I
  . x( v6 m; R5 s$ M  h
  16、分析索引效率$ i$ c: ?( q. j
  方法:在一般的SQL语句前加上explain;
# F! V  B, D- }+ [0 r; g% F: a% j  分析结果的含义:
$ V/ A+ T7 ~3 Z% n! u  1)table:表名;8 f& v8 T7 A/ P9 |+ Q( i
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;& c3 M- e" S' Q: ?# `
  3)possible_keys:查询可以利用的索引名;  a% ~1 N) I/ t# a( E% Z( N2 V
  4)key:实际使用的索引;+ d; w: q2 s  M6 @2 [1 c4 C2 Q& D
  5)key_len:索引中被使用部分的长度(字节);) x( W) |4 k2 [: A
  6)ref:显示列名字或者"const"(不明白什么意思);
' {) x) `. O9 v& |9 [  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;( U9 Q% E4 N& P( {* N9 c
  8)extra:MySQL的建议;
- H  _; x0 i2 M5 K! k  Q  
6 A( Q; n  C$ T! U! l4 F" D  17、使用较短的定长列: t" E, J8 {* U& H1 K1 l
  1)尽可能使用较短的数据类型;
+ D# A( v. c/ \  2)尽可能使用定长数据类型;6 O3 J. S  B; U
  a)用char代替varchar,固定长度的数据处理比变长的快些;/ x6 w4 U2 `$ O
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
/ y8 ~' o" y' e8 p& [( t; E# a! W  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;- |8 N7 c2 D1 r
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
# M0 V2 b2 f( G5 R6 ?0 k  
9 ~+ E# H. g) [7 z: u  18、使用not null和enum8 p3 F7 Z3 z, ]6 P1 G
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
8 V6 U) Q2 Z  p5 k# D& G  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
! q/ d# |) j; {# l) q' I3 j  
- q0 d- K1 z1 B  19、使用optimize table5 g+ g9 |/ V3 x. O8 {6 X
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;2 y; C9 @8 l% I& V" A, `
  
+ Z) {: J6 s1 X! u( m  20、使用procedure analyse(): x2 N) f( Q4 \
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:' t# ?6 a8 j# ?. e+ _# ], k& l
  select * from students procedure analyse();
& O# ^! s/ F# k( t! X0 m  select * from students procedure analyse(16,256);& M' Z: {4 K5 a& X" c; c  |6 q
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;/ \6 u1 t, F) E1 Q
  
8 E0 ~( m* ~4 w. R  21、使用查询缓存  O, E5 U6 S& G4 p
  1)查询缓存的工作方式:+ i! Y# V* F9 Z# J2 o, h! i' o0 d1 k
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。' X! |5 U- c2 c, v
  2)配置缓存参数:9 A1 a/ n9 H! Q3 a) m- c
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。4 ~* F( r# G  Y! F
  
5 t5 b9 I( I* E3 X" w$ S  22、调整硬件
% i  l6 o. U/ Y# j; z# z! g" a. M  1)在机器上装更多的内存;) t- V! T/ N( @
  2)增加更快的硬盘以减少I/O等待时间;9 e& I5 F5 T8 \5 h, @9 |$ A
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
% G( C/ k/ n* _  3)在不同的物理硬盘设备上重新分配磁盘活动;
: X" T  b% R5 v  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
9 i) ]6 ~7 T) J; \2 S9 r. {7 e
回复

使用道具 举报

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

本版积分规则

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