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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
+ f4 H: D4 N4 I- l: Z+ v  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
; d9 [1 [6 v! u: K% H3 D& z  列出数据库:show databases;/ m4 o9 Q% |1 A' h1 c1 M
  选择数据库:use databaseName;
4 O+ |- E$ J: Z0 r- g' |- f& |  列出表格:show tables;# v: z/ f) J! K$ X! C$ b
  显示表格列的属性:show columns from tableName;
5 g, T  {& N# w/ r* H- Q8 \, _  建立数据库:source fileName.txt;
& J6 Z. x3 Y0 W3 c* F# f  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
6 {3 `5 n1 G4 K, ?% P+ L  K; K! H0 X  增加一个字段:alter table tabelName add column fieldName dateType;
9 K9 d2 z5 a1 I+ l' u1 L  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
1 {6 a% f: C: y6 e7 X* X  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
2 \7 ?3 F; P* `4 G2 m! ]3 `7 L  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";( d, o1 i' c, J7 {
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;( i# K+ ?8 m3 U, ?/ B' ]9 h& H
  查询时间:select now();
4 U8 {% R% w$ ~$ ~  查询当前用户:select user();
% k1 o0 q" m% U; A: n  查询数据库版本:select version();1 r0 O( u6 Q1 q' _; y
  查询当前使用的数据库:select database();
2 N6 ~" s# O2 X# b. z: l  # t% J; Z& i! R4 ]: l
  1、删除student_course数据库中的students数据表:
# H: R' M$ @* I, R3 U  rm -f student_course/students.*0 Z, @* D/ \, ~1 L% [
  , i4 V4 h5 y5 F/ R9 K9 b" j
  2、备份数据库:(将数据库test备份)" ]' |$ t( I6 o6 }
  mysqldump -u root -p test>c:\test.txt
: y8 W# h5 u$ ]5 q0 p, F7 n  备份表格:(备份test数据库下的mytable表格)4 p8 d* q2 p0 H; |! L' v& L+ q
  mysqldump -u root -p test mytable>c:\test.txt5 n7 s. H) {& l5 B7 G
  将备份数据导入到数据库:(导回test数据库)
" u& V) r( b2 F1 E  |7 G7 B  mysql -u root -p test<c:\test.txt2 ?+ k  {' f. l2 l
  
6 k+ T. Y6 I& N# {( K% L; s# W. d  3、创建临时表:(建立临时表zengchao)" A8 o$ c; I+ o/ c& n# N. f; k- n
  create temporary table zengchao(name varchar(10));  ^1 u7 t) I0 E" m+ R
  5 U0 y& h/ f0 m8 {; t# i  }+ z
  4、创建表是先判断表是否存在
  _: t3 d& A$ u5 J$ R  create table if not exists students(……);
: J5 @. f, u6 G) ~* |  
* q! E  k2 K1 l/ ^. E  5、从已经有的表中复制表的结构
/ x6 v+ r) C. o: h/ R  create table table2 select * from table1 where 1<>1;
! ]& u+ ]- m! n# w# _+ O  ; e9 ]/ b. y7 N  j3 ~
  6、复制表' x8 d; E3 m$ q+ ^0 i5 W
  create table table2 select * from table1;& T) M+ M# ?" ?! P, k& S9 l9 I
  ; w8 @! U3 G/ ]6 d: n0 [1 d6 Y
  7、对表重新命名
0 Y+ ~8 v# Z8 u  c% J6 X- j  alter table table1 rename as table2;
# a: Z- }; k4 l: P% t  3 `% A8 r; z4 U& N2 `  e# }
  8、修改列的类型5 j% l( ^7 n& C7 z- l0 j; L0 F
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned7 ?- b& Z0 c  l9 |3 J
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
: s8 S( A; h1 [+ N9 M. [$ S, M; M7 P  
7 s3 j. f; J! y  m; L2 P' f  9、创建索引
6 g5 A. _5 e& a, k8 K  alter table table1 add index ind_id (id);* Z9 U) f' _6 ~0 v- ~
  create index ind_id on table1 (id);  Y) y9 f0 B' S2 m9 b8 O0 c! a
  create unique index ind_id on table1 (id);//建立唯一性索引0 b, _/ y& c2 j6 O
  
& `: M. A  v# r( v7 n! I. l  10、删除索引
4 N. `% R' v$ ^. \  drop index idx_id on table1;  Y0 E% @/ J3 a
  alter table table1 drop index ind_id;
* d( i6 ~8 b; B: y7 ?, V9 Z7 V  ( ]% U* F: z. H
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
- c' H6 [2 w# \: n, H  select concat(id,':',name,'=') from students;
2 N( V5 ?- E. x, b9 M  
9 P3 S5 h5 D. o! V7 z/ e! u( ?  12、limit(选出10到20条)<第一个记录集的编号是0>3 A* Z  D, `3 T$ b( y' k
  select * from students order by id limit 9,10;
& K7 x, e: J2 e0 {1 b$ w, e  
" f# C" F9 _- W& P  13、MySQL不支持的功能
7 x& {. e4 p% l$ L7 Y  事务,视图,外键和引用完整性,存储过程和触发器
1 o% s9 P1 Z7 Q% x% }- V  
  F2 [7 R- V/ e' ~, d  
- G) U) O; z- }* S! k7 S6 s  14、MySQL会使用索引的操作符号
( d6 O7 d$ S3 H! O/ \  <,<=,>=,>,=,between,in,不带%或者_开头的like' a( \$ u4 e2 ^3 V! n! o
  9 q6 A; b0 E' B
  15、使用索引的缺点' E. U! j% |4 o: m$ E
  1)减慢增删改数据的速度;3 Z9 O" O. o4 m5 r. u2 C$ \, P+ u
  2)占用磁盘空间;8 V/ s7 U6 [1 e# s3 M
  3)增加查询优化器的负担;
8 i) k6 F8 n! S2 K; _/ Z  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
1 M" J# q) n1 U  ) ?3 P+ o7 I4 z0 ?
  16、分析索引效率
& U. O  I4 K6 n5 O7 a' ~  方法:在一般的SQL语句前加上explain;
1 t# S# Y& r2 ^$ `# E! A$ x  分析结果的含义:1 W% K# |+ A5 V1 v# \
  1)table:表名;. v5 h5 g9 ]- k& x' a# [3 _8 l
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
. p  q( }5 I8 ?. |' N) Q' l' |  3)possible_keys:查询可以利用的索引名;
4 t5 R: I3 p( k1 N3 x  4)key:实际使用的索引;& W3 j; m9 B& F  R( G! q. J9 v
  5)key_len:索引中被使用部分的长度(字节);
5 }* ]0 k6 J: z6 k( m; |4 R9 h  6)ref:显示列名字或者"const"(不明白什么意思);" Y8 ^4 b9 q( `7 d5 Q" Z8 |
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
' b, O) M: \% F3 p: e  8)extra:MySQL的建议;
5 H, p3 ^$ x/ y5 m0 n: _9 X2 Y' U  
4 L: d- m! F8 N, }  K; q& Q: N  17、使用较短的定长列+ z2 @7 X' I+ N' W
  1)尽可能使用较短的数据类型;
7 M$ C5 W9 `) P' v  2)尽可能使用定长数据类型;3 h' Y  u4 g0 s, f
  a)用char代替varchar,固定长度的数据处理比变长的快些;
: q( U+ W( q3 p6 P6 p* ]  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;  U5 f; x4 Q5 D# b2 M- M
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;6 ?+ C  ^' s! {% B. S
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
* b, x. y% B' H2 b  
; d5 B5 A; C" E) {7 l% [- _  18、使用not null和enum
" s3 x: T2 H- v  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;# f( v# o) a% H- z) [
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
3 T8 V) h' |+ b+ w  
) b; z! H2 H8 K) x( g/ D! h& v7 S  19、使用optimize table( w7 |5 t- G* ~* p
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
# O; n# J8 |& G, X' b4 Y; h  
6 V$ W, @- f% x8 f# y  20、使用procedure analyse()
6 X) p4 m! ]7 f: p- l% C/ f  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:- I1 R, u/ _5 @8 m
  select * from students procedure analyse();
2 E5 ~% j2 T; G* o( h0 |& z* F  select * from students procedure analyse(16,256);4 e$ l9 ]1 U  K
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;' b2 K" [/ ~; y, U# o: _
  
& E2 K5 I% A! G  21、使用查询缓存4 ]9 i4 c, Z7 a
  1)查询缓存的工作方式:5 ~2 L' `/ V; L0 \- ]. m( _
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。  n5 r  |6 B% R2 l
  2)配置缓存参数:% @. ~8 t7 F0 A( o6 ]
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
  ~$ Z; m5 |4 e; h8 X4 B5 Z+ J  
5 k2 f2 z; y6 p6 w- V8 ^# j  22、调整硬件5 E( J$ w: ?. w9 b
  1)在机器上装更多的内存;
2 t* v, W$ c8 V: ^* W  2)增加更快的硬盘以减少I/O等待时间;
2 C) `: Q4 ?: g- _! k  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
: F7 z' y( P  P$ A  3)在不同的物理硬盘设备上重新分配磁盘活动;: J9 \0 q6 v  {$ u5 M1 p5 v
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& R# r. R: S# o# ?5 T$ ?
回复

使用道具 举报

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

本版积分规则

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