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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;; R! ?  ]; b; M! B! \( R$ G
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
; G  A( l9 M9 V; M/ a. a- I  列出数据库:show databases;9 u6 _( y5 b( L
  选择数据库:use databaseName;% U; Y5 ?% K7 W3 G9 `$ ~
  列出表格:show tables;- R. o0 c% h, M8 k
  显示表格列的属性:show columns from tableName;
+ K; g% L* r0 @6 @+ q  建立数据库:source fileName.txt;7 ^+ d/ k# I4 \, D/ y3 f2 I# j5 B. T
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
: M$ J2 X  a3 t3 d5 z  增加一个字段:alter table tabelName add column fieldName dateType;
: W! v+ B  Y) s- A. ~* b6 E  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
+ T! I3 g  J0 _* {5 \6 I; p  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
6 M% |; O& N0 D8 u7 R2 m0 a! W% ?  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
( w: C8 j) n, @: }8 d0 H  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;* Q/ i( a4 V& G" `- j
  查询时间:select now();
2 p( b% Q3 ]. z5 v9 [& y6 M$ q  查询当前用户:select user();8 }7 V. R8 R4 O
  查询数据库版本:select version();
7 l  b  l! I2 Y( o1 o  查询当前使用的数据库:select database();( k5 x  x) J  `/ e$ Z
  
0 J7 U- \" O( D/ \. U0 n* c  1、删除student_course数据库中的students数据表:6 Z3 E0 i0 }- f4 z; ~, n, h
  rm -f student_course/students.*
* b4 x0 b  e! ]. ?$ c  
9 H. G( G( \  Y  @# G6 ^1 W- c: p  2、备份数据库:(将数据库test备份)
/ k5 S8 L4 s7 s  mysqldump -u root -p test>c:\test.txt
  a- A4 O: p* Y  备份表格:(备份test数据库下的mytable表格)
( G) E0 |8 j  Q; b$ g  mysqldump -u root -p test mytable>c:\test.txt$ F3 ~) k4 \4 N, n. a8 c- |5 ^
  将备份数据导入到数据库:(导回test数据库), D6 C, ]# I$ k
  mysql -u root -p test<c:\test.txt
4 S9 L1 T3 s) V- p, o. M/ i6 a  
+ r; b4 W6 D' ?/ k: w  3、创建临时表:(建立临时表zengchao)! m. b6 z6 z' f, E* ?9 z  k: H
  create temporary table zengchao(name varchar(10));2 l) z) c3 a: ?! {0 z; g
    h1 @; `2 n5 Q* z7 |
  4、创建表是先判断表是否存在
- t+ F; j, P- b* u$ b# _9 m% P  create table if not exists students(……);# z- p' D  U3 y& B- n2 I
  
1 C8 }/ t9 q8 a8 V  5、从已经有的表中复制表的结构7 V" w3 T2 q3 ~
  create table table2 select * from table1 where 1<>1;. v% b, ?3 N- S# A
  
7 c  z8 X) A1 \# W  e1 v  6、复制表+ n& n+ C6 D% ?9 Q) I& }$ X
  create table table2 select * from table1;: E$ D" j+ H; v7 y$ W
  : {; a7 |1 u' w( z* J0 }- Z
  7、对表重新命名. o3 Y, }0 z  X4 R
  alter table table1 rename as table2;
; x+ W  h' {7 t: Y9 q0 ?1 N  
7 ]) b; L! K) h' D8 J3 U& N2 i, q3 e; T  8、修改列的类型. E. A% j  z' q
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned5 r9 n0 J" c- K  s0 e/ X# _
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
6 R4 a5 T% y( G' t' J  
+ _) B. _1 [. ]- Y8 }5 h  9、创建索引
% t* O0 P% N1 o( Q/ s0 N% Y  alter table table1 add index ind_id (id);3 O. l! c8 u& h$ G5 V1 W
  create index ind_id on table1 (id);
/ H. G+ S7 Y+ J  create unique index ind_id on table1 (id);//建立唯一性索引9 a5 v$ a' S7 L: K
  1 Y7 y+ M" L3 Y, }* }: q8 P
  10、删除索引! K* w& D0 Y" ?+ `6 q+ [1 p
  drop index idx_id on table1;
' ~* ]7 x7 t, i4 s  alter table table1 drop index ind_id;
  E# l$ o6 C- }0 U/ V  2 P5 B; Q8 f0 x+ V1 u
  11、联合字符或者多个列(将列id与":"和列name和"="连接)9 b6 q3 r# p. X/ c
  select concat(id,':',name,'=') from students;
4 y, W) t; K- I2 U  
; F/ `  ]$ \! X  12、limit(选出10到20条)<第一个记录集的编号是0>
% s' {& r  h" M- o% B, ]  select * from students order by id limit 9,10;
1 T9 p* p! C2 H1 Q& O/ h) I  " E' {: @5 _( J7 ~
  13、MySQL不支持的功能
3 Y0 G$ `& i! D  事务,视图,外键和引用完整性,存储过程和触发器
! M0 Z* t' R# E* i! v6 }  
: J: b/ [) J% j- i  ! z5 a1 _" e: M9 H8 j) @; s
  14、MySQL会使用索引的操作符号: j7 |# @% z& u; i: q# Q" s
  <,<=,>=,>,=,between,in,不带%或者_开头的like4 d/ M& i# m" _+ o
  0 B7 U# @( u$ Q/ ?
  15、使用索引的缺点
! F1 |' p8 K3 k8 _1 N  1)减慢增删改数据的速度;
0 M( l+ `0 A1 T  2)占用磁盘空间;- ^2 L  I& M8 I3 \( D  O! z
  3)增加查询优化器的负担;
3 k  Y4 E: ~8 I$ K* z( M  a  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
( F" U, u# @9 J$ A4 `. X) A9 T2 X  1 }" Z+ A9 p$ T8 i% R' ?% y
  16、分析索引效率
! {# H& q/ W' V4 h8 K% C3 y. u  方法:在一般的SQL语句前加上explain;
+ m8 E# W  P+ m: R4 i5 |  分析结果的含义:
5 ]; }4 C4 W8 _; z5 ~$ l6 h. r0 T  1)table:表名;( N; {3 q0 S4 Y1 A+ B  K+ L
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;; @$ ?- Q0 i8 M! z7 c& B( H
  3)possible_keys:查询可以利用的索引名;: |' D. B0 F: t
  4)key:实际使用的索引;
" D! G5 A! `2 ?  5)key_len:索引中被使用部分的长度(字节);
/ G# q. D  Z( j+ z9 b  6)ref:显示列名字或者"const"(不明白什么意思);
2 R" X% A( W- t/ Z8 W* h+ T8 Z( X; ~4 D  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;' z3 Z6 _7 ~( e/ `8 a2 t  E
  8)extra:MySQL的建议;! B; [+ E! J- |4 X2 `5 f9 k
  % u9 u' r: g5 |* w! g$ X- j
  17、使用较短的定长列( L- D2 t+ Q, @# h9 l( L
  1)尽可能使用较短的数据类型;
# K: N, J" p0 {- Y# w: S9 S  2)尽可能使用定长数据类型;
4 H; D# W4 {% U) O* h/ c  a)用char代替varchar,固定长度的数据处理比变长的快些;
% z* W" y2 G2 B. d  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* v/ \/ ?" N5 {  S( M  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;9 k5 ?( L/ s9 r7 \( y) ^
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;8 Q( N/ p. m7 H0 @' E$ ]8 v5 M
  
3 \; P- e1 e- ^- j; e0 Z  18、使用not null和enum
' r/ a* M& h! c; e) F  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
) M; A2 n" `- |; \9 J3 l* j  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;6 ]$ D( |& W1 w
  3 Q; K/ i, A& U4 s0 u, q/ i/ q( E
  19、使用optimize table2 J% K( N' R  L- D
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;# @- J$ A* ]; E* j2 S; @
  
) f8 i: N3 t. |+ X. z( u2 q- S  20、使用procedure analyse()
2 y6 c% v; }. T& L; Q, t  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:2 l$ Q/ V7 L, e# c
  select * from students procedure analyse();7 c5 ?7 `1 o) x" E; r
  select * from students procedure analyse(16,256);
: h! M: c" j. z8 A- t  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;# [0 h1 Z! p9 w! @
  7 b0 B# C6 C1 V2 v# k
  21、使用查询缓存
# N: y- N! m9 J& _- I  1)查询缓存的工作方式:  E! @3 X* H2 y+ ?! N: P2 x
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。( y; X# `8 w% |; ]4 Q; L
  2)配置缓存参数:
) G" p/ b' O7 g  P  I. `/ g5 x  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
+ N/ Z7 l. U- F$ {, i  
, q  e2 E+ `. I( Q! f  22、调整硬件4 ]7 u; d& B. H2 K2 O6 z* C4 E& h" S
  1)在机器上装更多的内存;
+ B; a3 }8 V0 R3 ^  2)增加更快的硬盘以减少I/O等待时间;$ U( B- x8 _  W/ \: z3 w9 v4 v
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
% p2 i2 m' ^; K  a  3)在不同的物理硬盘设备上重新分配磁盘活动;
" P7 W& P2 [5 u& h  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
1 X# M4 x: @4 [/ c1 a7 X. O  L
回复

使用道具 举报

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

本版积分规则

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