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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
0 p4 I8 R! r# o( m  U) R2 S  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
2 \; s! R/ @" p) ~, o  x# K  列出数据库:show databases;! ^8 \$ z& \1 O3 E5 R8 x
  选择数据库:use databaseName;
( e+ |1 d, o0 r. O* K+ H3 L1 [  列出表格:show tables;# d  o" G3 A1 K
  显示表格列的属性:show columns from tableName;
% W' I7 R2 d% y# J+ K  建立数据库:source fileName.txt;/ _( h1 P: n; Z0 r& D
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
% `0 _/ ]" O! K* |# x4 X; D  增加一个字段:alter table tabelName add column fieldName dateType;
# c7 G) B  i" j* ~* T  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
- ?# `1 \  l  i, z& h3 A# g  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;" z/ _- k: s: ~0 O+ Y4 ~7 G- B
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
$ I* g2 ]3 v4 ]( _5 n% G: U  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;3 N+ u4 q; B3 @2 b
  查询时间:select now();+ ~8 U$ o0 |: O: Z: X
  查询当前用户:select user();
1 i' r. u, a! K1 h* u  查询数据库版本:select version();8 R7 a, L3 P, y1 `& c
  查询当前使用的数据库:select database();2 D1 O: y5 C% a0 p0 x
  
0 x( Y) X3 a2 H. _) ^  1、删除student_course数据库中的students数据表:# D+ \. L4 f" h9 v  O9 |2 w7 @
  rm -f student_course/students.*  H" f* \; ~5 u& X1 X( h
  
. M( Q9 t6 J# [' b1 Q  2、备份数据库:(将数据库test备份)
9 ~/ C7 {$ l# T4 y/ f) V: q  mysqldump -u root -p test>c:\test.txt% P% L3 M4 w3 Y! R
  备份表格:(备份test数据库下的mytable表格)
+ _% b. G+ m) u  mysqldump -u root -p test mytable>c:\test.txt
4 ?1 M& L* E! Q& v1 N  将备份数据导入到数据库:(导回test数据库)
+ A" k0 h" `$ T, e2 u- k3 t  mysql -u root -p test<c:\test.txt8 J4 ?/ S, k+ y6 R4 e2 e5 Y9 H/ v
  
0 Q8 [/ H( O4 D7 g6 F  3、创建临时表:(建立临时表zengchao)# ^, B2 r2 w8 E2 {
  create temporary table zengchao(name varchar(10));
0 ]7 J$ L( }7 A( K2 ]) d6 K  
& w3 |$ \8 ?; {4 [  R' N1 G  4、创建表是先判断表是否存在
4 ~; }3 @) Y; {* Q% Y7 O  create table if not exists students(……);& Z1 R7 M9 x. W, m
  
# g' a6 ?- f1 A- E& v8 b/ M3 ~1 q  5、从已经有的表中复制表的结构
) V2 ^* L# L2 |. {; I* y  create table table2 select * from table1 where 1<>1;
$ s) z( n) B# I+ M; Y' w  
# B: I, u" q* ], D% C' s, a( w+ c  6、复制表3 P; H0 P; x6 h( z' m
  create table table2 select * from table1;4 `$ x, Y$ i  E. K2 h+ x. ?: t2 X
  " r: V% M9 X# y4 o' R, u
  7、对表重新命名+ D% f  z. E+ F% M
  alter table table1 rename as table2;
' F% G8 a& Z+ [& b5 X3 d2 I  
9 E9 m) \  l: Q: R  `  8、修改列的类型- N2 f: m1 E7 Y# ~2 r5 W6 S; I
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned% [6 }( V6 `% G2 M) t
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned9 `% p" x0 k  K: I# C0 m/ }4 X: k/ \
  
% p2 g! d) ^! b/ Q. x  9、创建索引
8 H& ~( F; i% o0 x2 [! i  alter table table1 add index ind_id (id);" u/ e; g2 D3 G* _; T$ c6 q
  create index ind_id on table1 (id);
/ o% r. r, [+ }* {  create unique index ind_id on table1 (id);//建立唯一性索引
5 h) G9 O3 j- g6 o& w1 [* m  
% s0 ]) e5 D/ k  10、删除索引  i6 N& e8 y* k8 w6 T- U
  drop index idx_id on table1;& p! D& Q2 N0 e0 A
  alter table table1 drop index ind_id;! q2 {6 @) T5 x/ r( [2 c4 B
  ! T. s# ~! o! P6 o
  11、联合字符或者多个列(将列id与":"和列name和"="连接); B6 L. U+ ~# Q% E: C% w' \
  select concat(id,':',name,'=') from students;( G1 e! X/ P0 e  b/ f( Q# B
  + g2 L! H/ d' j' E' I
  12、limit(选出10到20条)<第一个记录集的编号是0>6 _4 P" P+ l2 O3 e% e; x3 j
  select * from students order by id limit 9,10;
3 f. R& r# n/ R- [+ r  6 Y* t* n" e0 ~0 k6 H
  13、MySQL不支持的功能. b# Q5 H5 j' g5 n
  事务,视图,外键和引用完整性,存储过程和触发器5 ~  U. a; M6 I' D
    G( Z9 j6 m) f, Y5 @+ K
  
: @+ g, Z/ \; _" B  I) e) ?  14、MySQL会使用索引的操作符号( @/ N' b& f9 [! w8 T3 x
  <,<=,>=,>,=,between,in,不带%或者_开头的like8 z9 H( d  S8 w9 r! i4 p. c$ H
  9 n/ y; S/ H  @& ]* {# p
  15、使用索引的缺点
1 X: T+ G( n: q) K( G+ _8 s, n, w! q  1)减慢增删改数据的速度;( l; I# R: Z; M0 v; d, t5 `
  2)占用磁盘空间;8 D+ B) T! o3 I" L
  3)增加查询优化器的负担;
5 w3 l& _; S( D/ a2 R  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
* q% G" L" m0 k( w  
  m& a. D7 p0 T# v, ^- j+ |0 p& O  16、分析索引效率
6 P$ R; z, \6 t, x  @3 ?4 @  方法:在一般的SQL语句前加上explain;% ?8 B* Q9 L) h7 X+ E/ V
  分析结果的含义:7 a6 i) z! }- `5 b) p
  1)table:表名;" A* Y  i8 i( I) z+ W$ {$ x6 l
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
2 B: ]$ H. F9 }. m% c  3)possible_keys:查询可以利用的索引名;
2 q0 R8 |$ @1 O- G+ c8 [9 F! d  4)key:实际使用的索引;) C" ^; R0 g# x0 N; O
  5)key_len:索引中被使用部分的长度(字节);
- ?& @" Q1 N- v' o8 x  6)ref:显示列名字或者"const"(不明白什么意思);
% v: v/ C( T/ e9 |4 G9 Y  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
+ Q6 P) @8 I# q9 g1 M$ j0 X  8)extra:MySQL的建议;4 n# R! i- F' e& R! K) B4 w* I7 {* Q
  
  z1 ?; |# Z( F; U6 @" S" b  17、使用较短的定长列& u% r: M7 a% C3 R% u# T
  1)尽可能使用较短的数据类型;, U2 Q8 j* r1 M
  2)尽可能使用定长数据类型;
1 q8 A9 Z3 J, f* }  a)用char代替varchar,固定长度的数据处理比变长的快些;: v" ]" E2 F5 @- g- A5 E
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
) X& ^' @9 R) H. k# L3 d' E  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
5 o4 {, I' y3 X, j, l) ]7 X% `  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;5 g+ c- W2 q- S7 J* o
  / B5 M$ b3 G2 B
  18、使用not null和enum
2 w  h+ r. C' A1 R. x  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
' V/ f2 m0 B: i/ \& _' E  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
9 f1 D- W2 d0 b# U7 h+ ?+ C7 I  
* s8 R* z7 T2 X9 }/ z  19、使用optimize table  W3 y4 |+ a' j
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
% e9 d6 w' ^! i/ Z$ X7 X  $ r3 f5 b$ {' {1 }9 u% O
  20、使用procedure analyse()8 W( X, U) \# b! \+ O
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
, E) Y  J2 R5 L. h: V# v7 F  select * from students procedure analyse();
6 z$ z( t0 i% I  a' C$ }  select * from students procedure analyse(16,256);' j! v$ `2 x' q3 a3 D
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
, y' @+ w+ q% _/ h& |8 G5 {  
% w2 c$ ]5 x9 s( n* J  21、使用查询缓存
0 {) x# h& h% W4 O/ M  1)查询缓存的工作方式:
- e# h/ w* M3 A3 a! |% |& |& f  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
4 c$ s# A. T2 j9 w* h* V! V: y  2)配置缓存参数:& d9 h$ B$ {! v- c
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
% d& s' Q9 d) x1 r$ G  . K. f# L2 j+ ]3 z+ [& T
  22、调整硬件% R: r- x5 o4 Y6 v
  1)在机器上装更多的内存;
6 c+ h* p/ |# L# G  2)增加更快的硬盘以减少I/O等待时间;. ]* y9 {6 ~. R# E
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
! S6 Z5 t1 q  ]  3)在不同的物理硬盘设备上重新分配磁盘活动;
+ a( d7 J' z( u+ g  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
/ k3 F+ N( R' D6 g4 J0 M& M
回复

使用道具 举报

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

本版积分规则

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