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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
4 D, B4 u) V! b! G# e5 K; c* s5 B  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;' y0 i6 D( A2 ~/ N4 l4 _' ~6 l* e
  列出数据库:show databases;
, |. F, _# X6 T/ Y; d  选择数据库:use databaseName;7 q, E2 m7 k# ?% t% L! N
  列出表格:show tables;
1 v4 O1 }+ F) L/ T  显示表格列的属性:show columns from tableName;
5 x% {* U! B9 ?/ p  建立数据库:source fileName.txt;
: F# ], L9 l' @7 ?" C& O' S  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
6 h3 l3 k, ~2 W  增加一个字段:alter table tabelName add column fieldName dateType;* }$ I; A% Z8 Y  q# ]
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
# J: Q# Z1 {* M4 F  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;, c. \: A+ E+ N3 X: F2 A8 `- F
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
# w" o8 k( p$ }. b1 X  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
1 ^3 u. J' N/ e  I$ A  查询时间:select now();+ Q* \( C) w7 E( ]7 @
  查询当前用户:select user();
/ t$ t. z! P; j0 H3 [, f4 Q  查询数据库版本:select version();* y2 M1 H& l2 s8 }  E
  查询当前使用的数据库:select database();( \0 d% v; a/ F5 T( D0 v* w
  + I1 G$ `8 A) P; e8 R
  1、删除student_course数据库中的students数据表:
% d0 J( l  ~% ]% E7 }  rm -f student_course/students.*2 W3 j2 _; G8 g$ D7 j# L
  + s! \% ~5 e+ I7 @% W! g7 u
  2、备份数据库:(将数据库test备份)# w3 o+ H9 ?0 z* O$ A0 o0 T0 N! u
  mysqldump -u root -p test>c:\test.txt
  F$ V" U) d+ |4 [  备份表格:(备份test数据库下的mytable表格)- j$ D3 i" d: @3 G
  mysqldump -u root -p test mytable>c:\test.txt
! N3 m- e, @) a" ~# O" l* F6 q  将备份数据导入到数据库:(导回test数据库)
+ ^2 ?5 v( ~& w0 L0 l% ?  u  mysql -u root -p test<c:\test.txt2 _0 q$ @3 d0 B2 E5 ?# n# |
  
8 x4 H0 }# L/ @; n  3、创建临时表:(建立临时表zengchao)
: R$ E5 }* u* }  create temporary table zengchao(name varchar(10));
: Y2 c! J/ X* \8 w. Q  ( q; o: d( }0 \, c( X  G
  4、创建表是先判断表是否存在
" _4 T$ V+ P5 r. O  create table if not exists students(……);
3 \0 u2 b. G, B  9 P' b, |: h9 g/ \" \
  5、从已经有的表中复制表的结构
; J% X9 ]0 H7 b5 w* J  b  create table table2 select * from table1 where 1<>1;3 m" ]1 T* [. k; A( c; O0 S
  
+ L9 @/ |1 U, S" g: B" a  6、复制表
  s% J/ H, ^2 O/ n! z$ {  create table table2 select * from table1;
2 _- x1 [- W7 y8 q  
- O; @. ~# R! X- z7 K6 s( F  7、对表重新命名9 l5 y$ U: _+ [: a! q
  alter table table1 rename as table2;* q) [: m+ L- D3 @& g1 h
  - C) a" h* h0 c( k
  8、修改列的类型
8 R( N2 }& U( ]) [7 L# \$ R  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned6 Z5 m# H1 M! c5 c
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
- `5 g; [. U; {: Y- U  6 V# l/ ~% L% i( B" L1 R, m, |* l! l) }
  9、创建索引
# A# u. f- g1 x. I7 A2 v+ [  alter table table1 add index ind_id (id);
3 t+ T. d* J, I3 ~  create index ind_id on table1 (id);
* |9 f8 R( U. ^( G4 s* x/ A( D9 i  create unique index ind_id on table1 (id);//建立唯一性索引
% |% f, h8 h* ?7 e! x/ j  
. v  O$ I0 U6 ?, X2 W; M  10、删除索引$ E8 N1 Q! l" d4 Z/ r
  drop index idx_id on table1;
& k, N0 h- Y5 _  alter table table1 drop index ind_id;
2 s$ g3 c/ W9 R; L, H4 ]3 _  
# ]7 q" @+ N1 N  11、联合字符或者多个列(将列id与":"和列name和"="连接)8 a; S  B- i- N7 V' o( m
  select concat(id,':',name,'=') from students;' u- J, g! A; k
  
# r$ U/ S1 B+ ~1 C8 q  12、limit(选出10到20条)<第一个记录集的编号是0>
; W! F/ t# k3 K  |7 ^  select * from students order by id limit 9,10;% x9 }; m5 ]& u( s/ H
  
( u  [* A, {% n' ?) t9 m  13、MySQL不支持的功能
: {5 P, b" G8 a4 d/ l: Y$ v" B  事务,视图,外键和引用完整性,存储过程和触发器: j( \( q( b0 F) R) g1 f/ E$ d6 y
  ( p9 U& O; [0 e
  : w% C; X/ J, G
  14、MySQL会使用索引的操作符号3 G0 H* v: l# s. }9 S8 O
  <,<=,>=,>,=,between,in,不带%或者_开头的like/ M3 v9 p: h& b# h% }0 h% l" E9 B
  
$ a2 c4 H2 f; D- M2 |8 H: v$ A/ l  15、使用索引的缺点! n7 r: E7 N/ P* s4 ?9 T
  1)减慢增删改数据的速度;
  \  H! s5 n/ Y$ o8 C# _$ T# k  2)占用磁盘空间;; q6 H" J8 g$ W; ~
  3)增加查询优化器的负担;
" @* z" }9 h0 [1 o! y  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;% ~0 K' E7 n& q$ V1 K  I+ E2 H
  
, I% ]1 o: A5 Z4 g- U  16、分析索引效率
3 x. B5 Y2 u! d* Z# u  方法:在一般的SQL语句前加上explain;
. A4 q4 z5 Z- S$ C* o5 x  分析结果的含义:
+ P! ^0 D5 K$ Q/ u" M  1)table:表名;% I- Z  w2 ~  w1 k3 n7 E* U
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;8 |+ ], W* g! S/ o5 G; }, W
  3)possible_keys:查询可以利用的索引名;' \3 E" t* u; j9 I7 C
  4)key:实际使用的索引;
5 }8 Z/ Z0 M* h5 I9 V3 ?- ]6 w  5)key_len:索引中被使用部分的长度(字节);
8 r$ T6 S9 _8 `( i2 A. R  6)ref:显示列名字或者"const"(不明白什么意思);
+ L( Z& P# _# Y) D& P4 @  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
4 u% u* p# h0 z9 H2 E2 n7 Y  8)extra:MySQL的建议;- X% y! G4 J- F' N
  
+ C! s8 L: U$ r9 B: u  17、使用较短的定长列% P! |1 R+ O( A1 V& a
  1)尽可能使用较短的数据类型;
9 ^5 K7 ]6 }: f9 }/ ]+ P* d  2)尽可能使用定长数据类型;
$ \% S: N! N  K# Y' O" W4 A, G3 G9 H  a)用char代替varchar,固定长度的数据处理比变长的快些;
% Y1 P/ G, d8 ]: v1 V0 A  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;; ]9 X( p+ b( ^+ X, ^0 a
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
4 j$ L6 c- A) |  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
/ T9 K4 A; i9 h7 `  
& C2 i/ E; _  n' e! u' d  18、使用not null和enum  M: g  z# E- |# E4 I% r+ T7 F0 G
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
4 A) G6 @( f0 Z' H4 w7 _  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;" `- h2 k4 \+ o3 v
  
' Q3 z9 L3 R  H' O  19、使用optimize table
' J8 Z, k6 \  G# a8 b$ j  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;3 v0 h7 F" B0 r8 i( m2 D+ I
  * F6 v0 I% M3 c# T
  20、使用procedure analyse()
; H# T: a3 {: M  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:! @( K( f* M; J: b! I0 C  i
  select * from students procedure analyse();: u6 N) e$ ?/ H5 L: t# l2 F
  select * from students procedure analyse(16,256);0 E9 P1 \5 P: h/ d
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
* ?+ ^- e  |( Y: p$ [  
+ i* a, Z$ r* [, q4 u& H% T  21、使用查询缓存' ?7 U6 A; v, `* C2 E5 O
  1)查询缓存的工作方式:
. a: r. g; K; `4 P4 L  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。* [% T6 s* u1 r$ Q
  2)配置缓存参数:3 }1 r  Z5 u8 B8 J9 g% s0 [4 Q
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。% W& E# P( q+ c
  
- \, {9 k. K; F; U- l6 y! L  22、调整硬件
0 J- t/ u0 H4 d  1)在机器上装更多的内存;, V3 T, @  e4 g0 C
  2)增加更快的硬盘以减少I/O等待时间;
% T9 Z9 ^/ H+ p; K9 C( u  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
; S+ P  S& y9 x! }( z- A. G  3)在不同的物理硬盘设备上重新分配磁盘活动;; J% H- z( A; l+ V8 d: R. s$ _
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。! t2 m$ `& }( z* ^% p5 `0 B3 S
回复

使用道具 举报

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

本版积分规则

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