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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;" t( M% I, E+ ~  Z8 i, [
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
% v) {/ F  x6 z* _7 T  列出数据库:show databases;1 D+ S0 N: ^3 d' p2 J. r# f
  选择数据库:use databaseName;
8 c1 s# Y4 X! N1 ~  列出表格:show tables;3 O$ ]2 `4 B) n6 b+ m: }5 v
  显示表格列的属性:show columns from tableName;
- B  q. B- m7 ]  建立数据库:source fileName.txt;
4 f6 y" C$ j% H  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;- O3 F. d( \% }9 c' R- R& ?
  增加一个字段:alter table tabelName add column fieldName dateType;5 K7 k+ g0 l. h. y* B
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;  |5 @1 n& v) V! ?% ^4 b# ~
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
9 v+ w* |" ]8 j; c  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";4 f& J# @* \! x9 k! Z; L2 i! B) n
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;" t0 m& ?' G: V  ]2 g# R
  查询时间:select now();5 T$ M  f" s) i- B  _9 p' f
  查询当前用户:select user();8 w9 \8 L# p/ s/ e
  查询数据库版本:select version();' U" m! _# n) }, o4 M, x
  查询当前使用的数据库:select database();' x+ V* ^* n3 B- L  W
  - R" Y# d- ~1 B3 \7 X8 h  h, w% L
  1、删除student_course数据库中的students数据表:
" m1 ?6 Q; e3 U6 N) @9 O  rm -f student_course/students.*
. v1 {5 c0 k" @. O$ c. I  # f" x# @' F/ i5 C& z7 j
  2、备份数据库:(将数据库test备份)
6 v# D  Z5 H( C6 q2 K5 n5 u0 S: F  mysqldump -u root -p test>c:\test.txt# b( q4 g; L) X. J
  备份表格:(备份test数据库下的mytable表格)
7 K( [0 u: L) [  _2 ]6 z7 F! E  mysqldump -u root -p test mytable>c:\test.txt
, m9 O0 [: ?) A3 z' u* ]; \. A  将备份数据导入到数据库:(导回test数据库)* t; C- q: O# {5 p- Y: D2 i1 d
  mysql -u root -p test<c:\test.txt  V4 X$ T8 A& Q3 B2 L8 b
  ( ~8 {2 q& ?# B* e
  3、创建临时表:(建立临时表zengchao)
* r8 p( h0 a6 \  create temporary table zengchao(name varchar(10));- L* G3 S3 O1 n! d4 r
  
4 O6 Z" ]4 Z4 Y+ E  4、创建表是先判断表是否存在2 c/ |, o; {: U/ b0 J
  create table if not exists students(……);+ H7 A  x* V9 M8 U4 f" d$ N+ j, f
  
- i- U  i$ }7 O+ ]2 Y) f2 }# {8 T+ u  5、从已经有的表中复制表的结构
1 P% d3 t% ?9 v, x4 o& |) R  create table table2 select * from table1 where 1<>1;
5 H0 Q! V0 G* W% Z; c0 K    L4 X! _6 F1 p" z& v9 y* j8 a. ?
  6、复制表
$ E5 X6 R9 o9 c  create table table2 select * from table1;
8 n; `2 P& Q" s  }& p$ h& \0 f  ( t# l7 T* h: b
  7、对表重新命名
0 S. ^- ^1 W6 Q! [- l% P, q: h( P. o8 Q  alter table table1 rename as table2;
; P! \5 ^3 t5 V* t5 Z  
4 x8 Q% K8 b! T3 b, c- ^  8、修改列的类型* x% P- Y5 t& c# P1 ]5 g
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
/ Y) F/ k- U6 ?- u9 ^$ f8 a& n- J  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
& s0 @/ r8 f( K" r. ?: e  
! ?9 }) ^9 U$ U) k4 w* h# z  9、创建索引
( L$ p( y6 \$ X  q  alter table table1 add index ind_id (id);
6 I1 y2 Q9 D7 Y9 z4 z  create index ind_id on table1 (id);
9 X: u, }- ]3 q* y% k  create unique index ind_id on table1 (id);//建立唯一性索引
& a" z+ a: B! I; f  4 M( v* ~) \9 o5 T' V) _
  10、删除索引
9 W1 c" M( J4 g7 b5 Q0 ~9 Q$ e# r  drop index idx_id on table1;
$ q/ d. Q0 i1 z3 l% C% x, Q9 Y  alter table table1 drop index ind_id;2 R5 d* g. c3 Y2 W: f9 V
  
3 _( l0 N* A& g% x  11、联合字符或者多个列(将列id与":"和列name和"="连接), C! E' x5 [  H" B
  select concat(id,':',name,'=') from students;0 \$ [; i/ b1 m
  5 Z% x1 @; ^$ u" c
  12、limit(选出10到20条)<第一个记录集的编号是0>) I1 y, T2 N4 ~% X; X
  select * from students order by id limit 9,10;
. d: r+ G) z4 g9 p- N  3 q( `4 F+ l) T2 I) A# {
  13、MySQL不支持的功能
; F6 E% W& L6 E( R0 A  事务,视图,外键和引用完整性,存储过程和触发器
! }9 o$ H4 d! J% C& D" p  
" E: f0 O8 a: x5 v5 \  / d) J+ ~# R6 t! Q4 w
  14、MySQL会使用索引的操作符号8 d( R9 B! A8 C2 h
  <,<=,>=,>,=,between,in,不带%或者_开头的like2 n$ s) `; }& b4 B) V1 ?
  % ^* P: ?+ q5 q8 ?
  15、使用索引的缺点
/ q) u  v6 P3 N; Z* o; H  1)减慢增删改数据的速度;
/ d) q1 l8 u' ?8 P  2)占用磁盘空间;
# w, Q0 H9 ~# D  3)增加查询优化器的负担;4 ?& L. q' T$ P: H/ M
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;  C9 H% `1 s  I8 c5 |
  
0 B: v6 H" f/ @+ p3 M& q2 W  16、分析索引效率9 _9 [! r; d% V+ {* G# ^+ |2 o  b
  方法:在一般的SQL语句前加上explain;" h% ]$ V& h! I4 P2 i, e0 P5 W
  分析结果的含义:
% V( @/ O: J% O. y  1)table:表名;
8 ?. O$ z! P8 c) t, t# j  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;+ R* U/ S0 q0 v4 k. P/ S
  3)possible_keys:查询可以利用的索引名;$ P* S4 u6 u2 ^
  4)key:实际使用的索引;
/ \3 ?# Y3 s1 t; C2 b% @  5)key_len:索引中被使用部分的长度(字节);
. j8 n/ O/ ^4 S  6)ref:显示列名字或者"const"(不明白什么意思);
( k- B! n( n  h+ v5 p  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;8 o  B' ]3 p! V( h
  8)extra:MySQL的建议;- H. e) D& B1 E$ G
  
4 T- ]! J/ l1 \: p0 ^( _" V- e) ]3 J  17、使用较短的定长列
, a, ^* `" @$ R2 o2 p* z  1)尽可能使用较短的数据类型;8 K* H) K% n8 b0 P4 G8 F8 F
  2)尽可能使用定长数据类型;
- i3 T5 v: B2 H/ |, W) l5 E  a)用char代替varchar,固定长度的数据处理比变长的快些;$ |4 y* S* N: ~3 D0 E! D- n
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
% E  b0 G4 I. t: Z7 k/ }  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
; x/ V1 t, B/ e: j  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;% B: O: v8 ^% y3 }, f  i
  
4 X4 j. W+ f8 ~( u. H! k  18、使用not null和enum
! Z) s& [  K" V# M% v4 ?8 |  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;- g. v# b! ~) O" o# n
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
& ^& p% J9 F% S: R8 k  3 o* N' W* E/ B4 |
  19、使用optimize table5 c  g/ r8 r. t: B- P  D6 g& y$ P
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;8 M  I+ T$ h7 B% O5 Z6 O
  # F: j3 U1 H- H
  20、使用procedure analyse()
% z, r6 r8 d- H  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
6 S+ ]1 F9 t8 T# G* v  select * from students procedure analyse();
& z  S, R4 Q1 g; a. ~& E  select * from students procedure analyse(16,256);
1 }: R% v: r/ W# U# N/ U; T3 P  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;+ ^% }7 ~0 z( O, c- M
  
* U3 U; w& K9 P6 I, h; j1 u1 S. K  21、使用查询缓存" L% O- a* K' c5 Y' c
  1)查询缓存的工作方式:
1 ]9 X. \8 }3 e, C& Z  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
' r/ b/ o; ~, `  2)配置缓存参数:& j7 }, |3 S- b
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。$ i6 e$ r( d" M. x* n
    h; F  x1 [0 }$ {3 L
  22、调整硬件
# ]' c: b/ r4 e  1)在机器上装更多的内存;# z5 f. F+ i  u% f+ {' J0 ^
  2)增加更快的硬盘以减少I/O等待时间;
( d1 m) E& O* p/ X  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
# `7 {4 b# N- `; [' @) U: @7 C& E. S  3)在不同的物理硬盘设备上重新分配磁盘活动;
. T: T' L9 x6 y( |* s; g  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
" a! ?7 V# A) [& E* z
回复

使用道具 举报

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

本版积分规则

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