找回密码
 立即注册
查看: 2630|回复: 0
打印 上一主题 下一主题

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;8 z" \) ^" E% c, b$ \$ S2 O  i
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;0 p, A% |0 W7 i8 m! H0 s
  列出数据库:show databases;; x# J0 o3 |. z( A: F
  选择数据库:use databaseName;7 h( _9 \8 A' ^
  列出表格:show tables;# \* G2 v# }6 F" {! R
  显示表格列的属性:show columns from tableName;
2 @* h; R4 \2 i( ?# ]! Y; h8 q  建立数据库:source fileName.txt;1 v  V9 ^6 Y  u9 }
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
9 z% L, I1 w  L6 q0 L  增加一个字段:alter table tabelName add column fieldName dateType;8 F  t' H1 e' I; e) w' N- F
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
3 |0 M% I8 e! D1 R( u( g- q6 ?  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
7 {0 o9 R6 S7 `$ I  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";. f6 c1 x5 v% h( K
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
0 y# E7 ^( _7 e2 j/ e5 J% ?/ P. c) F  查询时间:select now();3 z4 u4 t: |) `6 l, t3 ?% _# \7 n
  查询当前用户:select user();
/ K7 R1 S8 ^; Z& r( l9 c  查询数据库版本:select version();! Q/ d) U7 B! [+ ^) b9 X% O
  查询当前使用的数据库:select database();
% e$ _4 p5 [0 {$ b  
. p8 J1 t- {0 |4 d  1、删除student_course数据库中的students数据表:
9 _4 p+ i2 H$ A9 h7 g: n) x  rm -f student_course/students.*6 ^* r# _  p- r4 J3 i
  
. w( c8 b; g* A, s# D  2、备份数据库:(将数据库test备份)
0 ^& S1 v, \4 n2 C+ O, \  mysqldump -u root -p test>c:\test.txt, \- A- R( X9 A3 y, G% Z4 \9 g
  备份表格:(备份test数据库下的mytable表格)
* _9 C/ f: Z4 [/ ^" [$ f. y  mysqldump -u root -p test mytable>c:\test.txt4 ~3 J! p. R8 ^% \' I" L% y
  将备份数据导入到数据库:(导回test数据库)
/ v$ t5 i; M5 q  mysql -u root -p test<c:\test.txt6 S' b1 A6 s) m+ K3 O
  , D  r, I! B2 j+ f4 `% `
  3、创建临时表:(建立临时表zengchao)
, D5 A8 x6 O  G  create temporary table zengchao(name varchar(10));
% r6 p0 l$ V# I% `  
, q3 }" L- D+ E  4、创建表是先判断表是否存在
3 k, X: [* `  ]9 `  create table if not exists students(……);
3 `8 U& Z: M  J. }$ u& \* I" w0 Q  5 T) L& ?* a8 o7 u$ M9 I
  5、从已经有的表中复制表的结构3 W2 ~1 v( g! j  j
  create table table2 select * from table1 where 1<>1;
4 c* D. P7 d4 q) C+ i0 w6 ~  1 a5 B: ^; M0 @2 B) m' S* |) c
  6、复制表3 e4 s* X' }5 N7 T% w. q
  create table table2 select * from table1;0 N* g( J' N6 d. s# v) t
  ( O- ^) T& ~: p9 w
  7、对表重新命名
3 l6 B3 \. ?) ~+ e) c  alter table table1 rename as table2;3 C% J, ?* E6 z8 J: j% U3 k0 R
  5 @6 b* g1 l$ t" y  ^: Q
  8、修改列的类型
- @; s- M, G% h  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
$ R' t; `% n  [  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned, N, a& r* O; t; B
  
/ @' E$ t8 ?5 f& W' z! b) B8 o1 x# t. p& H  9、创建索引+ B! J, J& G3 A2 s2 F: w
  alter table table1 add index ind_id (id);0 G2 D. H' {, r3 g  V
  create index ind_id on table1 (id);1 T) }- F/ `" H3 P! F3 [1 A
  create unique index ind_id on table1 (id);//建立唯一性索引6 w& Y7 ]* J: `3 e6 e8 y
  
2 R& {  o4 d0 n, |  10、删除索引
' @5 r- A8 `& r, z  drop index idx_id on table1;
1 X9 W4 W+ L% j8 Q6 P* t  alter table table1 drop index ind_id;
, w: C3 A! {4 Y" V. p' P& A4 N  
# G" Q$ \8 v' C) B  11、联合字符或者多个列(将列id与":"和列name和"="连接)
4 d/ _' v1 t2 M& U  b  select concat(id,':',name,'=') from students;
- V, F2 {0 G0 e  * J$ l( u, Y) L% a0 ?) P3 H* G
  12、limit(选出10到20条)<第一个记录集的编号是0>* A/ @6 S/ k- w: x2 F4 A) m+ }
  select * from students order by id limit 9,10;
7 d  k% n& `9 p8 d! N; H4 h* y  4 v' C) _. ]2 o; a5 f
  13、MySQL不支持的功能
4 T8 `3 I6 |8 f  事务,视图,外键和引用完整性,存储过程和触发器* k. F& X' l! J6 L; }
  ! @* m% U, @8 {( @8 ~# X9 u) o8 j
  
( b+ Z) o) t  g1 z2 i( N  G8 S  14、MySQL会使用索引的操作符号
* c# v" E' P$ {  <,<=,>=,>,=,between,in,不带%或者_开头的like0 J: A7 Y% ]3 C( ?* ^, K2 C
  
  B  W# I( s* X8 Y$ k' j  15、使用索引的缺点: K! n" z  h% g; Q8 p
  1)减慢增删改数据的速度;
1 q% L+ Q. p( E& R# D; p- P8 Q( z  2)占用磁盘空间;# r% ?( D3 @5 `
  3)增加查询优化器的负担;
' y; e9 e+ T; A1 |  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
  Q" z1 A: e+ D/ i* _& L) @  # ]% P( D' v- d/ ?
  16、分析索引效率
6 m1 `/ l9 ?8 C+ \5 W6 K# Y4 S8 e  方法:在一般的SQL语句前加上explain;
; q' Y+ w2 }3 j2 t+ {  分析结果的含义:. ^- F% @: t; n; c: }# _
  1)table:表名;
% O7 l( M& _( i/ x% L; }" A  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
2 Y5 U4 }+ I0 j, @6 P  3)possible_keys:查询可以利用的索引名;# t* F6 A* p' ~' h  I9 k
  4)key:实际使用的索引;
  ^2 B9 ^7 N2 p# n0 }  5)key_len:索引中被使用部分的长度(字节);
/ [, |( i  A& m9 F  P  6)ref:显示列名字或者"const"(不明白什么意思);
1 I4 j, E$ Y: a: x- e6 B/ L/ p/ K  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;/ _( W% Q  ?( \1 |9 a
  8)extra:MySQL的建议;
7 f9 `$ n# _+ K# {- k  1 F' w2 n3 Z$ d$ `$ ^) @
  17、使用较短的定长列
7 Z) `  b- l' P% i7 s  1)尽可能使用较短的数据类型;" b5 E- K: E: R
  2)尽可能使用定长数据类型;( l2 b9 |8 y2 F1 u3 X, s
  a)用char代替varchar,固定长度的数据处理比变长的快些;
5 U1 z6 O" t+ Y- `4 m7 Y5 c  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
4 O2 b( p- C" v! D" p7 ~  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
0 ~! Y0 E0 i; S7 Y$ f  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;3 l. m, I$ ?: _7 F" Q$ ?
  $ {' F: k; ^' g- t3 W7 A3 ?
  18、使用not null和enum6 e  ?; I1 z( Z( f7 e
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
6 b( l8 x0 [0 z' P8 d& I) j  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
. Y* |1 \. X$ u9 j1 Q5 j  . d/ w2 A( J. _
  19、使用optimize table
) J6 j4 h* k9 @# C  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
$ A9 p+ s; ^# t$ W/ L6 N- Q2 r  % h  @0 ]; f, W1 \
  20、使用procedure analyse()( T1 e0 h9 ?/ E/ g0 V
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:6 ?$ `! q1 Q. J7 G$ L
  select * from students procedure analyse();6 A! o3 [1 W3 j! a& k
  select * from students procedure analyse(16,256);# f( f% M4 r8 M* Y- l
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
! N. H% u( U3 g) @: ~& X  4 E) c: O$ T7 {- i4 ^
  21、使用查询缓存1 K  [1 @4 W9 c; y+ k
  1)查询缓存的工作方式:
' X; A) n. i/ m2 X+ g' H  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
- N6 f  R$ x* m6 |2 t) n. p  2)配置缓存参数:7 ?  p. m& C  ~# L6 E' M
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
7 M; `( d, K7 \! h9 Z0 m  / r) l; T, _2 e( }3 ~% u5 {
  22、调整硬件
% |7 _3 n- w& ]2 r  1)在机器上装更多的内存;, p$ d+ I+ F4 v, C; {+ Z& o
  2)增加更快的硬盘以减少I/O等待时间;
& i) u3 h8 f* y/ m" H3 J1 o  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
; Q# @- a4 ?/ S7 d, n) o  3)在不同的物理硬盘设备上重新分配磁盘活动;
  U4 I) B8 f; k% A  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
+ M3 x) t' c1 Z9 O( e  E4 D2 D
回复

使用道具 举报

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

本版积分规则

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