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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
$ ~9 g5 i- V: ~  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
: ~+ W% F. ?0 Y+ c: {# B  列出数据库:show databases;! H% o5 l" u- q" B% K7 F' {: G% r
  选择数据库:use databaseName;
4 r, z+ K7 k) }( H5 C4 l  列出表格:show tables;: `8 S& u9 G9 j7 \
  显示表格列的属性:show columns from tableName;6 C5 _' S$ f* O* a7 V4 P
  建立数据库:source fileName.txt;; C! [8 o# M% L9 o
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
3 b" f) n" H. l8 M& H1 E) ]: Q1 b  增加一个字段:alter table tabelName add column fieldName dateType;
+ N8 N9 T. f8 G( P  }  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
5 h( r: L/ B; T$ @0 E( Q1 E  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
9 ]% C9 a+ N! y- E* L! {  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";- e9 z+ Y8 y: t
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
" d) B  I  z' I6 A  查询时间:select now();; Z+ @3 o, e/ K8 V7 U2 R+ S
  查询当前用户:select user();
9 \; [9 s" s! E$ Y  查询数据库版本:select version();
) [) @" ]: O) H4 U( k2 C" M  查询当前使用的数据库:select database();
  o4 u& A- j& s* ~; D  
7 r4 i9 h- {5 `# C# |  1、删除student_course数据库中的students数据表:1 D% H) ^6 D# S# K% f' }9 a
  rm -f student_course/students.*& I8 y& U# g( P1 a2 ?  N) ~
  8 u3 ]: c/ }/ z  g" j: M: t" Y9 X
  2、备份数据库:(将数据库test备份)8 O  }8 M' \/ G$ {3 _6 d  m
  mysqldump -u root -p test>c:\test.txt
* e! }. [& y/ }  备份表格:(备份test数据库下的mytable表格)  i1 ^1 `5 n) e
  mysqldump -u root -p test mytable>c:\test.txt$ b" U! p5 Y% E
  将备份数据导入到数据库:(导回test数据库)3 V# x0 q8 l- X# e! g
  mysql -u root -p test<c:\test.txt1 {# K# ?8 O- l& h0 r
  , _* Z* f+ L0 \/ T
  3、创建临时表:(建立临时表zengchao)
( [) w* I: l3 w4 L" ]  [6 R$ e9 W  create temporary table zengchao(name varchar(10));
( }$ t% W+ }- f9 b- K" d  ' }! T* B( n( T
  4、创建表是先判断表是否存在
( c* A6 i9 N' ~  create table if not exists students(……);& a. [! o% j* H' E/ B. \3 ^( Q# q
  $ x5 e$ q* Z8 Z/ a3 }4 D4 \$ h5 _% D
  5、从已经有的表中复制表的结构
- a8 W: u) l0 h  create table table2 select * from table1 where 1<>1;* L" ^/ C$ n1 e
  5 \* S9 }. l% E2 o. A( g) G
  6、复制表
9 T+ t, @$ y$ s! H( o$ {1 P- i  create table table2 select * from table1;
9 l9 E+ v( B& Q0 _5 [3 v: |  0 m% Q& Q6 B) }, o" Z
  7、对表重新命名* I- @1 \. d- Q" ]7 y
  alter table table1 rename as table2;  k! @; O. V0 n2 `* y" V$ r9 I: P
  + D$ l2 `) Y) Z+ n* h6 a3 E- Z
  8、修改列的类型
7 l  P% j8 @. X# A  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned. H8 B& S0 K3 ^3 O
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned: O# Q; W* \4 z7 I- I# M, z
  
6 D; J. r6 h" g5 M0 Y" U8 p! T5 q/ p& V  9、创建索引) F3 j. T" H; f' L- N8 h$ |2 [) `
  alter table table1 add index ind_id (id);
! K- o' |9 W: ^  create index ind_id on table1 (id);
2 C" H8 r4 y0 e# K8 ?" O  create unique index ind_id on table1 (id);//建立唯一性索引
2 h' A3 R, a8 Y! D, E$ V9 I  
8 x$ u, @4 M( l( |' Z: r  10、删除索引$ ?& |0 {% P, O" s( m& D5 S
  drop index idx_id on table1;. x  h1 q2 ?& V( w* Z" t
  alter table table1 drop index ind_id;
" M6 I5 I$ [8 u5 T) t  4 O- ?) o; t/ w0 q
  11、联合字符或者多个列(将列id与":"和列name和"="连接)% i# r6 C3 s# d- o. p1 Z) n: Z5 V
  select concat(id,':',name,'=') from students;
* h- J3 f' ^! D  
' p6 x! ?: }; Q" J3 ?/ Y  12、limit(选出10到20条)<第一个记录集的编号是0>; P& ~6 k" E6 ?% K% n& a8 J* i6 i& {
  select * from students order by id limit 9,10;
2 J7 k+ u: _2 a5 Q2 x  
- t' I- h# P+ [  W  13、MySQL不支持的功能
5 P. @; b, |/ q' _( k( b: b7 Z  事务,视图,外键和引用完整性,存储过程和触发器
* u/ S6 x! [0 V7 R' X9 b$ H  
+ I) J; Q! u/ h' X4 T  
# T. L0 d6 F  O* `3 n  14、MySQL会使用索引的操作符号
% I- m5 i4 {& D( a: U  <,<=,>=,>,=,between,in,不带%或者_开头的like0 W2 E+ {; u/ C
  
+ R; [5 B9 R2 @6 ?# L, z% y- U  15、使用索引的缺点
' R0 C, k6 b3 W8 t$ F4 e6 F  1)减慢增删改数据的速度;/ r1 h0 ]$ P1 e/ o
  2)占用磁盘空间;4 M. B1 b9 {0 N7 g7 m" V& f& K# ]
  3)增加查询优化器的负担;& l+ w9 A. p% r. t; }
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;5 |, G2 L% ^$ ?9 s0 E7 C( D
  
6 {+ |+ V5 L0 P2 G) C2 i  16、分析索引效率
, z9 N0 l- y7 e- _  方法:在一般的SQL语句前加上explain;
, C) l1 ~) J/ P  W3 I  分析结果的含义:) R7 L4 M4 x6 v2 L/ @
  1)table:表名;
2 L* E* H0 m* e  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
3 d3 o! x; D1 ^  3)possible_keys:查询可以利用的索引名;& b0 X$ t5 f( Q: }& f
  4)key:实际使用的索引;
" Q  ~6 a2 U. m( ]& x! k  5)key_len:索引中被使用部分的长度(字节);" o: X' c4 M. _+ H8 L1 `2 T. z+ u
  6)ref:显示列名字或者"const"(不明白什么意思);
- E7 u# ~$ _- S% S6 g7 k5 {  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
$ p" z8 q* T& [7 {9 X" V, f  8)extra:MySQL的建议;
; L! w# W0 \: g% o" `  % A( P: ^+ }2 ?4 |3 ?
  17、使用较短的定长列
. L+ M" j& @$ b( P; D0 `  1)尽可能使用较短的数据类型;# R1 c1 |% \: `* a
  2)尽可能使用定长数据类型;$ }* D5 _" _+ w; d
  a)用char代替varchar,固定长度的数据处理比变长的快些;& J0 O2 A1 {, Q
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;5 w, Z* ]2 B1 s% U7 S: s- u9 _. o, I
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
8 w+ T' Q) t1 N& A5 y, J9 f3 @  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
. \) P% u9 J2 G& k( a) h; p  
  ~5 K5 g6 }1 }. J  18、使用not null和enum
0 ]7 y- O2 B& E. X6 ^$ a1 I' r4 _& P  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;3 x0 e! {# X3 i" b2 I! T& ^' o
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;0 q% a) s- d0 J8 s
  & ~+ j- p0 ]3 V: v) E5 d
  19、使用optimize table5 c) r0 }6 M3 K; w9 T
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;8 W2 O# `5 ]8 J; \% I0 z
  5 Z6 `6 _. w$ _$ I) ^* E- S
  20、使用procedure analyse()
7 L; N7 T- A2 X! i* L: p/ y5 y  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:" E# C/ H6 C1 V' h# L
  select * from students procedure analyse();( O# k5 G) \4 K! P) R+ w0 T
  select * from students procedure analyse(16,256);
; V; r: C& |2 a8 M/ D* @  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
9 O/ E% N1 Z+ s$ q* S7 P/ J  
: C- `: N3 M: _1 W' b% z. o2 N3 X  21、使用查询缓存
. T% l& K7 ]1 n% \% B& A  1)查询缓存的工作方式:
/ [) s, K! T* v$ J  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
6 u/ h" P6 U( a! P0 M  2)配置缓存参数:* G1 M8 D$ z; Y$ |9 c  m1 d: O
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。. c% D. k: b( O% i
  
( `7 Y( X" p6 C  22、调整硬件
: w2 W0 J) M7 P. N0 f2 ~$ a" y6 O  1)在机器上装更多的内存;( E" D" {3 V* ]  Q
  2)增加更快的硬盘以减少I/O等待时间;) r3 v" I- p' i( [4 o+ n! N
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
: o+ x! J# T" W9 n. k) e  3)在不同的物理硬盘设备上重新分配磁盘活动;
' G& c' G$ [1 n8 v7 ]( H  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。% q. r$ k1 ^$ U( \! s
回复

使用道具 举报

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

本版积分规则

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