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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;; N0 B. V9 ^$ O9 m0 C
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
" w: l3 P$ g0 @9 d  列出数据库:show databases;
* @0 g/ B* P5 g! g+ B# F  选择数据库:use databaseName;, p- E2 G' q5 j" t6 T$ P
  列出表格:show tables;5 N) x+ i! ^  R7 k: g8 [
  显示表格列的属性:show columns from tableName;
- J. H/ I# z" k9 m  X1 u  建立数据库:source fileName.txt;
% i7 Z8 H) @2 @2 d% f: V9 R, m  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;& ~0 ~! ?3 m9 y; \0 k- A" ~1 ^
  增加一个字段:alter table tabelName add column fieldName dateType;& y' m8 ]6 T, @" ?3 L! A
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
4 D/ J  R4 [0 q6 t' O9 @5 I  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;* \: a9 {3 e+ j% l. u' q1 x
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";6 K& q9 E* b* w$ l. g( g8 X
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
- ]9 T( [) [7 g/ D/ V3 L  查询时间:select now();
: ?6 _8 m8 K0 s  _  查询当前用户:select user();
' ^+ d0 J6 F0 T1 e0 @* S  查询数据库版本:select version();# H' O  Z7 r1 A1 j
  查询当前使用的数据库:select database();
- z! ?0 J8 H& ]& `& n& }- X  % E6 Q4 O  Y6 `  B, c0 Z
  1、删除student_course数据库中的students数据表:
% H3 u/ A3 e- ~$ c! ]. ^0 F  rm -f student_course/students.*
4 M4 m) W: D" C/ d& O( N& W  
3 @; b" c- ^8 k  2、备份数据库:(将数据库test备份)
7 `  s/ ~% S- O/ p( Y6 [  mysqldump -u root -p test>c:\test.txt) K4 n9 [% |/ N" m. O( n0 D
  备份表格:(备份test数据库下的mytable表格)
+ u; }! _% z  F' R  v  mysqldump -u root -p test mytable>c:\test.txt, s7 m: _5 \: ]$ i8 S
  将备份数据导入到数据库:(导回test数据库)
- V; h' K, |, C) P  D+ O! E  mysql -u root -p test<c:\test.txt
2 G# @' ^* [8 U1 v/ [' b) Z6 p  
6 r( T: I. S3 d: [8 Y; T" c  3、创建临时表:(建立临时表zengchao)
& O1 _; E7 o( L" t1 w0 Y; l  create temporary table zengchao(name varchar(10));4 l" J, R: v1 p0 }* v
  , Q$ G. X8 M9 L
  4、创建表是先判断表是否存在
4 K& p8 |. T) b7 v- m: r- v4 Z  R  create table if not exists students(……);. k0 f  q% }" t5 \# G7 j+ V
  
, L+ ~* G+ B/ F+ |  5、从已经有的表中复制表的结构, z0 l' `, L  w# P6 ~
  create table table2 select * from table1 where 1<>1;7 B6 c) v3 y; d- N
  " Q! M+ W7 t. |
  6、复制表
2 }- ~: D: g& Z. E  create table table2 select * from table1;
9 f: Z) f% Q& z$ ?& P9 M$ A  ' p8 ]2 @7 z3 b* J% K# Y
  7、对表重新命名
4 C* w% x- G- ~/ ^* e% M  alter table table1 rename as table2;; J7 V) J& p4 q1 b- ]! G. L+ K8 Q
  - r. f- O' }0 {8 M0 e% m
  8、修改列的类型
9 H9 o# b' o2 o9 U5 |- n6 O  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned+ y( O9 _, V+ O5 s* ^6 S
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
1 W1 s/ o3 X) h' T  
! a2 G, F9 c5 h" s4 n3 g- X0 Y  9、创建索引9 L+ M6 ]1 e! G* e
  alter table table1 add index ind_id (id);
% D. t1 r" N: x  g" N1 g  C  create index ind_id on table1 (id);
1 k4 p" F- |, e/ T  create unique index ind_id on table1 (id);//建立唯一性索引- g4 ^) Z) o7 ?9 ^% H. n  V
  
& W% n1 G, |* E$ e2 `# M; O  10、删除索引
4 F' K- m/ E- a, y$ O3 }9 l7 b  drop index idx_id on table1;
- A& w# Z, p  R& H  alter table table1 drop index ind_id;
# B& w* z4 h  Q  
% u7 T$ W4 e2 L' x: H- p  11、联合字符或者多个列(将列id与":"和列name和"="连接)
$ |( M9 N! r0 _! s+ S  select concat(id,':',name,'=') from students;( E' M$ @8 G$ t' V" y
  
/ _$ `6 ?; ^, ^. W8 _5 H* T6 J  12、limit(选出10到20条)<第一个记录集的编号是0>2 W% z4 p" q' }4 M! Q
  select * from students order by id limit 9,10;
6 `) t% v9 {0 a- H/ k  
$ h8 O& l. k0 |4 }9 ]) h' D2 g  13、MySQL不支持的功能
+ c. A+ H3 R/ z& w: z  事务,视图,外键和引用完整性,存储过程和触发器! C! E3 ~  C, ?3 x. p
  2 W- q- W2 o; H0 m; Z7 T- Q. _% `0 A
  
, |/ b' j  [3 _  14、MySQL会使用索引的操作符号1 l' d6 a( _* {* y3 g# ~
  <,<=,>=,>,=,between,in,不带%或者_开头的like
: s9 ~5 C& T" u! |' D: {7 N6 q1 e  , Q+ h/ H' z) b$ L7 }4 S3 a  C% |
  15、使用索引的缺点
3 m1 u8 K# |. ~( J% [  1)减慢增删改数据的速度;/ }( ^5 }0 L; v6 r7 ~( h4 T6 I
  2)占用磁盘空间;8 y0 ^9 ~( |+ ]# @. b7 B% W
  3)增加查询优化器的负担;
. v6 V* r- \" }6 c2 G2 ?4 f' B  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;  Q9 ^1 g; j5 _# W5 ~0 h
  
; B5 r0 f8 ^7 v! }  16、分析索引效率- a( M3 `  D/ S1 t* I8 L, O& B
  方法:在一般的SQL语句前加上explain;
. p/ i2 T' B. ^/ @* N- P+ {: J, a7 L  分析结果的含义:
8 N6 A- c% R: q$ L  1)table:表名;# A; ^$ i, D+ v
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
- r+ w# ^: i. x. j& [# M  3)possible_keys:查询可以利用的索引名;
3 M) K5 L  F! y9 d1 j  4)key:实际使用的索引;
0 J4 K8 @; u3 C0 F; ?" H2 o  5)key_len:索引中被使用部分的长度(字节);
% a" C0 n& g$ q- q# e  6)ref:显示列名字或者"const"(不明白什么意思);/ p! k! c$ J1 L7 K
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;0 \7 F1 j4 {" b  v9 d2 d
  8)extra:MySQL的建议;
5 r5 n6 U, B& e! l" y& A  - i: A7 c% r' m& z  |* ^
  17、使用较短的定长列
0 p( P' U. S: |# l8 Q% V9 n  1)尽可能使用较短的数据类型;# T$ ]# S0 @" a, D  S& U
  2)尽可能使用定长数据类型;
6 g. b  @# r2 \  a)用char代替varchar,固定长度的数据处理比变长的快些;
- M4 M. S- r$ z& V: p  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;+ q7 O; U. W# P5 Y5 k+ T
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;! A% {7 ?* @. m
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
- t5 }) u! g! ]# P" q' p  6 Z* h- }0 ?0 `
  18、使用not null和enum
3 P% T5 S6 R: |9 L6 V" U+ W; @; T- d/ F  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;" c. r! `' {8 V) Q$ q
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
7 }; Y$ s# H: I& m  
* Y1 [# j  N5 s6 x: v. x  19、使用optimize table
% r: e9 Q. S  h- F) L* H  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;3 i3 t: ^- H% g& D8 q4 e
  3 m( E. I' p! u" f8 K* W
  20、使用procedure analyse()
* A0 `7 B0 v! c  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:$ ~# V0 z, Z5 Q( K0 {( K
  select * from students procedure analyse();
: P  M! G- k  b2 Z( v3 y$ c# n  select * from students procedure analyse(16,256);3 ~+ B( g# \6 u( F9 R. j% H
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;" y9 M: e- F. a% ?
  * v, G' }. f. C
  21、使用查询缓存
, s# q2 a, r" j$ [  1)查询缓存的工作方式:
, _6 r, M) W" Q' G1 e+ D* }/ e  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。7 b' `- n2 Q. S1 Z, v$ ]
  2)配置缓存参数:1 q& d* y1 j! N/ \. o# c/ ]- |6 n
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
4 M- o. Z+ Y, v    \" r( k, D5 o5 I, S- c3 `4 W
  22、调整硬件3 n9 g+ m1 A( t8 c
  1)在机器上装更多的内存;" h/ @& E4 U. M4 \, \8 J
  2)增加更快的硬盘以减少I/O等待时间;
5 P) t/ M3 R7 f6 z, u6 H  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;$ L8 p. u& f$ J4 B; V. D
  3)在不同的物理硬盘设备上重新分配磁盘活动;9 s: G- x) I& C8 c/ i
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
) M1 F1 v- e1 B- S1 y7 M- E
回复

使用道具 举报

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

本版积分规则

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