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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
: ]2 D6 R" M5 u' j3 Z  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
. b8 {( Q. \6 _8 n" B. z  w  列出数据库:show databases;
. ?* l5 V5 l1 Y/ A/ B, o2 @  选择数据库:use databaseName;
/ D8 g1 Z; S0 ^+ n  列出表格:show tables;. n" i; i: R/ l1 X8 }
  显示表格列的属性:show columns from tableName;* n8 Q/ n* O9 G, ^/ ?
  建立数据库:source fileName.txt;
. t9 K1 a' x; n# F  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;7 I* C; N2 \! F) E7 @0 q' J' J
  增加一个字段:alter table tabelName add column fieldName dateType;9 N$ x8 M3 g' E" q
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;' Q( v  _% x* s  ^3 v
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
( ]& z! R1 B% T& n! U  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
. v  ?$ S, u1 }3 P5 A0 N! l  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;$ s' x/ B% q- D+ N' F1 O
  查询时间:select now();
9 p, N* \  i$ K2 p  查询当前用户:select user();1 r2 |- m4 J, p# o- J
  查询数据库版本:select version();4 P7 k; {. t: W+ J; f7 @( ?, j
  查询当前使用的数据库:select database();
) n1 o0 H4 i5 }  5 b0 G1 q) j* x3 G+ }* R8 D  _
  1、删除student_course数据库中的students数据表:  m8 @9 v& u; R1 V5 X- r
  rm -f student_course/students.*
2 b. Y% l" w) o1 \  ) [. T# ^1 }. v/ Y$ u
  2、备份数据库:(将数据库test备份)0 N5 a# {0 f% _2 ~) U
  mysqldump -u root -p test>c:\test.txt1 }' L) ?8 V  p7 D& e
  备份表格:(备份test数据库下的mytable表格)
, {$ i+ z% \3 q' Z, Y& G4 _3 S  mysqldump -u root -p test mytable>c:\test.txt' [) @( I. a7 G$ ]2 s! I
  将备份数据导入到数据库:(导回test数据库)
) A, m) f7 \: M4 G, s  u  mysql -u root -p test<c:\test.txt# t0 b) l3 Q( X* U! @4 _
  
1 b. c% l& ^! U" D  3、创建临时表:(建立临时表zengchao)+ @9 ^+ {  m$ g2 e9 X) ~$ w
  create temporary table zengchao(name varchar(10));
$ y  X: f' X- l1 p& l' ~; \  5 r5 t0 L# I# j6 T/ P' x, g" M3 P
  4、创建表是先判断表是否存在% ?2 }* T+ C& ?
  create table if not exists students(……);
! Q* q$ I" D5 B2 E  8 v* ^  H) i" L2 f% G( S
  5、从已经有的表中复制表的结构
) S9 j9 ^& A6 f  create table table2 select * from table1 where 1<>1;/ g$ Y2 k' K4 d. l2 K6 I9 L
  / f- `2 B0 I( h
  6、复制表
% H/ J- _+ m4 ?, z5 }/ }: v% [  create table table2 select * from table1;
- y0 A; K$ \! s  & p% G+ Z; E* m+ @2 P& \
  7、对表重新命名
8 x! W; `. C( {' }8 T/ O$ p  alter table table1 rename as table2;  c! g& B. u, L: z  p6 d  n
  
" R& ~0 E8 W/ {! `  U# x: w  8、修改列的类型
) I5 z9 o0 P3 Z  Q4 y9 A3 c, M  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
1 S" U" g7 U9 m8 [5 Z) `+ p1 ?( U  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
3 q  Y9 E# G3 t/ t  c! V5 a7 c* s  : ~5 q3 z8 n2 C; [0 a+ w7 Z
  9、创建索引% u2 d9 b! {! A. H# N- w
  alter table table1 add index ind_id (id);" V* ]3 e  u, G) ?
  create index ind_id on table1 (id);
# y) S5 b* {0 c$ c; S" n1 }$ U! Y  create unique index ind_id on table1 (id);//建立唯一性索引  b* K7 J+ M; V8 y' I' L8 c' ^
  - t2 Z8 K4 X3 m% p% x
  10、删除索引3 Z/ N) z3 g) v1 X; H  _
  drop index idx_id on table1;% q, u0 q6 z/ G0 a
  alter table table1 drop index ind_id;% K+ A) F, Y- s% F$ X  L8 r
  6 @) V( ]' m8 Y+ p( d, C
  11、联合字符或者多个列(将列id与":"和列name和"="连接). g) Q& I1 H0 ?2 w0 r, l
  select concat(id,':',name,'=') from students;
2 x4 Z* I( P: v" v0 N* x  # H( x1 o, c$ e% g3 |1 t
  12、limit(选出10到20条)<第一个记录集的编号是0>/ |# K  s, {% c; B2 o5 {8 O
  select * from students order by id limit 9,10;
& h( [* r; v5 n+ S) H! ^) {9 L  
  }4 P, L* N& P/ h& f  13、MySQL不支持的功能. n' i, S  r# Q4 C# S/ m0 n2 ]
  事务,视图,外键和引用完整性,存储过程和触发器1 J1 i2 S. m4 _8 C% w0 x
  
1 `0 v% B7 N! G; a9 R  5 H# }$ R. F8 E9 W2 J2 D' x" z) i
  14、MySQL会使用索引的操作符号
$ v$ x" l/ m1 s5 j  X- @4 t  <,<=,>=,>,=,between,in,不带%或者_开头的like# U' j' A. r8 w0 \) e$ W1 ~
  
0 X6 O6 Q) c5 Y7 B4 l8 `: A  15、使用索引的缺点* b% r. b$ ]4 b) P
  1)减慢增删改数据的速度;
+ }3 `$ E6 y6 C3 C- D" {  2)占用磁盘空间;
$ l: k. [$ ~* S9 S' w/ i$ O  3)增加查询优化器的负担;! ]3 ~$ ~4 B' o1 j9 f, x( `
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
/ _) l: B6 |: S5 z# B  
* H( K  e+ ^. W9 W5 \  16、分析索引效率2 x: l' }! R, K, r* {! b
  方法:在一般的SQL语句前加上explain;
  m5 u, q1 m' D/ a3 |4 e* k) o  分析结果的含义:
% g2 ^* r) \4 X  1)table:表名;
& @2 z7 @9 C/ T8 n+ b  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
* y" M4 T4 A) M4 Z  3)possible_keys:查询可以利用的索引名;; c! P0 _+ L# Y+ O1 P0 m
  4)key:实际使用的索引;
  ^/ ^5 d# h# t7 A2 y! O# _" Z  5)key_len:索引中被使用部分的长度(字节);
9 e: x, o" l  ]" I: u6 G. P% @  6)ref:显示列名字或者"const"(不明白什么意思);6 F% i3 D9 _; @1 ]
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;8 Z+ g% ]$ S! A' ~, q+ b5 N' |  r
  8)extra:MySQL的建议;3 R8 }# G! p3 ?' ?4 D% O& |
  
1 q, Z6 T$ }" D, J: p" d  G1 U/ ~  17、使用较短的定长列$ _: T  I8 ]& r
  1)尽可能使用较短的数据类型;
- c) D6 s; `0 w  2)尽可能使用定长数据类型;
2 x; S8 n2 y) O! Q3 c+ _: J  a)用char代替varchar,固定长度的数据处理比变长的快些;& M# o; k; g- |! q
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;. T: g; a' H( Z* g- v7 m$ t
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
* D+ N. o  O4 W3 S  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 ^1 k$ @+ E2 i+ E+ h. v" t" P
  ) X9 f! ?+ F5 W
  18、使用not null和enum8 i4 O% `0 y! s* K0 O% I# x
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! e! ^6 B, v+ o# e0 _  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;+ i% d, f  R( D/ U; |" e' J
  
$ \  _/ B0 Q* F* O! v: a  19、使用optimize table6 p/ q! W# {8 H2 g. _0 k( r
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;9 S' W. P: ?' [  V, r) H# r
  ( L3 n+ [/ Q# p; U- W5 q  h7 R8 \7 C
  20、使用procedure analyse()
2 \8 ^2 C( X' Q8 p1 f  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
" C3 J( L9 O- i( S4 L: w& X  select * from students procedure analyse();
, K" H! r- {+ J1 @; O  select * from students procedure analyse(16,256);2 N  e! V- s' |. B9 o# ~
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;: q# ?# o5 F! F! {# l2 ~
  
* U3 m  k) T) V- U# Z  21、使用查询缓存; r, c  T: \6 Z% L$ F0 Q$ {
  1)查询缓存的工作方式:
* F/ a. _0 @! f& G9 W  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
% x7 r+ b5 y! `. u1 }5 F  2)配置缓存参数:: j2 A& s2 {  v* f2 |
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。' o7 x# ~# [& o* a$ o# W: m" F/ ?& b
  
* N0 G; ]! v/ J* X. O4 L  22、调整硬件, b5 ^% ^& c6 B* o# T
  1)在机器上装更多的内存;) s' S0 C# g& U4 E, u. q  @, t
  2)增加更快的硬盘以减少I/O等待时间;# w5 F7 m3 `: K( a6 f
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
0 q8 ^% p. ~' |' ]5 E$ C  3)在不同的物理硬盘设备上重新分配磁盘活动;  g+ `5 t2 `7 G0 N$ b4 ^6 q
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。1 C7 O1 M& E8 k+ v7 Y
回复

使用道具 举报

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

本版积分规则

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