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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
2 o$ Q! p+ S1 {$ T$ p  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
2 P# R$ i% ?3 j  列出数据库:show databases;& ?& _" U3 S0 E! C9 x) `
  选择数据库:use databaseName;7 D2 L5 C0 T4 z8 @' B) o
  列出表格:show tables;" `! s3 w  c6 {2 F( h
  显示表格列的属性:show columns from tableName;
. M  t; D! z) L8 [9 |  建立数据库:source fileName.txt;  M. e# K( [% f4 {) w. {: b
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;8 a: ^6 r. H( V& l0 m3 q
  增加一个字段:alter table tabelName add column fieldName dateType;$ K1 s9 g4 V" |" I% ?& y0 M3 u
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;! g$ L! g' m# J
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
- J' e4 W4 b* `  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";3 f) [# k% _, w  l
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
: V3 z2 k& T5 Z  查询时间:select now();; `5 y3 E4 `, v9 J, s7 o% c
  查询当前用户:select user();
7 q, }$ O) M$ e6 ~1 p  查询数据库版本:select version();4 q# C; a9 D! V* k% t6 F5 K
  查询当前使用的数据库:select database();
  t! a) V3 \( M  6 V, s# N/ C& B
  1、删除student_course数据库中的students数据表:
- S- x6 a) ^" B  rm -f student_course/students.*+ v# f: C5 c- B8 Y4 Z
  
7 U/ @& p  ]6 [& F4 d  2、备份数据库:(将数据库test备份)7 _3 h  K/ y% H  F7 {4 Z
  mysqldump -u root -p test>c:\test.txt
8 `8 a: I  _4 l2 c  备份表格:(备份test数据库下的mytable表格)
! b/ N) a- _5 u; f3 `( [  mysqldump -u root -p test mytable>c:\test.txt
& F% y( i0 {( C" d: m9 F  将备份数据导入到数据库:(导回test数据库)
1 u+ q0 Y( i: E8 @, |  mysql -u root -p test<c:\test.txt  b4 c' H- `% M  d: S% R
  & S4 o7 d  D& x: X! o2 p
  3、创建临时表:(建立临时表zengchao): c) n3 K" H. N0 G
  create temporary table zengchao(name varchar(10));8 @" d1 B0 O: r: }' \8 c2 w
  
; \: s9 ?5 c, f  4、创建表是先判断表是否存在
  }8 L* K: i8 d) F( q  create table if not exists students(……);
9 m3 V' B; c3 l( Y& T+ q8 ^/ x5 q  
- [9 ^; ^! r/ p2 i  5、从已经有的表中复制表的结构3 c' N! e0 `. P, h8 g! r
  create table table2 select * from table1 where 1<>1;
1 y9 ?$ N) d2 v( R  ) |0 W9 R' P+ s% f
  6、复制表6 h; _; a4 X) q
  create table table2 select * from table1;
: v# m, L- ]1 j  9 b! o" J6 g& l/ ]# x* B
  7、对表重新命名
2 p2 ]2 a# a6 A2 l( d* Z  alter table table1 rename as table2;! E$ I: n+ N6 e; R5 a
  : M$ ~* ~/ J" ^2 V  J" U2 x. E- |
  8、修改列的类型
6 P8 z3 P- I% d2 ?& k2 B5 A  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned# ]* O# T3 r, R6 o
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned: H" g; D5 S) A& P0 y! r0 m
  & m. m8 Y- l- H8 B1 k# R8 W
  9、创建索引
8 X9 H( J5 B9 E# p- H1 [  alter table table1 add index ind_id (id);5 Q9 O9 Q5 q2 G8 ]9 ~
  create index ind_id on table1 (id);
; v6 u9 D' ^  _- K8 q- S% b  create unique index ind_id on table1 (id);//建立唯一性索引' x/ `3 G; ~! i0 u8 U. q6 p! |& E& T
  
3 o5 F( @' A: v- y9 H& e  10、删除索引
+ Y' }% I! J; o2 C: T  drop index idx_id on table1;) D% }; V1 J$ p8 t! r% h
  alter table table1 drop index ind_id;( P* c8 I8 P, x& t* V+ l' Z
  
$ n1 c% d3 M8 ~5 E7 `# X6 U  11、联合字符或者多个列(将列id与":"和列name和"="连接)  A) {: X) ~  G
  select concat(id,':',name,'=') from students;
) c3 U! T% B8 H  
/ S, G0 S! B- |& p  12、limit(选出10到20条)<第一个记录集的编号是0>9 s; V8 a8 n/ _4 J# b; R
  select * from students order by id limit 9,10;) i! _/ \' f$ V2 s, V
  ! r% f9 v7 }, z3 k9 a
  13、MySQL不支持的功能
) N. U1 J# |- w; }; X  事务,视图,外键和引用完整性,存储过程和触发器
2 ]3 Q6 m4 l% G" @# C: m% l! U' v0 Q  ! N) @& b  Q1 z; d
  
3 `" |, l$ K* m) e7 p  14、MySQL会使用索引的操作符号  i& Y. g' T6 j: M( c
  <,<=,>=,>,=,between,in,不带%或者_开头的like
$ y; H' H3 Z, k8 g% z  
2 e. ]( b) ~5 Y) v. U  15、使用索引的缺点
" ~* i& W' {- O' R) j  1)减慢增删改数据的速度;
+ Y: x+ D3 p' g( a  2)占用磁盘空间;
- [0 s$ `9 [* O  3)增加查询优化器的负担;
, ?$ a" p4 X% B8 h9 r1 g9 X1 b/ U) U" F  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;) N! y- |* M! t9 t( }
  
" ]; q: a9 f8 W* w) M- \4 ?- k3 C* ]  16、分析索引效率5 `) I' ?, {" }
  方法:在一般的SQL语句前加上explain;) o) }6 h$ m& N6 v" j3 S$ w& \+ B- ?( t
  分析结果的含义:& O2 s% R% P. X! b; u. U6 a
  1)table:表名;* P: o! s" n$ ~
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;  ^% t: T, M% A' E) w7 \
  3)possible_keys:查询可以利用的索引名;. Y' g3 \$ K9 T% T9 P
  4)key:实际使用的索引;
* Y" c" s% }  g, Q6 D5 Y  5)key_len:索引中被使用部分的长度(字节);4 B, ]. G8 ~: g9 _+ o
  6)ref:显示列名字或者"const"(不明白什么意思);- q& S% F) l' S: L* {
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
' {3 c( v5 w+ G& ?  8)extra:MySQL的建议;6 j" Z, V9 x- ?5 Q# H
  
) F" N: W1 q! W! }& R2 F( I# |4 ]  17、使用较短的定长列
+ P+ N  N3 d! C- W" s1 ?  1)尽可能使用较短的数据类型;. B$ S  p; S- ^. ?6 I% |3 h0 e4 `
  2)尽可能使用定长数据类型;9 S; \, \: Y$ \) P7 C1 [" `
  a)用char代替varchar,固定长度的数据处理比变长的快些;( _. Y  i" _9 a2 D' H- R+ f
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
+ T4 [6 V+ ?$ J. D/ N9 _6 f; w3 _7 S  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;( n7 o/ h! z- P; @0 {; R1 g
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
/ U7 i3 M! }5 H/ R* ]  
8 m) y9 I' a: m  r  a: J8 d" m6 x  18、使用not null和enum' l/ J8 P. u9 A- f5 P2 z- A" \2 A
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
1 {& M  q" s3 H1 o. x, F% y  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;1 t% E" `6 _8 y* E
  " P- I* a& j. f# [9 {' B
  19、使用optimize table
  G( |3 m8 [; t0 o: e  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;+ i( w5 _) h! R4 S1 ~; E" k- t
  # O2 h' W; G2 I9 k! w9 G' [" u
  20、使用procedure analyse()% R: w9 Y3 O% I- k
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
: I' [" H" K' @5 m# n  select * from students procedure analyse();- y# M5 A6 ^% v
  select * from students procedure analyse(16,256);
' U1 L: ^' _+ U5 U& m. n  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;0 h, T* ]# H$ g' l% Z
  
, [& H$ e  p# A  21、使用查询缓存
$ a( u5 u7 C4 T1 e3 A  1)查询缓存的工作方式:
! e/ s1 p. ^, l7 ]! P, R6 A  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
9 {& U% G% M( c, ^1 }! f8 V' Q  2)配置缓存参数:
# W8 w1 S) t! }6 @  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。, J! R8 `# y* I- f9 V
  0 U* c# T& X6 [/ S" o0 P- O9 h  e  ], m
  22、调整硬件
$ P: A. y% e5 I  1)在机器上装更多的内存;) R8 [- N& W' @! j; F7 {% T8 U
  2)增加更快的硬盘以减少I/O等待时间;. |/ ~& Y6 u6 n) [4 V( t
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
9 Y, D' |/ E1 W; {3 c" W  3)在不同的物理硬盘设备上重新分配磁盘活动;* T9 w- r3 h- {' u/ X" p" V
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。1 |3 a; y1 {! d6 a6 \
回复

使用道具 举报

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

本版积分规则

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