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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;4 [) V' ]- E/ {6 J* G* I* Z
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
8 z8 X: i0 L# E! X! Z1 m2 H  I  列出数据库:show databases;* y( \6 S4 K4 U9 ~% }6 Y1 x! I
  选择数据库:use databaseName;
3 K$ D9 f  c2 o& L; w) L* W/ F8 c* c  列出表格:show tables;. h* @- f# W% A9 E7 S- R: D
  显示表格列的属性:show columns from tableName;
' l# f, W! S  M  建立数据库:source fileName.txt;& f, c3 e: N/ d9 b4 T, s+ e
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
$ I& T2 p% \2 |2 Y  I/ m  增加一个字段:alter table tabelName add column fieldName dateType;; F: h" m; Q2 @) M8 E
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;; f& G6 r5 `4 n$ v
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;4 E, j1 V7 @+ v4 Z/ e* H
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";& E9 _- J/ R3 |6 V
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;" l" }  M4 z; j' N& L
  查询时间:select now();
( V; E- n: ^4 g2 |% R, H+ B  查询当前用户:select user();/ W; I# L' l" j7 p: S
  查询数据库版本:select version();
3 P  U0 x4 j2 k" Y! W5 d  查询当前使用的数据库:select database();/ O+ G! N9 r* U" `) I# i
  
. ^2 o# m% P3 j" a( y2 U" t! s  1、删除student_course数据库中的students数据表:
2 j* E: O) X# y# y3 [" F: q  rm -f student_course/students.*
% r* S; g& M/ r  c* U" ^4 U$ S  
$ @3 b3 o, B& H  R% Y  2、备份数据库:(将数据库test备份)" X; Y" x0 d( |# O) W
  mysqldump -u root -p test>c:\test.txt
( B$ y4 d- y; B/ r. w  备份表格:(备份test数据库下的mytable表格)9 T2 d; v" c0 n- g
  mysqldump -u root -p test mytable>c:\test.txt
: \# n$ b5 W- v; x3 @( d2 e0 M  将备份数据导入到数据库:(导回test数据库)
+ G3 I# q9 }& \  ]  mysql -u root -p test<c:\test.txt& ]5 o* z% z/ F( |
  ' s0 n0 p. W- K! V% _) A
  3、创建临时表:(建立临时表zengchao)
) z4 i/ v8 \) ^# I: @- d( D* e  create temporary table zengchao(name varchar(10));
. G: ~' s$ ]0 _/ Q9 }  
) s$ u" C, D+ g% w  4、创建表是先判断表是否存在/ _6 z, w' M3 X
  create table if not exists students(……);; q$ T5 e2 ?% O& G6 V! V3 U
  8 F) }3 p% L9 m% `) K' n
  5、从已经有的表中复制表的结构; S4 _) m. h* @
  create table table2 select * from table1 where 1<>1;
$ t% A2 |1 n$ ]4 Q) g. X8 C  
  p' M$ G; i/ F4 X. O$ F2 ]  6、复制表
1 G" U7 i( ~/ U+ W  `$ P0 m  create table table2 select * from table1;
& H1 ^0 w+ T8 [/ M5 o  
  O6 t% ^  B; c7 X# p$ N  7、对表重新命名! E- b. q! ~& P- q# ]
  alter table table1 rename as table2;" ?2 e( E2 f# z( O+ _1 f. F4 \9 T% T$ ~
  
8 V- M4 b9 q; F% Y# r, `  8、修改列的类型
3 i/ n' a+ W; l; l% U' o3 t  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
) w9 R1 c0 Q1 ^7 R0 V" C: ?  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
+ c3 w' k& c6 I- R9 q: K: o  # H1 F! [5 o2 f6 k- k& u! b
  9、创建索引
3 N4 }3 g1 h: t1 `: q  alter table table1 add index ind_id (id);: P! z/ d" F4 {6 D. l$ Q' o+ J. u. t
  create index ind_id on table1 (id);8 g* o; o; J/ ~# w
  create unique index ind_id on table1 (id);//建立唯一性索引+ M* x( d* z6 L9 O+ \8 _6 F: ~3 ]/ R
  
# r* A" }: C1 m1 ~8 e4 l  10、删除索引
1 |$ C- E3 q/ i- ^5 C- x' y. f+ h" ]  drop index idx_id on table1;5 v+ e5 h: [3 v/ e
  alter table table1 drop index ind_id;
# V% y. `2 t% S+ Z0 a$ K/ }2 w% w+ O  7 y: s& w2 c5 I0 n' B
  11、联合字符或者多个列(将列id与":"和列name和"="连接)6 P+ k) o9 ?: S5 ?4 k
  select concat(id,':',name,'=') from students;; w/ o: d# S1 I& J& K
  
1 M0 g) n! U2 c4 ^3 F  12、limit(选出10到20条)<第一个记录集的编号是0>
! {; \3 T" |( ?4 ]" p3 l1 Q  select * from students order by id limit 9,10;) }6 X6 k! ^1 k* ]) U6 F( ^. [
  ' F: A. p0 k; N. m  o5 [
  13、MySQL不支持的功能
5 D- T( g! ?' W4 @  o  s3 L4 x  事务,视图,外键和引用完整性,存储过程和触发器
1 C  L( ^4 g  q" x0 B* t  
% X2 n; O3 }/ W6 P+ N. O  
0 a( I' ?1 Z4 ?' v  T  14、MySQL会使用索引的操作符号
- ?; }! z0 \1 T7 O. y4 e' s( _  <,<=,>=,>,=,between,in,不带%或者_开头的like. d1 T0 C0 k9 w
  8 A, A. j  K' I) l$ t; }3 Z
  15、使用索引的缺点
7 D# P/ S* \, `1 |4 {4 r% u  1)减慢增删改数据的速度;- E" D7 {( n5 Q6 @  A
  2)占用磁盘空间;
) `  M% P3 I; D' b' Y) {7 G+ u  3)增加查询优化器的负担;3 p0 c% _' g9 M# k; Y
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
6 l- G# u/ i3 O  ! v  ]9 _% }' F$ x7 C9 ?
  16、分析索引效率
: a* ^4 v9 Z: s( f0 w, ~0 G  方法:在一般的SQL语句前加上explain;
2 w$ X0 u% b6 }- u% S  分析结果的含义:
: `5 a* y/ v9 t  1)table:表名;
9 a9 P& J3 Z2 x$ e3 q  `  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
7 U( b. N, C' u$ C5 H; M  3)possible_keys:查询可以利用的索引名;
5 a0 H+ p0 y/ @$ C  4)key:实际使用的索引;
) Y9 B3 x$ ^2 V% q  y  5)key_len:索引中被使用部分的长度(字节);
$ q* F0 |  I* Z$ D( \, G; y  6)ref:显示列名字或者"const"(不明白什么意思);1 g5 S. r! R9 D4 z9 L4 M
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;1 ~0 v7 A% K: N; O* Y# g
  8)extra:MySQL的建议;7 {, T' P- r6 {2 p- J/ d3 z' Z
  $ N$ k5 _. [$ p
  17、使用较短的定长列! [+ h* q+ j7 A. l" c& v' B0 F' [2 ^
  1)尽可能使用较短的数据类型;
# n: k/ F/ e! E3 r$ T  2)尽可能使用定长数据类型;
, Y- n$ R( L$ a; b) k  a)用char代替varchar,固定长度的数据处理比变长的快些;
' G) l0 w) A" Z8 _$ o7 S  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;2 ]& |! l: x1 N: Q  B/ O
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;! \( l! v9 ^7 G  o" c" E# E* L
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 o1 h& s0 p) f8 J2 ~8 }2 e
  # _% h* \) S0 _
  18、使用not null和enum
. d1 ~0 b5 y3 l1 K% N3 Z& Z  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
. \1 l  I0 _3 E( u$ p1 l1 n$ b  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;" V1 b9 V- F( Y7 ]5 N% P3 }
  
5 e0 O; `, z# o$ |, D7 X  19、使用optimize table2 R) J& q4 n3 s
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
1 C4 k3 v7 Z0 q- _* }; x" Z  ' o, c/ W! T4 Z- K# V6 M2 W  X1 G: I
  20、使用procedure analyse()8 I: ?2 z: D- t) u5 w- l( I0 l1 j* d
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
% j  U% V% E' R* A  select * from students procedure analyse();
  l1 {3 W$ ~" ?: t. U$ B0 q  select * from students procedure analyse(16,256);
) A& G9 a9 _5 Q3 u+ R9 x  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;& c: A& }9 V' f% l6 j3 Y2 a
  ) J8 ~' K2 Q+ \" g7 q
  21、使用查询缓存
9 g' p+ b0 ~9 a) v3 p; v0 p: v  1)查询缓存的工作方式:
: w$ d0 x" w4 }/ L( `& ~) U" x  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
* q" }3 n, y7 O+ x0 |" j  2)配置缓存参数:, H7 q) O6 z& _/ @) s
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
: v  C5 ]+ _9 x- X# T( i! r  1 g5 D2 B1 v, m) p0 o7 C; ]
  22、调整硬件1 |; g. U" b1 G7 |: @
  1)在机器上装更多的内存;5 ?. {2 Q0 }0 U
  2)增加更快的硬盘以减少I/O等待时间;
/ [9 ~% Q9 _6 s6 j1 Z/ z  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
( D( B" W* J, V  3)在不同的物理硬盘设备上重新分配磁盘活动;) S( }) V" n) `, ]/ [
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
0 e: F$ j3 _6 c) G- G3 o
回复

使用道具 举报

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

本版积分规则

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