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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;0 Z1 r( k# a6 d6 l4 r( L
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
/ q# a- R5 K7 i  列出数据库:show databases;' ~5 Q/ `. Y5 p/ x0 g3 H* }
  选择数据库:use databaseName;
8 d: C4 |) W2 }6 H" S- s  列出表格:show tables;) Q9 R/ G4 v: k
  显示表格列的属性:show columns from tableName;
9 {8 l, ]2 C: k& t) S% g  建立数据库:source fileName.txt;0 U+ t. J: f) \/ _, h2 s0 P
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;0 d, {9 X( J- X: a9 k* p
  增加一个字段:alter table tabelName add column fieldName dateType;! S! k. q% t" n. w' m+ C
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;" @  |5 }- ^0 D$ y
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
- M; \; R7 C6 {6 ?  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";$ X5 H, u& T' ?% m
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
7 A& ~/ Y8 O5 G, ^) i: R* v  查询时间:select now();
( {3 [, P" N5 X1 X- X4 \5 b4 e  查询当前用户:select user();
8 t8 w7 P/ Q; w+ J1 y+ Q0 Z4 t  查询数据库版本:select version();- i$ ~# e* o+ y! C% u
  查询当前使用的数据库:select database();
6 d2 e) V$ ?' c8 K5 h1 ^  
6 M1 m0 d. @" O$ l( _5 s0 E3 \  1、删除student_course数据库中的students数据表:5 D" i" Y; V% y+ o# `% |6 K* v
  rm -f student_course/students.*
# G$ B: D7 g6 R% v  / O  H6 h# s& e
  2、备份数据库:(将数据库test备份)2 N2 Q. c' G; }+ R& I
  mysqldump -u root -p test>c:\test.txt
# p2 N" D7 p/ b9 Z* ?! }4 u  备份表格:(备份test数据库下的mytable表格)3 d) I2 i" H2 _* H" i, W- `
  mysqldump -u root -p test mytable>c:\test.txt; l4 \( y& F  f6 ~' G+ h0 W& ?
  将备份数据导入到数据库:(导回test数据库)5 f3 Y$ M0 Q6 a+ g
  mysql -u root -p test<c:\test.txt9 e0 w# y) z, y/ m
  + p& G+ B' g) x! _. Y* t# [2 o  G7 W( c
  3、创建临时表:(建立临时表zengchao)
+ j8 y  }5 t/ Z) b" T  create temporary table zengchao(name varchar(10));
4 r+ d  M4 i: C. k7 ^" [  
. p! @/ G1 W+ ^5 z1 g# T  4、创建表是先判断表是否存在9 C6 R+ l" D+ M; a" @# [5 y. i
  create table if not exists students(……);- I: \3 v: @0 [0 S9 K7 x
  
* [9 v2 y& G2 c6 F  5、从已经有的表中复制表的结构
8 V  h% `' p3 v. b" U  create table table2 select * from table1 where 1<>1;
' c# ~. m' c# I, N  [. E  O; @  ! \1 L( A3 F# d% A! C/ J
  6、复制表
" u7 K4 x- `: o9 p# U. s, F  create table table2 select * from table1;+ b* a1 I: m1 n) s" Q( B" o2 y! y
  
! W1 `1 x- X  c6 ^  7、对表重新命名$ L+ E  X) q5 X& C# h0 b1 X
  alter table table1 rename as table2;
6 v% W# Z: ~* E  
" l2 E  ~8 z1 c# M  8、修改列的类型
6 n1 y/ X1 ?* i) u" ?0 g+ O  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
8 e& ^" N2 i' h" i) J0 s% V6 I  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
# p) ~  k: k: q6 N; h: H  
0 r) E+ n0 M" F: r7 o: {3 b  9、创建索引- J6 J& {0 r* C5 p6 R" C
  alter table table1 add index ind_id (id);
9 B, ~# k- R4 b, |  create index ind_id on table1 (id);9 V3 L% M9 V! L9 h5 T, d. K
  create unique index ind_id on table1 (id);//建立唯一性索引
9 N1 K% D5 w7 w/ ^1 a; i$ Y  " ^5 h- G: q1 Z: g+ `+ j
  10、删除索引5 c' N' D8 w- W; [3 t
  drop index idx_id on table1;/ Z0 Z1 x8 n! b: h
  alter table table1 drop index ind_id;: @& h7 C7 x& C. r1 d
  8 `' X$ z. X1 @) I6 O
  11、联合字符或者多个列(将列id与":"和列name和"="连接)  q% }+ O, U+ z/ h, B
  select concat(id,':',name,'=') from students;2 f$ t1 h# N. a( b1 p+ V
  
3 c) c/ x9 \8 x( v6 h  12、limit(选出10到20条)<第一个记录集的编号是0>
5 r1 }' o6 e, ~& q- {  select * from students order by id limit 9,10;
' X! A7 a8 a4 {7 c' n& H' _7 A6 z) g  
" E$ q9 w1 a  a) ?  13、MySQL不支持的功能
/ ^8 x& x$ n( N% u( N. [  事务,视图,外键和引用完整性,存储过程和触发器
" |1 [& |: n( n: q# Y* U% }* n* _8 t  & ?' T8 b! S9 N' X! ]. @
  
, p& S1 k& L! o) ~/ t: |1 Y  14、MySQL会使用索引的操作符号4 S" ~" V) @5 a. w4 A- L% o
  <,<=,>=,>,=,between,in,不带%或者_开头的like: G. f4 V: `  N. P+ j* h% H: e
  3 \/ |$ k. F! V. d& I0 c
  15、使用索引的缺点
7 r: I6 l/ d- _3 q! O  k( w  1)减慢增删改数据的速度;1 Q. [6 Z. M+ J( M. @
  2)占用磁盘空间;
  e0 ?0 u( g# W. M; T4 ~  3)增加查询优化器的负担;
# j! }4 Z1 I& i4 A' G& l8 H7 @4 D  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
& S( z2 h3 Z) v: T: a- h6 d9 S8 f  
, H/ `3 l7 ]! s( q( ^  16、分析索引效率) ]" T2 K# b4 n2 L+ }' w
  方法:在一般的SQL语句前加上explain;
; l4 ]6 z2 z# }  分析结果的含义:
1 M5 r6 J0 B0 U% w  A) L5 G/ Q  1)table:表名;
2 n% ?& E" i/ L/ Z  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
# A0 x+ J" W6 U# f- `' B: m  3)possible_keys:查询可以利用的索引名;
# c8 O; K2 d; V  4)key:实际使用的索引;3 @# D/ a; ]1 \  r  g( r
  5)key_len:索引中被使用部分的长度(字节);
" d6 s1 E8 l: R( R  6)ref:显示列名字或者"const"(不明白什么意思);
8 |  N& A7 @  d8 T$ n/ L0 {  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
# l2 V; U9 y+ l, @% _+ J% E5 A" Z  8)extra:MySQL的建议;( C7 \2 I( W9 O+ V; d4 h
  + ]* }9 U. \! l3 ?  \7 @5 h
  17、使用较短的定长列$ x+ u; J' Q+ t* T, N; e. w
  1)尽可能使用较短的数据类型;
2 ~" J% e9 Z. \* F  2)尽可能使用定长数据类型;
- x& F3 g: n; i+ a8 n0 D  a)用char代替varchar,固定长度的数据处理比变长的快些;  F" L+ H; ^- w2 g, G0 G4 R
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
+ A0 h  H. F6 w/ L/ E  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;& P( [% L5 d1 ~0 Q. [, L
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;$ [% Y3 a! K' g% d; @
  
1 e" h6 B+ y, J) Q6 V4 `# g) }  18、使用not null和enum
+ h& }8 _5 p. j6 e+ B  W% C! q  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
" s  x) Y' _; \4 Z  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
, c2 {, V$ _7 u8 |  
" g! B# C; w: d3 s  c4 f  19、使用optimize table
; F2 O5 g+ ?- w: n  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
$ ^% ?$ Q6 p: \( j4 w. R  h( @. Q  
! Y5 K* o! E( g  M  20、使用procedure analyse()
7 q# O  B3 @) R, M  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:* l) K% B6 i) o/ {" I/ q9 e- Q
  select * from students procedure analyse();
6 Z0 h% R* K( g! W; n$ @# c  select * from students procedure analyse(16,256);' f# @7 B" t8 a2 ]
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
, M( N/ [! Y* r/ y9 w4 d& H  
( s8 X1 S/ D3 m  21、使用查询缓存' I4 Q! z# D: u. h6 Q6 F
  1)查询缓存的工作方式:# O) v3 O' q  U- a4 V4 j( t
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。& u6 \: R0 ^. B3 A# {" U* k
  2)配置缓存参数:. d# x+ J6 G1 q8 K
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。/ X. r) c6 E4 H+ O* O/ b' z
  , d$ g: M2 G) `8 H  D4 y
  22、调整硬件( f$ r/ @8 l2 j
  1)在机器上装更多的内存;2 c  u( e, L: q5 E, `0 [
  2)增加更快的硬盘以减少I/O等待时间;- g& S+ a5 F, Q% Z, S& P# l
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;) h; c$ I, O6 \; w% |
  3)在不同的物理硬盘设备上重新分配磁盘活动;
: g9 X/ i' u  f  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。! g& j6 ~/ o9 b3 V2 {$ j% I9 @7 E1 ?
回复

使用道具 举报

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

本版积分规则

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