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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;+ l4 m  D. H0 D( V
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
* W5 d3 D2 G" v. `  ~$ C8 p  列出数据库:show databases;
' L+ M; x" }6 [: N7 M5 G& {  选择数据库:use databaseName;
0 H$ ]2 i& R) D- }  列出表格:show tables;( S" D$ o6 G4 r$ i( S. V
  显示表格列的属性:show columns from tableName;, q- f! x2 c8 M! L/ p8 C
  建立数据库:source fileName.txt;
" j- Y$ L% F( L# _( v( f  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
4 O& W8 a9 H* J8 |: R  增加一个字段:alter table tabelName add column fieldName dateType;" _# q: N" c0 |5 ]* J: }" x
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;( R/ |0 a6 \: F
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
' a/ g* e$ S; c1 f" h( I3 I  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
, \6 _: V3 Y, s9 a3 B: Y2 @# f  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;1 d2 M( ^1 \3 G" u0 y* N5 h
  查询时间:select now();
# N8 U& [) ^6 j9 p/ w  查询当前用户:select user();
. p9 y1 \4 t0 ^7 [6 s1 Q: I  查询数据库版本:select version();
8 R/ E  d/ B/ e/ y: ]  查询当前使用的数据库:select database();( H2 T% Y. @* K
  ; r& k/ G7 Q' j! A. s1 _. n9 Z
  1、删除student_course数据库中的students数据表:& l4 j. r" u) _% l" Q+ h  D: a
  rm -f student_course/students.*
" Z! w$ y" l( T4 e5 m" o  ( g2 f- }4 {8 v- r3 J3 [
  2、备份数据库:(将数据库test备份)
# c- \& F5 j! w  mysqldump -u root -p test>c:\test.txt/ M4 d& ^) V8 t! H( w; G' Q) C0 c
  备份表格:(备份test数据库下的mytable表格)5 m* Z( U* Y: B6 M/ c# l) g
  mysqldump -u root -p test mytable>c:\test.txt5 g5 ^& n$ O% H: @& K; n
  将备份数据导入到数据库:(导回test数据库)* Y) A+ J( H& S' L7 N
  mysql -u root -p test<c:\test.txt
' t# Q* G2 S4 u* j  
7 H, @' h# r+ }8 y4 M  3、创建临时表:(建立临时表zengchao)3 k- }% t# M" Z- C! l4 E4 A
  create temporary table zengchao(name varchar(10));. h" V9 p7 b$ W+ j
  
6 h9 b2 u3 h" y  4、创建表是先判断表是否存在/ \: R9 Z8 E* o1 |. @
  create table if not exists students(……);5 {8 g# p6 f2 G# N/ S
  5 J5 E0 p! N2 M# W
  5、从已经有的表中复制表的结构* H8 D5 X) l" C; h3 o3 E* o
  create table table2 select * from table1 where 1<>1;
6 c. C8 U4 s0 o' s1 a' c& c- j  
3 o: |  q7 h; v: J" X+ X7 S  6、复制表! w1 l* g+ a+ e* u4 n& Z, v
  create table table2 select * from table1;
: M; T8 `0 I$ v% T5 Z/ [1 y  
0 Z( }& J* x: s. R+ f6 U1 f  7、对表重新命名" P) |1 r$ `/ p8 ^: W  {
  alter table table1 rename as table2;5 f% R* I/ R: c2 i4 D9 }1 e
  6 h2 Y& U0 w: p, Y' r+ E. T, [. n
  8、修改列的类型
" p# p& f( _3 ?2 u* x3 B& |8 ?  P* K  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned& i% V" x0 U( U2 v- I
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
* X. Y! B6 z* K& R0 ?% [' m8 c  
/ s: U4 _5 K! z  9、创建索引
9 O4 _4 W5 W3 z; ~$ A0 Z, s' {  alter table table1 add index ind_id (id);
) @' f2 o: Y6 X8 ^$ d% s, t+ O! ~  create index ind_id on table1 (id);
* P* s( j# Z  K6 l0 x* ~  create unique index ind_id on table1 (id);//建立唯一性索引$ q& Q1 _6 H- q9 I7 n8 z: f
  : j; d* {2 _1 T0 g: N/ s$ ~+ l1 w5 `
  10、删除索引* \" [4 K. O: a# ?: \7 }% [
  drop index idx_id on table1;0 m4 k9 M4 F. @9 i0 C' Z
  alter table table1 drop index ind_id;5 ~( w9 o0 P3 I" W$ C9 w
  
, l* ]# Z! ^- s4 \8 J  11、联合字符或者多个列(将列id与":"和列name和"="连接)
# g  F; j+ g; e, B" t$ J  select concat(id,':',name,'=') from students;5 M% R' k4 X3 _* ~& ^6 r0 M" C0 z
  ) S/ P& Z- c( A+ ~# I
  12、limit(选出10到20条)<第一个记录集的编号是0>
+ ~! F% `. N7 \1 G/ D! x  select * from students order by id limit 9,10;1 j; v+ n; m/ G2 M& c
  
8 y: O; Q$ @& b# N5 g+ }- ]  13、MySQL不支持的功能
) S0 X5 s6 T, {) ~1 C6 k; G) I! [  事务,视图,外键和引用完整性,存储过程和触发器
: U8 @' k) L. V+ |  * ^+ d6 u! q0 f8 J! B
  
2 d( X) U2 J5 B  14、MySQL会使用索引的操作符号
! ]7 y6 s& a0 U  <,<=,>=,>,=,between,in,不带%或者_开头的like
8 u$ P2 K3 M: Q+ t( v  ) O0 e: N9 ~6 i
  15、使用索引的缺点1 U( U% ~; e- C
  1)减慢增删改数据的速度;3 O5 s" N/ |0 `& d. R* ^
  2)占用磁盘空间;5 y# o- B2 a  h% y3 \5 t
  3)增加查询优化器的负担;& g) X; u* Y! h" ?+ `4 K
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
2 X. X% X7 W) n+ b2 c3 U  
: k: a" i3 U3 t" f2 I5 m( Y- m* W  16、分析索引效率
& `) X2 R  {" t( Q) u) Q  方法:在一般的SQL语句前加上explain;
( U5 V0 c5 t1 }% u5 Q6 h5 J  分析结果的含义:* r5 M. h, F; u5 T1 f1 ?
  1)table:表名;" Q5 |/ \% P- Z1 g6 ^/ a
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;0 s; b) p  {- D/ i1 W
  3)possible_keys:查询可以利用的索引名;
$ r$ T) S8 _, J1 j% z2 Z. c/ P3 E  4)key:实际使用的索引;
, u  H& \- a0 ^3 S+ K  5)key_len:索引中被使用部分的长度(字节);
/ W& y6 k* ]' a. u" @) y2 ]' x7 u6 ]& I  6)ref:显示列名字或者"const"(不明白什么意思);
8 @! u. [1 X- G* O; i" h+ z  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;; d- I: f) I0 s; v4 e
  8)extra:MySQL的建议;- R+ F' i) x$ t% U( P- h# |
  
7 j& a7 p7 d9 K- v  17、使用较短的定长列
0 I& w  e4 g3 c6 r7 a  1)尽可能使用较短的数据类型;* R' p" S3 D1 Q1 q6 q* W
  2)尽可能使用定长数据类型;; L0 |* P! h2 [9 f
  a)用char代替varchar,固定长度的数据处理比变长的快些;
* P( s" u6 D/ K+ \9 b/ ?' t1 g; Y9 N  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;! m  ]0 n6 r* ]! ^
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;: A. B4 B& \, k- j; l4 x5 F
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
$ i( Z( o, Z# E" X5 g6 K" T+ y2 U    k& H/ n- k* b8 K1 G* Z% i
  18、使用not null和enum
5 p: c' S$ L/ |3 @  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
) U) b3 u0 s5 L: [2 q  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
3 T, i) h9 F- e5 k6 a' _; O  & b& Z/ A% [- `: P% f
  19、使用optimize table
' m" Y6 m, U: V: {- L  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;# Q% g1 `. B% `$ n  B  y' |
  
5 N- `' H" F$ N# G- ]  20、使用procedure analyse()  o$ a0 c: n% R+ y0 z
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
+ R' r+ ]$ g% l  select * from students procedure analyse();& U7 p* R. c5 d% T
  select * from students procedure analyse(16,256);
8 V! P5 k) x  U* R# r( e  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;' t2 `4 J* p: r+ I
  , r- ~7 D' U( V
  21、使用查询缓存
9 }# X( {$ s5 x4 k  1)查询缓存的工作方式:' o  q: m  f+ j) V
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
1 b' l. g. ]. M  O: |( L0 g$ w* z) `  2)配置缓存参数:8 |* v& p+ Z8 u
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
! Q, _; J* g3 F$ H8 T% j# ^5 {" o  
% s4 v- u! h/ V. r  22、调整硬件- @) j" W  m& r6 }; f( U+ X; P% \
  1)在机器上装更多的内存;) C1 q- a, d- i5 J
  2)增加更快的硬盘以减少I/O等待时间;$ G& H# v  Z9 C" f' ]
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
* q; ~7 U# Q, E2 T+ r0 i  3)在不同的物理硬盘设备上重新分配磁盘活动;+ M) R% L7 g% t2 u5 q+ t! c1 ~; w
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。6 @6 e7 w4 h6 T( L3 H/ }
回复

使用道具 举报

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

本版积分规则

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