找回密码
 立即注册
查看: 3143|回复: 0
打印 上一主题 下一主题

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
. T, `' J& Y; a  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
% o. U- w3 b/ L0 g; ?  列出数据库:show databases;* r& s' \- W3 {. }: R
  选择数据库:use databaseName;
8 G7 T# [( `& R  列出表格:show tables;' g' b  a8 h( K5 k
  显示表格列的属性:show columns from tableName;
  n) k3 B, N, T+ K" O  建立数据库:source fileName.txt;7 @  Y! `( w. J1 Q4 H" ]# i2 u2 m, [
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;3 ^+ A' |/ H- M7 _3 ]) e! f
  增加一个字段:alter table tabelName add column fieldName dateType;: c# S  Y3 A8 @9 ?
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
3 n2 m( N0 F# ?( [- P4 n) v  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;7 [+ a! i# v# }- i2 J' U
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";3 ?9 B+ n2 {+ V# J
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
, ?0 b' A9 f5 Q' _  查询时间:select now();
) L) O5 l1 C8 d: w$ H* c  查询当前用户:select user();
* u/ b$ D( h& B" f2 _  查询数据库版本:select version();
; f# ?( J( ~; f, Y4 ?  查询当前使用的数据库:select database();
2 I1 ]* d" X5 B/ K  
5 v& I1 t' y# ]7 P" O- @  1、删除student_course数据库中的students数据表:" |% w; J* {  d; _8 U* A! ~
  rm -f student_course/students.*: U9 z3 u! K/ C) F
  
7 [; m9 E" H( k( W  2、备份数据库:(将数据库test备份)
$ l, a& @$ U! m! H7 v' n  mysqldump -u root -p test>c:\test.txt  `5 X4 n* {5 P+ u7 m9 l( n
  备份表格:(备份test数据库下的mytable表格)
: m* W/ i* K. Q  mysqldump -u root -p test mytable>c:\test.txt$ N& P1 T0 Y: V; d0 o
  将备份数据导入到数据库:(导回test数据库)* D' d' z) H- @. Z/ P+ w
  mysql -u root -p test<c:\test.txt
* v: R9 c1 {/ @& g- D7 X( h0 V, r  0 D; E! N7 W5 R1 I
  3、创建临时表:(建立临时表zengchao)
4 w/ E/ ?% w  F% U  create temporary table zengchao(name varchar(10));+ K1 c1 p  e, Y
  0 K; \1 E" {) y
  4、创建表是先判断表是否存在
) n+ T9 O  g! o0 }/ O  create table if not exists students(……);2 W4 G; X  t9 y+ W8 A. F" D
  
& }' P, y  S7 n9 B$ _4 e3 c  5、从已经有的表中复制表的结构
# e* G% Q0 U! e# E2 f4 j" Q' j3 g, _  create table table2 select * from table1 where 1<>1;
# _' b0 N; B- S7 `* A; W  
- S, G+ V& T7 h9 k& q1 @- D  6、复制表
6 a+ e( O( W( W4 m5 c  create table table2 select * from table1;3 }+ T( x6 b$ P  C# y  x1 ?
  1 U+ Q+ ?2 X+ j* M! H' s3 h, b
  7、对表重新命名# T& o& n+ ~5 @# l8 _+ m( D
  alter table table1 rename as table2;4 {( q, |  K- K: M: p) a$ E
  
  x) A0 N. L9 d: e* m6 C  8、修改列的类型
# U' q/ N5 L' V( l+ @$ l( l+ a  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned2 a8 e8 ~. }( }( V9 s6 n" C+ x
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned; r- P  T1 e  x# u
  
& W" {# e) }5 {2 ^' o  9、创建索引" t+ f/ M5 i" I+ W
  alter table table1 add index ind_id (id);
5 r6 u# Y) ~3 y; o1 o9 H  g; y. H  create index ind_id on table1 (id);+ `' L) n+ w" @/ j' Z/ R! d
  create unique index ind_id on table1 (id);//建立唯一性索引
8 G5 R3 p) y1 n1 q. B7 ^9 m  
! H- g% A) N1 c8 Z, p) C( k1 |  10、删除索引
, D: Y+ V- v6 T$ H8 O. N* f0 i, O  drop index idx_id on table1;
) @& n4 ~$ t5 D* b3 V  alter table table1 drop index ind_id;
4 f* T# z' W0 @) {  1 G1 ?. i& n4 n7 U3 n' U+ f
  11、联合字符或者多个列(将列id与":"和列name和"="连接)) s; N1 a; t$ Y- z
  select concat(id,':',name,'=') from students;' H9 F  ~# O5 F1 B. c4 s: V& O
  $ M) H8 u' s: U- g
  12、limit(选出10到20条)<第一个记录集的编号是0>0 _6 I" M* r; ~) c9 ~7 A* l
  select * from students order by id limit 9,10;; V2 w0 P' P7 g6 v( S3 b
  2 a; H$ b6 @- F- U- K
  13、MySQL不支持的功能
5 k/ q2 f1 |: }6 ]& t' L. F3 k  事务,视图,外键和引用完整性,存储过程和触发器
' s7 [3 ]( g/ A2 p4 `  3 B. C9 _" ^0 c
  
9 {! e; k& {: _; g9 t  14、MySQL会使用索引的操作符号
. j$ L3 f% d$ j' O  <,<=,>=,>,=,between,in,不带%或者_开头的like
5 F7 q, I3 e$ W( B/ i* S) E" [! c  / k1 y& s) I% q7 M+ |& `3 m0 @
  15、使用索引的缺点
2 K- ?) E1 e# Z( r' a  1)减慢增删改数据的速度;3 M" f1 R- ], d; J9 j. ?) \
  2)占用磁盘空间;
$ {. B6 N2 e/ z+ a  3)增加查询优化器的负担;9 q- x: N; C* h! j) N
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;; q0 H5 a$ n  i8 y2 h9 r! D7 N
  . \# c# z; L5 R3 U" L/ @4 h' v0 ]/ r
  16、分析索引效率
0 |+ I" s: b5 v6 l$ _; H  方法:在一般的SQL语句前加上explain;6 C9 Q- E' E  Z6 H
  分析结果的含义:
4 p* H3 O  L; l' i2 H! P  1)table:表名;1 a+ R$ Z* E3 Q8 R( C3 }4 k
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;$ {: z' g5 Z; t) F
  3)possible_keys:查询可以利用的索引名;
/ u" J$ C: x! F+ i' l) @6 `2 _  4)key:实际使用的索引;
7 ]: q' e& u) n9 \6 A  5)key_len:索引中被使用部分的长度(字节);
9 K' }' t2 r* h! Z  w0 d: \  6)ref:显示列名字或者"const"(不明白什么意思);) }# Y& |+ v$ C" n; I8 F- w; A; q
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
/ q. B, c: A5 a  8)extra:MySQL的建议;1 n( q( @' T7 r% G: J" @. r' H. l
  4 S& x! y' R8 v0 T
  17、使用较短的定长列
7 M7 D/ |, u+ v( h  1)尽可能使用较短的数据类型;1 i1 ~! v5 O- M/ P
  2)尽可能使用定长数据类型;
9 r) w# N$ F+ r- ^  a)用char代替varchar,固定长度的数据处理比变长的快些;8 n: H" x# f& X: M+ x& ^' I
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
. \, [' t: s/ C3 E# _! n0 ^# C: d  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
" S0 m) }$ }! r  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;7 O  E9 M& I9 ?* G/ ^; [3 P: j
  
& L/ `# B+ C# e& V5 v' U  18、使用not null和enum
6 m3 n: B) @% F" Z8 q  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;4 }2 c  V5 B" Y  C& N4 Y4 x/ e
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
+ v* I( I4 d* Y* F  # i3 l& U8 E5 g- z* _
  19、使用optimize table
1 y% `' V2 `, W3 o1 U1 z. a2 c  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
0 p3 B% C8 ?9 \. _  ; r+ B5 `1 w8 U
  20、使用procedure analyse()1 L3 w2 v  B' n$ {$ r( G" ?4 y
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
& t6 G6 }+ [/ i4 t% ]  select * from students procedure analyse();! ?6 X) Z7 q/ B0 P
  select * from students procedure analyse(16,256);1 U5 O6 i8 i& m5 g
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;' w) o; U5 J. C1 C
  ! `7 U; @- s  f& Y
  21、使用查询缓存, ]& j" u* E: [
  1)查询缓存的工作方式:
$ f0 A+ k" h& Q1 {1 s& l- [/ b  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。5 m3 i+ _0 n( i4 [1 j4 k
  2)配置缓存参数:
0 ?+ I# |: _! w  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
' L6 a/ J6 i8 A+ b# x  ! P: R. x5 z9 |/ i; t
  22、调整硬件$ O+ m( }! b( A$ Y6 j7 [" t
  1)在机器上装更多的内存;- _3 K' t" d: ~: A1 s- F
  2)增加更快的硬盘以减少I/O等待时间;
1 ]; ]. J/ d3 f% \' x' @& d  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
/ j- J& v9 h1 A% y0 o  3)在不同的物理硬盘设备上重新分配磁盘活动;
4 R- ?+ ?% e3 B8 w2 L* m7 p  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。! u: P$ `; J, O7 F" e. [9 t. p8 Z
回复

使用道具 举报

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

本版积分规则

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