中国网络渗透测试联盟

标题: mysql常用命令 [打印本页]

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;
! S8 F: Q5 E$ P/ G* i9 b6 I! ~1 R  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
- B8 g9 y0 k& G0 X) R' N  列出数据库:show databases;! g- Z4 o) j. a1 R; `! {; `1 @" n
  选择数据库:use databaseName;
! `1 Q7 _2 Z4 e4 a0 Y  列出表格:show tables;
; `/ Z6 R2 m/ A. u! P  显示表格列的属性:show columns from tableName;
* I" G" K$ U; q% v) L: q  建立数据库:source fileName.txt;
+ a) y  l) M- F0 ]  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;1 N- p6 ~2 r) C4 ]) D$ J
  增加一个字段:alter table tabelName add column fieldName dateType;
5 Y, @, H- ]2 v( [; A, O7 D4 @9 \  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
$ |; ^  G5 Y( b- d  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;2 B$ ?: o$ b7 R% y5 E
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
# f! l' \, l( l8 p! T  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
! j5 p- C' C; J# n4 t; v, C' T  查询时间:select now();
$ t  {6 a7 b5 J# T" g  查询当前用户:select user();
  u7 \! v3 h/ Z9 k2 u  S4 x  查询数据库版本:select version();2 o) k* p4 a$ P. v: B
  查询当前使用的数据库:select database();8 b6 y4 j# x" y1 [! s
  % \; p& O) }0 V) z$ n7 |6 X
  1、删除student_course数据库中的students数据表:6 l6 g9 d" ^: L  T; z
  rm -f student_course/students.*  R. W" v, O/ ?! b
  
! m7 ]$ @: @; L/ q$ x* P  2、备份数据库:(将数据库test备份)
2 M, d  i: X" ^( W3 H' j" E  mysqldump -u root -p test>c:\test.txt+ o& e- V4 c; g& ~* ^+ g- {
  备份表格:(备份test数据库下的mytable表格)) V1 H- \" G% g3 n2 x8 N
  mysqldump -u root -p test mytable>c:\test.txt
! ~7 U, G! E+ b  @  Q7 ]2 B. L  将备份数据导入到数据库:(导回test数据库)$ b( q9 D1 D% ]+ r- ]5 P
  mysql -u root -p test<c:\test.txt
2 `; F+ v# [6 `/ G; j  2 t7 j$ y" ]  Q, K$ |) C+ o  u
  3、创建临时表:(建立临时表zengchao)
2 E$ `  m& Z* f7 L" m" Q  create temporary table zengchao(name varchar(10));
7 v" T5 n* B7 U% S6 ^, ]  
7 l1 h4 O' n8 T' ?  4、创建表是先判断表是否存在
" b/ f! e9 w- D7 T  create table if not exists students(……);
; P) |* ~- Z8 Q$ ~# Y* N  
6 C" A  i+ c  U1 `2 f) i& B9 q2 \  5、从已经有的表中复制表的结构
) R0 R6 f# d: B8 Y3 b  create table table2 select * from table1 where 1<>1;
7 H) H, F, z# x; R4 \3 F  
  a5 \8 t. ~% R+ Y1 w1 k  6、复制表$ m) J/ A; w/ Y4 C6 m  l8 u4 B- C
  create table table2 select * from table1;
' ~, |/ `% t4 z  . U' a9 D3 X% Y. E
  7、对表重新命名
% C1 R$ [4 T7 ^. m5 F: W  alter table table1 rename as table2;
, K9 c, c, |. w0 J& ]  
8 Q: a" u" ~! V8 \7 Y% L; ~/ S4 \  8、修改列的类型1 T) |% ~- M' ]# J
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
: V7 o6 j: C1 G% U2 ?/ }  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
7 H! n* c4 a# q: s. @5 c% \  % Y! n1 U$ {0 }
  9、创建索引
3 Y3 a7 W) G, X4 j' Q# w+ ^6 U  alter table table1 add index ind_id (id);) P- E' U- r# o( q8 m% n
  create index ind_id on table1 (id);7 }7 y, w3 ^! j+ ^
  create unique index ind_id on table1 (id);//建立唯一性索引) N* @- `9 R1 H: l
  - {, E8 E8 l* M
  10、删除索引1 b7 T" S: e8 r% w& k8 F
  drop index idx_id on table1;; ?2 [' o$ T8 u* Y2 t% J7 l$ u
  alter table table1 drop index ind_id;
$ v( {9 S/ B  x; F, e- n! E+ Z! @  
7 @& Z! k2 L1 Z) {" K  11、联合字符或者多个列(将列id与":"和列name和"="连接)
" Y( G( I/ l6 O: F2 w  S1 |( p  select concat(id,':',name,'=') from students;
% v6 u( _: u7 O$ W: G/ C  
- e6 \# a1 a* S  Q6 W9 B3 n  12、limit(选出10到20条)<第一个记录集的编号是0>
& {- v/ d; u) |, J, j) x  D  select * from students order by id limit 9,10;, Q' n# f6 s% m. [8 r; E
  
, \3 _  ~. b. u6 q  13、MySQL不支持的功能+ C# t3 Z1 r) w
  事务,视图,外键和引用完整性,存储过程和触发器
/ Y7 @' n, [( p  w* k8 Z/ g8 A5 ?* s  0 D$ {6 q9 g4 |7 n: E
  
; g+ Z) I0 {2 U% A8 G4 W  14、MySQL会使用索引的操作符号
) M+ ^6 x* s8 J  <,<=,>=,>,=,between,in,不带%或者_开头的like0 d! L9 A  W  G* A. N* {! W
  
6 X. M1 r% x1 _* ~  15、使用索引的缺点
& ^: a& b0 \0 v9 o9 [/ H0 w1 ], O  1)减慢增删改数据的速度;9 H; K8 `) A" Q
  2)占用磁盘空间;
2 ?" I- |/ p8 ]; U  3)增加查询优化器的负担;* N  C  ?) C( I4 q* L. ]- @
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;- C$ f9 H! T/ H) z( `/ q
    @- Q% I4 F& F& j; k7 F" E9 A
  16、分析索引效率
$ `; M( n& f5 m5 S' r  方法:在一般的SQL语句前加上explain;
( y" V/ L" f; g$ |+ y  分析结果的含义:- |) ^* d; h" G' R8 r8 }
  1)table:表名;0 H0 O9 u7 o# k( I6 I8 b7 d
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;; E. y, v/ p8 H' i# J$ }
  3)possible_keys:查询可以利用的索引名;
4 w" M4 `% n& j0 Q. J1 [( L( ^  4)key:实际使用的索引;
( ^& }  @3 ^' l  h3 D4 O1 R  5)key_len:索引中被使用部分的长度(字节);4 w. O$ R/ ]2 x4 s# O
  6)ref:显示列名字或者"const"(不明白什么意思);) `! I# }+ X& F2 b% B/ _
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;  a* T1 Y3 e4 O/ ]: F+ C4 _
  8)extra:MySQL的建议;$ x9 h" _1 O. j7 u9 K/ A: b. p
  
: j/ D, L  u7 D  17、使用较短的定长列! [6 h, d/ f% u8 S) c% ~. K- w4 D
  1)尽可能使用较短的数据类型;
3 f1 w( s4 ^: I* }4 l0 }) H  2)尽可能使用定长数据类型;
) I! `9 K3 ~, p+ V6 g  a)用char代替varchar,固定长度的数据处理比变长的快些;3 ?5 o' r0 E' b7 j4 C
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;. R/ N& q6 w# _4 D2 n- p# h
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;' k! t6 q( v; _7 Z" _3 h
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
7 M6 I) h, f# O% x' U- c/ q; V  
7 l# |  b) `* |3 d- k+ k. X  18、使用not null和enum
  _2 c: Z! r* ?" N: [: |  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;8 h2 o  T. [5 K, Y- A" H
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
" X  P+ S) _  b( m& P5 }  
* S9 P7 {# M! Q8 A/ T6 i  19、使用optimize table. [) e: r4 _; S% Q3 v3 B8 _
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;5 B2 N/ r( _+ `! w
  - J9 U- C. v7 G" I3 [! ^
  20、使用procedure analyse()+ R1 {1 y0 ]% A7 c
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
. Y4 }7 d+ L2 s. }) n4 I, N  select * from students procedure analyse();
( \. c7 I* o8 q- E0 i  select * from students procedure analyse(16,256);  G9 {8 H* B2 H. N; X, Y8 X/ B  w7 z
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( g. ]$ u1 P3 y$ z( h
  0 G: R: a& o! n. p. J0 H
  21、使用查询缓存& S2 {( d2 }9 w) C1 B& V& a
  1)查询缓存的工作方式:( N( m5 Q( i1 C/ ~. Y3 R" d
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
  _' K: F: [2 r9 _  2)配置缓存参数:! W1 j% j, S2 I: X
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
1 \& f( t  C/ q8 T8 o. o  : W% K9 e. s  b- {
  22、调整硬件
3 n0 t. j5 L! I; o' n  1)在机器上装更多的内存;/ s2 {9 U) S% U  w, i6 \1 g" F
  2)增加更快的硬盘以减少I/O等待时间;# t# K% u7 i8 `. y( h
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
8 {- T8 a2 L& S' t  3)在不同的物理硬盘设备上重新分配磁盘活动;
. {. i8 @. a; B; ^! Y  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
; m* z+ {; ]& z5 ~* U1 g" Q# D$ o




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2