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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;! H. s+ |- @0 {: W  b* `+ a
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;( `. o8 R' _9 f$ L
  列出数据库:show databases;. t0 J2 ~) \0 R$ b+ M" X, H2 f8 h
  选择数据库:use databaseName;; P: l3 Y7 x: ^1 h7 [
  列出表格:show tables;" v* W% u- |- {# F7 L7 k/ o
  显示表格列的属性:show columns from tableName;
& }! T+ G/ O% I5 b! h5 A2 `  建立数据库:source fileName.txt;( G5 {2 V# W  E) o: P& j' T* H
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;+ Y) i& U8 `# y5 i
  增加一个字段:alter table tabelName add column fieldName dateType;! E2 h# a- [% V4 x1 a
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
. s- g/ I* k% K! g( ~  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;  ?- i- a0 B  B5 i5 b
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
1 M' m! M8 J. r- g! W- D  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;6 }( ^4 U9 M7 `7 I3 E
  查询时间:select now();0 n7 I$ T3 h8 T5 d: S4 \: w
  查询当前用户:select user();' b8 \$ B  e6 S8 J0 X" _7 @
  查询数据库版本:select version();+ N, B! [: ?- o: M) Y' a+ L3 l
  查询当前使用的数据库:select database();: d/ ?: X6 s7 n/ o9 o
  + Y0 p3 o" a' k% W5 V
  1、删除student_course数据库中的students数据表:5 x7 q5 A3 B" U- K, U: }9 k
  rm -f student_course/students.*
% G. a* |4 |0 H1 Q! t+ u  1 ~8 y! r8 ^1 f: P7 j9 n
  2、备份数据库:(将数据库test备份)
+ N2 P/ Z7 @- o4 M! Y$ @$ C. c& L  mysqldump -u root -p test>c:\test.txt
! w* \5 q$ i% ?2 ^3 S! E% X3 g  备份表格:(备份test数据库下的mytable表格)7 v; T. k; l4 A& S2 R* q5 E3 C7 }  ?
  mysqldump -u root -p test mytable>c:\test.txt( W0 K3 o& \6 U( g/ n# m  ]
  将备份数据导入到数据库:(导回test数据库)- C; ^* x: `$ S3 x
  mysql -u root -p test<c:\test.txt7 }& x2 D- f; J4 r0 g4 i% k! R
  % L' `; e/ t1 l
  3、创建临时表:(建立临时表zengchao)+ ^0 K* n( P# @! L( ]
  create temporary table zengchao(name varchar(10));
, N6 o5 J8 y) X# B7 X  
/ r* V* ]" ]; L2 g5 L6 |7 m  4、创建表是先判断表是否存在; O' @8 W2 @2 x: D
  create table if not exists students(……);
% ~( O. w3 P% N9 q" f/ s( S: U4 P1 u- F  
  C( s$ A2 g2 |0 v- T) I  5、从已经有的表中复制表的结构3 D" a2 |. _2 |2 [7 m5 b
  create table table2 select * from table1 where 1<>1;
  n& Q; i# M* P* X  " _; D/ u- I( n. C) @9 p  O
  6、复制表. x: u! k* t1 X7 K9 k
  create table table2 select * from table1;- Q" z; i3 ~0 N0 @% i8 M" J% F. z$ i
  
4 x) s8 w' m1 z5 ?2 T3 g' j: R  7、对表重新命名
; w- D9 a0 Y9 z  alter table table1 rename as table2;
3 m4 E6 G* v) z+ y0 }0 v  ; z5 ]: V3 L# Y2 E
  8、修改列的类型
1 G  I- ]6 n, s, S3 F  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
1 P' x- c2 o5 J# C, x  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned0 W: {+ y# ]- B' Q0 o+ |  l2 n
  
$ `# d. v! ]* {0 P3 m! g7 v5 G  9、创建索引
8 ^" W3 D% \2 u$ P  \: s  alter table table1 add index ind_id (id);
1 a# C1 B, N% `" Y8 G: ]  create index ind_id on table1 (id);
# S( m1 @; Q2 F+ K6 C8 v$ N/ b- y6 I* w  create unique index ind_id on table1 (id);//建立唯一性索引" Q; Q' m, |/ d7 R- B1 _9 ]# g/ b1 M
  - c8 u/ A; u; q- D
  10、删除索引
9 r1 \6 V/ V3 C4 V' P% p! M  B1 @  drop index idx_id on table1;2 ]9 ~+ g0 R- x8 ^9 |
  alter table table1 drop index ind_id;
1 F+ J& k" h) M! s  ; U/ }5 `4 d+ q% ]6 E4 w
  11、联合字符或者多个列(将列id与":"和列name和"="连接)/ a* a/ N. C+ ~8 F0 W3 `' Q9 _
  select concat(id,':',name,'=') from students;
$ h+ t" ?/ I, C3 v9 K! C  
" k/ P' I5 S8 R- [- V  12、limit(选出10到20条)<第一个记录集的编号是0>4 P8 `6 k5 n, P$ Q
  select * from students order by id limit 9,10;% X+ o3 n0 x. P2 i0 i5 U3 }7 ]
  ( r; q( D! ~" f9 k5 g
  13、MySQL不支持的功能
! k+ R* P1 _# I8 b% H. N6 ~$ M  事务,视图,外键和引用完整性,存储过程和触发器
2 O9 n/ ]5 V- b# S4 O7 h5 Z: [5 R  
: a& I7 K* S, H% r( `' G# f' W" d& f6 k7 w  # d1 Y8 f% H& B
  14、MySQL会使用索引的操作符号8 ]% ~& |2 \; t# W
  <,<=,>=,>,=,between,in,不带%或者_开头的like  t7 o9 D. S6 Y* x1 b. X# e: z
  
9 v' F, Z, n1 \( U: g! C2 Q  15、使用索引的缺点
# H) X+ `. _7 q$ R, c$ ?  1)减慢增删改数据的速度;
& r+ i4 q& x" T  2)占用磁盘空间;
6 Y( T1 _6 T( R/ t, H8 m  3)增加查询优化器的负担;
1 ]! T) V' D& `- X  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
1 X& j, s8 i# w$ m6 d2 a7 b2 k  
2 u; [* O7 _9 h& }  16、分析索引效率
, x3 A7 ~+ N4 }+ b8 H& ]- R6 i! D0 ]7 v  方法:在一般的SQL语句前加上explain;
, {* z/ J% [5 r+ I& Q6 \' A  分析结果的含义:. K/ M9 J4 w" f* I/ Y$ l
  1)table:表名;% N! f1 o) f, a+ P  g; t* r5 g
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;( {0 V3 h, R0 `" i, k# h
  3)possible_keys:查询可以利用的索引名;
( b: L5 k# n' t! H  4)key:实际使用的索引;
* H. S8 H- A( l$ b, d# H  5)key_len:索引中被使用部分的长度(字节);3 q2 d; Q" r  ?4 u
  6)ref:显示列名字或者"const"(不明白什么意思);
7 @1 ^( x* S, X  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;$ ~0 [2 v/ ~* y2 \$ Y9 E
  8)extra:MySQL的建议;0 e8 }) V& g. j# A
  + n; I( y2 L7 k, D6 r) e
  17、使用较短的定长列. d& S. ^  F1 Q' c: H( D
  1)尽可能使用较短的数据类型;- s# P5 v! u' W& u) x: t! O5 y3 s8 F# u# K$ J
  2)尽可能使用定长数据类型;) y# X7 `0 _1 B0 g1 o- E  j
  a)用char代替varchar,固定长度的数据处理比变长的快些;
! z/ [2 A7 J( H; c2 ~. V  k. g  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;/ q0 f! G2 M9 m4 Y4 b
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;; [+ _1 c2 {9 N$ l1 q- V
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
& d2 l) F2 p; R* M7 T6 z  
2 `) N' L4 f; j) Z  18、使用not null和enum) _( d% D2 w6 U9 C/ P
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
# }: s/ c2 `* k. _, y  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;9 J" i% q& I+ U+ B( U2 a
  / R- a% t" I' W; \
  19、使用optimize table
& N8 m1 C9 h# n  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;8 }, k3 c2 @" n! F. x
  
3 v( A9 q. t, R4 h+ C/ E3 M  20、使用procedure analyse()
! B' k7 I  T. [0 u9 K! a) e$ f  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:0 b3 s1 P4 X" H' S8 a% O3 ~
  select * from students procedure analyse();) B$ E9 z1 N2 F) ?+ R; |0 H( e$ Z
  select * from students procedure analyse(16,256);
5 x2 K/ @8 K. L7 R3 i5 N3 y  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
" K2 j8 \' O; }2 E: |  
3 R/ l- c- Z  v- }% D, p4 D  21、使用查询缓存
/ q, z: S; Q% z9 Q5 x+ `2 A  1)查询缓存的工作方式:( }8 V4 N0 A; U, k- \1 ^2 p
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。0 X9 N6 x, f: K' b$ ^; m, G7 p- D( b
  2)配置缓存参数:
9 C: _( b) O, N/ h* i! \  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。  C; i: M9 R. t% r
  ) Y. Y. T9 Z% u4 g4 v
  22、调整硬件
' v) ]' k; \0 V  1)在机器上装更多的内存;
# Q, H, Q. E$ H  2)增加更快的硬盘以减少I/O等待时间;4 I8 O, r8 S! ^& i2 M# X# U
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;: p1 T) `8 t% v5 X
  3)在不同的物理硬盘设备上重新分配磁盘活动;
7 p8 k$ {. J7 I  ]  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。4 z! d& o* E* |" ?
回复

使用道具 举报

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

本版积分规则

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