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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;, Q$ d' i* H8 F, m& Y
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;, w& U# s% g3 v
  列出数据库:show databases;, A: U: v6 o! j# Q
  选择数据库:use databaseName;) ]9 J7 r& m+ i* m4 k
  列出表格:show tables;( t+ a+ X/ }4 y; W" e
  显示表格列的属性:show columns from tableName;
# t, M- `# F9 J% T1 ]  建立数据库:source fileName.txt;  H2 K+ J- V8 q1 K% u
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;. m: J; g/ `. x
  增加一个字段:alter table tabelName add column fieldName dateType;
$ @, p  n# Y6 L* o  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;) E- u# Q1 ]6 |& ^% F6 f$ Y
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;3 q. V. s# b& e, O! h4 h" G! f
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";" c+ d+ |% L/ {( |, j4 U
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;  u0 X0 G- P1 S, k  b; A: l
  查询时间:select now();
% [: i! g; u8 }- I; F; _3 i: z  查询当前用户:select user();
3 i: a& a* k7 `0 C9 e% ]6 I  查询数据库版本:select version();
0 G; V8 A# D2 k  查询当前使用的数据库:select database();5 b+ B: N9 c/ E6 J( V
  
8 O  F4 D* a: d& O  1、删除student_course数据库中的students数据表:# m' D- W% _# }9 U: Z$ F& U% E9 o
  rm -f student_course/students.*% u) b4 D/ F( I& B" d
  % T* a7 F) l% h0 f3 T
  2、备份数据库:(将数据库test备份)
1 B/ b, H( M6 u$ u8 {  mysqldump -u root -p test>c:\test.txt& W8 g) w" i' w
  备份表格:(备份test数据库下的mytable表格)
! D. R% F3 S9 o; h* t% G' o$ m  mysqldump -u root -p test mytable>c:\test.txt0 z" c+ g* t) E/ e& l: F# }$ T6 h9 g' ?
  将备份数据导入到数据库:(导回test数据库)
) n$ X9 n8 \7 K- \; n/ Z, e  mysql -u root -p test<c:\test.txt
- J5 |. h' i8 |  6 B( ^. G$ K; A  U6 }
  3、创建临时表:(建立临时表zengchao)
- F' |2 v2 G+ k* z2 w6 s7 \: I  create temporary table zengchao(name varchar(10));6 _3 Q$ v" e/ }4 v5 {$ w* D9 K
  
0 T1 @6 U( y8 S3 \# T# `  4、创建表是先判断表是否存在
* S% L6 @3 N8 F" _" ?  ^  create table if not exists students(……);
$ |# p* \' T5 l8 {8 E  
( X) w/ h# [+ ^0 D  5、从已经有的表中复制表的结构0 D; y8 _/ ~3 ]4 e  s" @: J
  create table table2 select * from table1 where 1<>1;
$ P! E" W+ Q! R1 c% l  
, N9 N( c4 L+ y$ L6 g  6、复制表" u: V4 c; j' w( V& M! T, J3 ~
  create table table2 select * from table1;
1 ^- I5 ~0 {* p# U% u3 y  % S+ o( L; T% ?) Q5 b
  7、对表重新命名  W9 C. h3 o' Q2 j0 N
  alter table table1 rename as table2;
9 t! i8 j' C0 D+ G' Q  6 t% a: x# p) {, t. j1 v
  8、修改列的类型# Z! R/ u, l$ e
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned1 S8 G* d! i& u& r) l( _* ^4 K1 a( C
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned, j& S+ x; t  T$ b+ `: a& }7 ^
  % L! u% w3 E& R- H4 _
  9、创建索引+ Y5 X' q; y0 k; h* C+ W
  alter table table1 add index ind_id (id);1 e# K3 ~- I- p  U% x$ v- a; H
  create index ind_id on table1 (id);1 {+ N# B. u7 T7 a* ^: Z
  create unique index ind_id on table1 (id);//建立唯一性索引, [  ?4 P1 i$ O' z9 r4 s5 P
  - o0 W0 T& m9 Y# o3 k
  10、删除索引
2 d' x9 u9 X# \4 U) Y) ^1 I  drop index idx_id on table1;
, I2 [+ L+ n- f/ x# C+ h" H: H. s# ?! i  alter table table1 drop index ind_id;; A6 S1 |. s+ u, E
  $ i+ e- X3 |  Y1 p* j
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
0 i: Y8 v3 R3 k: Q, q; E" g2 I  select concat(id,':',name,'=') from students;
, q4 `4 T$ a( P) t  " K' W: D* m6 l" A0 N) ?. d' V
  12、limit(选出10到20条)<第一个记录集的编号是0>) E+ \7 D+ v5 l6 I4 G- u- ?  ?
  select * from students order by id limit 9,10;
5 p6 a2 r) y- n- }+ E  & a3 u* @- r2 p* Y
  13、MySQL不支持的功能
6 I* X+ u. ~! h1 `8 _) m  事务,视图,外键和引用完整性,存储过程和触发器
4 L( _& G/ M2 g; n8 d$ Z  
- g) n: R; [9 D& r2 ~) Z5 c; S; ]  - n9 d2 P1 d1 X, h3 h) r
  14、MySQL会使用索引的操作符号' P! f" d! N  ]5 ^- n
  <,<=,>=,>,=,between,in,不带%或者_开头的like
% U/ p$ G& x! Y0 }* V    U7 h. V% Z/ {" F9 J$ P
  15、使用索引的缺点
7 u* j; A3 ]6 h+ Y  1)减慢增删改数据的速度;3 X# e& R& ?' o* e# [8 I4 s7 G- t
  2)占用磁盘空间;+ ^, L  k+ t( h2 s/ m, j
  3)增加查询优化器的负担;$ P5 r! F8 j6 K" ^
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;! ^& `/ ]% @/ V  T- |
  9 d3 Q  g* q. f- K5 I2 z5 s' f) F) A# G% ?" w
  16、分析索引效率: U" Z6 h. u2 }3 ^3 U
  方法:在一般的SQL语句前加上explain;- ^1 D& s& f9 ?. m/ ]: O
  分析结果的含义:
( c1 b+ ?* U4 p8 T# D- Y( V, D, L) t  1)table:表名;
0 |, o1 s# `5 J8 n! z. p$ k  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
, t/ Y/ x+ D+ E/ l8 R5 C  3)possible_keys:查询可以利用的索引名;
& D6 j/ N$ Z+ g  4)key:实际使用的索引;
. D8 `4 M! \' Z' d- }  5)key_len:索引中被使用部分的长度(字节);
2 Z$ n+ X! s  p3 A  6)ref:显示列名字或者"const"(不明白什么意思);" o! a4 ?  U) s5 a
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;# s5 r' b8 v$ P3 x
  8)extra:MySQL的建议;/ v: Y+ s! K; M" Q- y
  
  \8 m/ U7 H6 B5 o' Y9 q3 v! _' ]  17、使用较短的定长列
6 @4 u+ Z$ C$ u  1)尽可能使用较短的数据类型;1 Y  b7 W' d# [2 X% d  l% [9 B, R
  2)尽可能使用定长数据类型;
$ x* x$ W) t/ W& Z! F  a)用char代替varchar,固定长度的数据处理比变长的快些;2 b* u( R2 T! c+ z( C3 ^
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
6 e  w6 |* K" [7 B$ V: T& i  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
% J; V/ E; V1 h, X, }; k' |  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
+ f' ], R2 P3 p& `: J% L0 \, a  ' v2 `6 [" {8 C$ R$ B; r' I3 q8 `5 C% H
  18、使用not null和enum& ~9 S7 U" u  z7 y+ {4 w2 _- e
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;3 @/ u" y) |3 @" n7 o& W# `5 Y
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
: _% |, \; d' |2 r7 V3 D/ t  
6 h6 V; Y( L& X* \4 F4 A( \% l# E3 {  19、使用optimize table0 L6 h" h$ c7 m, ^
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
; ?- x( }* j+ z' x: O3 U  7 l: c$ {/ ]7 e/ w& Z' J
  20、使用procedure analyse()
2 ~: K$ d: D9 m) n  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
* K1 X4 F- u4 o. U1 x  select * from students procedure analyse();
2 H4 r. f- W! K4 q/ ?: |3 u  select * from students procedure analyse(16,256);
+ [- ^2 l, [% s. k& C6 V6 V  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;# w$ n, x: ]/ N, W' a
  ! x5 Q2 Y2 L% t6 w2 J
  21、使用查询缓存+ B& u" l. z- I7 }: w3 I" ?+ n
  1)查询缓存的工作方式:9 D# N( x- C0 _2 ?" @$ L" I) _
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。5 Y4 O1 S* e- B4 g8 i
  2)配置缓存参数:
+ `. D+ T0 f# J+ o  o  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
' n7 u# n& I9 o/ J+ Y  5 g1 J8 u' p$ ]
  22、调整硬件: Z* K7 Z5 B: R- ?6 o3 @
  1)在机器上装更多的内存;- q; w" C* ?! a# U9 o7 V
  2)增加更快的硬盘以减少I/O等待时间;
8 Q6 e  D% U* u2 H# f0 W: e  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
% A1 e1 B$ D( u8 T. I  3)在不同的物理硬盘设备上重新分配磁盘活动;/ b. g4 l  x+ y- P
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
+ {8 h# `: o+ u- N
回复

使用道具 举报

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

本版积分规则

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