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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
" m8 w6 k, |/ ^$ h, q. ~  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;; n( V/ z8 O+ W4 R
  列出数据库:show databases;
0 ?0 }. Y. ^9 o6 e1 ]9 o  选择数据库:use databaseName;# E# J' F: }7 B8 h
  列出表格:show tables;
: j: h5 l1 Z) p" B  显示表格列的属性:show columns from tableName;
% K7 P/ M6 r# q: w  U5 S% |  建立数据库:source fileName.txt;+ n" D) P; s' r9 L0 |& B8 Q; T
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
5 S! m! x# G0 L  增加一个字段:alter table tabelName add column fieldName dateType;) Y! o" u1 `& O- Y, ~8 @: U
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;( Y+ F1 ^( Y( @6 n, J, k: e
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
9 p2 M" Y! p  _1 r! c! n/ [  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";; A0 a! A% B( S3 O! P6 @- D
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;- `; \& T9 {# F: @0 Y1 Z8 V- ~
  查询时间:select now();5 {9 H  v) [# c- ?; m0 e3 F
  查询当前用户:select user();
4 z5 Q" S. l; T/ r  查询数据库版本:select version();
$ R( y  j! i# |& p+ w  查询当前使用的数据库:select database();1 U/ N/ f+ ~  g! p
  
* F6 P) P' w* j1 d  1、删除student_course数据库中的students数据表:
( P: Q/ H3 h+ M  rm -f student_course/students.*% ?- E0 w, f+ \+ D. `- n) W9 Q
  
$ r+ }# c' Z( _5 P  2、备份数据库:(将数据库test备份)
# e2 t. ~( D" F, S0 h$ {  mysqldump -u root -p test>c:\test.txt
. i5 k2 `, _1 |7 s6 P/ ]  备份表格:(备份test数据库下的mytable表格)
6 Z1 b% ?$ u8 I9 y  mysqldump -u root -p test mytable>c:\test.txt: ]" |, {' u. N9 ?( o7 j9 ]
  将备份数据导入到数据库:(导回test数据库)9 ]0 ?' g4 }0 C1 \* q6 E
  mysql -u root -p test<c:\test.txt1 ^' F. M5 I* ?! x( I  S
  $ z% q: f# ^% z& y9 e% s
  3、创建临时表:(建立临时表zengchao)3 d) f9 i, @4 f* e
  create temporary table zengchao(name varchar(10));' r- l- j3 N# f' h/ Y1 \6 D& D
  3 W1 M/ i4 W5 V3 x! S
  4、创建表是先判断表是否存在
/ Q" {* ^) g! }; d5 s9 ]* e7 ]. _  create table if not exists students(……);
3 ]5 i, q* p- ?, c  2 q4 I, w' p7 {# ^- K- P& [; G
  5、从已经有的表中复制表的结构
( n( }( c/ \+ ]) ^  create table table2 select * from table1 where 1<>1;
+ p, u) D0 y) N5 l( v4 L$ u! k  6 b2 y- S$ [, t$ T+ y$ y/ O
  6、复制表0 z; `) Y- k, F6 ]
  create table table2 select * from table1;7 f0 ~  o/ o4 J8 e/ {% ^
  
1 W# l2 t, i! A  ?9 ~  7、对表重新命名+ C0 X6 ?2 j$ w. L: _- N7 s! i8 |5 H
  alter table table1 rename as table2;, k$ M; w( e: c. y; R" N
  
" Y1 d4 n0 T# h6 s/ H: q/ A& ?  8、修改列的类型  L3 x8 [7 D5 V! j; a1 k! ]
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
6 Y" _. f6 M5 A+ {# |  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned% l1 r/ i9 e( v  O
  ( A% e3 e6 m( R# E4 s
  9、创建索引+ J" C* H( t' g$ ], o
  alter table table1 add index ind_id (id);
- a+ g* W8 p8 T/ j6 A  create index ind_id on table1 (id);
4 A) b9 J) {& d0 T, D  create unique index ind_id on table1 (id);//建立唯一性索引; @4 I! s+ y' r4 }* i
    r& U2 t9 g" ?# l1 L$ j
  10、删除索引1 V  Q- [3 v% K( f" p
  drop index idx_id on table1;
6 e+ l. _( W7 |( Z  alter table table1 drop index ind_id;
7 N! b+ p( Z: }( H; O/ `0 X( C1 T  
) S) e7 X4 U. d% S$ _  11、联合字符或者多个列(将列id与":"和列name和"="连接)
; V' h8 d$ l- d# I8 F  select concat(id,':',name,'=') from students;& X- _4 g& u* p
  ( g: J7 @" u3 p; w, e* i
  12、limit(选出10到20条)<第一个记录集的编号是0>4 s  U8 X% P( z7 {/ d2 \) Z3 w
  select * from students order by id limit 9,10;- _. q: }) ?2 z0 {
  % X. F" r* S/ J! \' [: ^) F
  13、MySQL不支持的功能+ i2 M- [5 Z, G' N% B
  事务,视图,外键和引用完整性,存储过程和触发器
5 @- L, t& o% z& t0 z2 }! S  ' C* N5 L. k3 q6 O; E
  1 X2 a* h% i( d8 T2 M
  14、MySQL会使用索引的操作符号
% m  M9 k1 G! Q+ O- s  <,<=,>=,>,=,between,in,不带%或者_开头的like; {5 n2 c0 i. m, W. J% [: a  a: `* L
  2 A& O- V1 n0 _& X+ B
  15、使用索引的缺点
) A* V5 N% s) D$ z2 s7 D  1)减慢增删改数据的速度;
# p: E# p( \4 B9 A  {4 J# N  2)占用磁盘空间;
( c+ u( x4 U& P  a3 _  3)增加查询优化器的负担;. |+ {  a0 M- V# @0 T( P0 i9 w
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
  Q' a3 p9 G# D& \9 K  . C+ C/ Q' h8 f" [
  16、分析索引效率2 E3 E( ?( K# P8 C
  方法:在一般的SQL语句前加上explain;5 c  r1 Z5 V7 k" }, v* l2 i
  分析结果的含义:
$ J3 b+ q! _7 X9 o6 t& k! w  1)table:表名;) _' U5 ]2 w  X3 o+ f5 @& P! _
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
+ }, n4 z; m% |: v  X  3)possible_keys:查询可以利用的索引名;
0 X, P$ Z3 U0 Q" r# k  4)key:实际使用的索引;
3 Z- H; ~% t$ C% |; C) M, s0 T  5)key_len:索引中被使用部分的长度(字节);
( P7 o, Z6 R. a  6)ref:显示列名字或者"const"(不明白什么意思);
6 F7 j) k6 t2 j) r% p  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
/ S/ i; o' f+ J# L3 Q. D, @; {  8)extra:MySQL的建议;
: `5 L* X5 k9 C6 N  8 D: ^" N8 e6 k' O! a
  17、使用较短的定长列
6 H. E6 ~) ^8 L  _6 b" b. l& W0 k. D  1)尽可能使用较短的数据类型;
6 \5 C6 k# q! T7 K9 m' f0 ]  2)尽可能使用定长数据类型;" o1 a# _, M3 D& G+ z, m' b" s4 j
  a)用char代替varchar,固定长度的数据处理比变长的快些;
4 D# o5 C* ^# w1 ?8 M6 a! h! W4 C  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;9 Z+ x; t+ q3 C
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;0 X4 e, J# a. [8 {7 |  A" D
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
2 t5 q8 X7 ^; ~" m: X9 |  # x% @8 X1 `0 y- i& ^0 S4 y
  18、使用not null和enum- k& o; n  V3 J0 b+ A; ?
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
6 q1 n8 U! M% p8 @* d% N9 o  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
5 ]5 i9 p: j% T4 q: v7 z) i. L  
$ o4 M* |$ R( |# t6 g. B  19、使用optimize table* V: T* Q' `* u. W1 }
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;$ @( C, Y( B4 B) y! w
  
1 `, {- L1 A  B; v0 w% Y  20、使用procedure analyse()
6 R* L% E9 D2 b4 i% u  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
5 r5 U5 o9 H! r8 T( f/ z3 I  select * from students procedure analyse();
1 S# d7 l( L, g% A: e7 o0 ]  select * from students procedure analyse(16,256);7 A, e7 _1 e+ C# [
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;$ e* I) z0 b* [+ }* O- d, A
  # {& Y. t9 ~0 C$ [  j' }
  21、使用查询缓存' d8 }. K$ S4 |  w. b
  1)查询缓存的工作方式:5 G* }6 d7 T& o% h' u8 V
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。' l6 H' j; h" l# M# \
  2)配置缓存参数:
) Z! C* A: s# Z1 x7 R  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。- l* k& v. i8 s. O3 b: ]
  
% P5 ?0 M, ^6 G" K' S4 u: G  22、调整硬件
4 r: v$ y5 k( |' i2 ^  1)在机器上装更多的内存;
1 H# W' }8 y# Q- F/ M4 x1 j% [  2)增加更快的硬盘以减少I/O等待时间;
; ]! w; X+ d" l  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
) E  b. Q( O+ T- M; p" r  3)在不同的物理硬盘设备上重新分配磁盘活动;9 C" q0 B8 h1 T8 S
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& ]9 S( C: P/ Q7 }
回复

使用道具 举报

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

本版积分规则

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