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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;$ D: @- m3 Y8 R; m9 v2 o+ n2 a
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;, U0 m: t" H+ A
  列出数据库:show databases;
& a$ v9 i# p3 L0 h+ i/ q  选择数据库:use databaseName;4 F- n, k( l& d. v
  列出表格:show tables;
8 t1 c; k3 t, I  显示表格列的属性:show columns from tableName;2 v5 K& |" R- P* P( P
  建立数据库:source fileName.txt;
) k" F7 t2 V+ ~4 J2 l6 C: v9 m- y  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;9 Y( S. r0 {$ B: F0 o, o7 L
  增加一个字段:alter table tabelName add column fieldName dateType;
8 U' h; G: I) t( d  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;3 S4 l2 Q5 U4 `8 @" A, w+ }$ d
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
* B- r( \8 |7 y9 T  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
5 J. q/ Q. M- E8 A+ Y- a  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;' E, W9 H  f& [* X3 ~: E: [/ N
  查询时间:select now();
% P+ p' v# z' j, E: {  查询当前用户:select user();
; c, Z" @7 J7 @& ?8 ~* w3 }  查询数据库版本:select version();8 I+ @+ a8 Y8 q2 N- {6 `8 `9 i
  查询当前使用的数据库:select database();
7 f8 c8 u+ O' a& H3 r7 K, b  $ [1 J: Z, Y8 o' t3 Y
  1、删除student_course数据库中的students数据表:5 @2 q( f, Y: T
  rm -f student_course/students.*
! P5 w3 S! T9 ]3 i! o3 c3 Z  
2 C4 T% e! D, {: l& `  2、备份数据库:(将数据库test备份)
; y& D2 A  T* M' D1 S7 C& E; E5 u  mysqldump -u root -p test>c:\test.txt
# ^5 e# h" Z: j1 S8 Q  备份表格:(备份test数据库下的mytable表格)
/ Y3 M! d1 h$ T; G& r  mysqldump -u root -p test mytable>c:\test.txt
  X5 C9 @6 x; f( V, A9 U, L6 n1 U' S  将备份数据导入到数据库:(导回test数据库)
* ~. `) g) m* Y% R3 E9 R( m$ D2 h  mysql -u root -p test<c:\test.txt8 I- d( b9 e  G7 d  S* \
  - \( y$ n# F5 [# f' K( C/ h& [+ y
  3、创建临时表:(建立临时表zengchao)
% j$ J* \5 O% A8 K  create temporary table zengchao(name varchar(10));
' N4 {8 s9 M3 {1 j0 t: O: _- s& S  ' T# Q8 x. e1 e) b, x( ?
  4、创建表是先判断表是否存在
7 g" F, u7 B8 u  create table if not exists students(……);# b6 Q  B, R) X! F& S6 S& }/ a5 _
  + _8 ^) c/ w& _9 x( L' ^+ H' h
  5、从已经有的表中复制表的结构. b& j; }, J1 D8 w' E( ?
  create table table2 select * from table1 where 1<>1;5 a2 j! d/ i" p* v+ b6 p
  
' T: R; ?* h7 t2 S$ Q  6、复制表$ C9 B; e9 H# L& ?" n$ ~9 Y2 n5 y
  create table table2 select * from table1;" L1 V2 O$ o: W8 b2 m) h* C. u) O
  0 h0 E0 N" G% P+ j! H7 {- Y
  7、对表重新命名8 Y) ]' ~* i! O$ T2 E# y. i, ]) y+ e
  alter table table1 rename as table2;
" d& w" E5 D! v+ T) m  
3 M( |; u, U' N/ V% c$ f  8、修改列的类型7 P) k, {+ n! W1 |( t, S
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned) E! ?8 T% Z  b5 y
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
' U9 q" h8 t  ]& K" e; [! `. v# E  
8 `) n8 j- Q# z8 X! Y) G$ n  9、创建索引
" A1 s+ o1 \- _; b( w  alter table table1 add index ind_id (id);; y# s- y+ _, v6 |/ G, ]
  create index ind_id on table1 (id);; I, ]/ e7 [7 t* ^' K% l: @
  create unique index ind_id on table1 (id);//建立唯一性索引
) Z+ ]2 K1 Y' M# ^0 \& k  
5 r% v) m# B8 k/ }/ S  10、删除索引
1 c- z$ ?/ P) s: R' [  drop index idx_id on table1;
. r9 R1 M9 q, f- M; W" x, Q  alter table table1 drop index ind_id;" R/ ~- ?/ o$ G( O
  
6 l! u$ G$ ]9 J  11、联合字符或者多个列(将列id与":"和列name和"="连接)% Q2 x+ v2 f2 R( b& L2 r
  select concat(id,':',name,'=') from students;2 s1 I' F; O: P# x+ R
  / S. B7 `2 ?! r  M6 f
  12、limit(选出10到20条)<第一个记录集的编号是0>. C+ L8 d4 a+ ~4 B. e$ [0 N
  select * from students order by id limit 9,10;0 F# I% l7 E) z( [/ M. f
  + D4 I- u4 n8 l. a  p' {2 z# u
  13、MySQL不支持的功能5 B2 J: s1 D2 q2 E5 P; V
  事务,视图,外键和引用完整性,存储过程和触发器% @7 s2 `# ~! Y: g7 ]
  
( {6 a/ q2 ~* _1 }- g( ]  2 M# i& E4 x' W+ Y; z! A" Y
  14、MySQL会使用索引的操作符号
; e5 r- C9 H, N, C1 v" v2 R% u  <,<=,>=,>,=,between,in,不带%或者_开头的like( }6 R# R2 v; p8 l5 G' @" k0 f
  / W9 C, t; w. J3 a9 P/ _/ f5 s
  15、使用索引的缺点# U) U& H- A# Z. f9 s
  1)减慢增删改数据的速度;8 j: ]# |3 D( {9 _
  2)占用磁盘空间;3 p5 |3 d7 s5 @3 }' _& ]5 U: p
  3)增加查询优化器的负担;# P- m0 V& }3 q! M8 t
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;- a$ `8 m+ }  m9 d( T* S( _! X
  ( w4 l5 ^  T3 j( M0 p$ J3 B
  16、分析索引效率
* U  T" s  }# k0 x3 E8 i' X1 j  方法:在一般的SQL语句前加上explain;
/ ], @' i% M7 I, }* S  分析结果的含义:$ m3 m$ N2 l' w8 f2 f
  1)table:表名;
/ M5 c2 k% e; n% f; T  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;3 G+ p8 ~$ E* r
  3)possible_keys:查询可以利用的索引名;' c( L, h; p5 S/ {! F, {
  4)key:实际使用的索引;
$ U: Z0 Z2 l3 a) }  5)key_len:索引中被使用部分的长度(字节);0 e7 R% I8 u6 M- L( C
  6)ref:显示列名字或者"const"(不明白什么意思);
" u/ P2 h6 E1 y0 |4 T: ?- S  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;/ ~+ Z, l6 x% k3 F! [. q) B5 I. U6 M
  8)extra:MySQL的建议;
3 A: r9 Y% k2 E3 U2 {  9 Z3 [' L1 l1 y# v  i# @. s+ ]
  17、使用较短的定长列
- `0 I! ~  v5 L% j1 m  1)尽可能使用较短的数据类型;
/ F4 z/ F* i$ `1 N3 L  2)尽可能使用定长数据类型;
/ H9 V  j! p& {0 \4 e3 z& E& s  a)用char代替varchar,固定长度的数据处理比变长的快些;+ t9 l; B: t' i* P5 X4 ]
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
: B! k9 ^6 N7 |( `$ l+ Q- d  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
" }* t4 [* G7 q2 ]: P; e( G  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
/ s' [3 k2 t2 |4 \0 M9 H  8 K2 _8 x1 r  X8 L+ ~
  18、使用not null和enum% \6 }& M9 F9 \
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;2 ~3 c! |$ f+ J) y4 V- _
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;% j" V) D. ^- F
  
8 N6 Y' C% A! R- A& W  19、使用optimize table" i" O9 l5 J5 l  U% q  f' \% v! l
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;6 E+ N6 Y# ]6 X8 R0 l
  0 t# M) h- t- [
  20、使用procedure analyse()
( G- m0 ?! G5 W8 F5 e. m  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
% ~0 P5 p% f6 w3 Q4 c5 Z. \  select * from students procedure analyse();6 t1 q& b9 ~/ z# p1 @# f
  select * from students procedure analyse(16,256);9 f6 Z7 C( t  [
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( Q( m1 Z% y5 R; T
  + [2 }. F2 z( d$ h5 ]
  21、使用查询缓存( V, Q, V) m% ^0 S
  1)查询缓存的工作方式:, \4 I+ _0 X  V7 t; y! M
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。* j7 [6 ~' g  i  r' P- }6 q
  2)配置缓存参数:
6 f$ P5 _8 y# m* H3 K) j* {  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。% w6 s( _; j4 Q! \! E
  
7 H2 r4 p6 K* C  J+ k8 A9 j  22、调整硬件
. F5 a" e  O. i  1)在机器上装更多的内存;1 p) v# y6 S! E
  2)增加更快的硬盘以减少I/O等待时间;7 k# a  j6 u2 Z2 j
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;' K0 v' C) @; s  T
  3)在不同的物理硬盘设备上重新分配磁盘活动;
$ V4 W8 l+ G' {% y% x/ k( _+ n  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。, H) y4 F! ]! Q: w# z4 V$ y9 l" C$ ?
回复

使用道具 举报

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

本版积分规则

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