中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;
; R( S! z! s5 j3 @' _  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
3 M1 J$ v2 w4 E8 V  列出数据库:show databases;
" t0 A1 @  @. F& `" D4 n  选择数据库:use databaseName;! c( ?, k7 I6 I/ ~) Z
  列出表格:show tables;0 @/ ^' S. t' Z9 n
  显示表格列的属性:show columns from tableName;
9 o1 S% O- N2 L  建立数据库:source fileName.txt;
/ j' X: K9 c- o$ L  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;" _9 q0 e. W0 W+ t8 P
  增加一个字段:alter table tabelName add column fieldName dateType;
; i' ^  o! [7 ]4 G2 L; C9 m  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
( X, t5 P7 Y* N. A  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
" i9 ^4 K0 c+ I. Z% E( g  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";" x' }: o9 p: ?2 a, |) K
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
+ k7 C8 I! X' Y. Z$ _, a  查询时间:select now();2 V' l  M/ @' g
  查询当前用户:select user();$ `( j! {- J7 x9 p+ \
  查询数据库版本:select version();
8 L, C. Q9 u0 z8 ~" J. d* j  查询当前使用的数据库:select database();
! L! I. e2 l6 ~( W0 |) w  
9 h& D( |+ n, a, P5 u+ C  1、删除student_course数据库中的students数据表:9 r. P( _! P8 [$ m
  rm -f student_course/students.*
* R# [7 K) c, Y  
! t5 z( Z  g2 c1 a# k- V  2、备份数据库:(将数据库test备份)
" a9 A$ ~# P9 I+ J! }2 I  mysqldump -u root -p test>c:\test.txt
+ q9 o2 {7 Y# S4 _% E  备份表格:(备份test数据库下的mytable表格)/ N! ~$ x( Q; x9 X/ K
  mysqldump -u root -p test mytable>c:\test.txt" ?6 o8 d9 r% M' k! r( c  o
  将备份数据导入到数据库:(导回test数据库)- g- ]0 k; q! U! D3 i
  mysql -u root -p test<c:\test.txt, }" l# y! N8 P1 O8 D
  . S3 `# O8 m$ q
  3、创建临时表:(建立临时表zengchao)$ S3 u1 O. b% R4 Y0 Q
  create temporary table zengchao(name varchar(10));
+ U5 y' J/ V7 o. y. j4 I( f2 U  
1 f  O2 d  w0 e: C  4、创建表是先判断表是否存在7 c7 i6 Q1 X7 I' M: A. Z1 f
  create table if not exists students(……);) d+ B/ l" h1 O" n
  
& k1 C# x; `% G  5、从已经有的表中复制表的结构/ u5 e7 A5 `" z" V% C1 p! e/ g
  create table table2 select * from table1 where 1<>1;6 ?7 j+ F5 i8 H" {6 C  ?, {
  ( l0 _' a6 q$ e- |- r9 P8 f
  6、复制表+ q( i/ O6 R- ]6 V
  create table table2 select * from table1;
) K" m# x' G( o4 h5 N  
  ?; q$ W8 _9 R  ~1 u  7、对表重新命名
( \9 A5 z. k  a# w3 g% k  alter table table1 rename as table2;. S, v8 W6 }" R4 t% H% t- g
  
4 s3 \# [! k: r/ i- w) n9 N% F  T  8、修改列的类型
! e, Z( o  a3 N. S, H% y  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned; d% W+ V# e' f9 K* V& e1 s7 T" u. [9 T
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned6 h) B. l, y( K% O/ m+ `! {
  
5 h+ J' o% c) q: v, K" o, ~- I  9、创建索引* y" a: R# h- O$ O( U( w& t8 C' _
  alter table table1 add index ind_id (id);: ?  m. a# F5 c  q
  create index ind_id on table1 (id);/ i. F, a4 X; k" D7 H% d7 _
  create unique index ind_id on table1 (id);//建立唯一性索引; K( a, J' ~8 l; Q5 c) H
  
+ r8 O7 K  o) U  10、删除索引  |; I1 {" @9 E  O* e1 a. E7 `
  drop index idx_id on table1;% s8 _2 g' d1 w; V. d0 n
  alter table table1 drop index ind_id;! i: F2 `- D/ W3 d2 R6 s+ e
  , S+ x) k" J! s
  11、联合字符或者多个列(将列id与":"和列name和"="连接)* \# _3 _; k7 \7 S
  select concat(id,':',name,'=') from students;- z  r: w4 E7 V/ H( T
  4 c' E% Y6 u; A" K8 l
  12、limit(选出10到20条)<第一个记录集的编号是0>
$ Z' ~; T- `! U! |$ ?! H) s1 L4 @' _  select * from students order by id limit 9,10;, F5 Z* f4 u/ ?# ~8 S* ]7 I/ U
  * x) }, t! t" Y4 G' s# n- G
  13、MySQL不支持的功能
, J0 ?9 ]2 T6 L1 S  事务,视图,外键和引用完整性,存储过程和触发器) K, B+ c9 o6 a, y1 D" s
  4 b  d- S! a3 S8 o, H: q7 n# [7 U2 N
  ! l* T, K! B% O/ S/ n  ~1 N
  14、MySQL会使用索引的操作符号# |) g4 J3 ^, J1 _7 @) [( d8 Z
  <,<=,>=,>,=,between,in,不带%或者_开头的like! }- I4 z1 i3 D$ f* C
  
/ T. M/ B% H0 c. E  G  m  15、使用索引的缺点
* I! u6 h: `# ]6 J  s  1)减慢增删改数据的速度;3 s  M/ I0 M0 p; j+ @
  2)占用磁盘空间;5 t* w2 X# S( U% _8 R0 H
  3)增加查询优化器的负担;
/ b; Z0 i; E: H5 Z  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
& B, [+ |) _( _9 D6 A% W% x  
  K$ v: @7 C' Z. r+ P  16、分析索引效率: J+ g' O" b( F  e( Z, _  g
  方法:在一般的SQL语句前加上explain;
6 t3 j) E' k6 |* W& J0 n+ m+ e& a  分析结果的含义:& k- n' v+ z2 k0 r" @0 x& @: n
  1)table:表名;# R* |/ g) e% ?8 Z$ a  u
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;; H+ d9 {, `, Y7 g, y* V( Q& _- s
  3)possible_keys:查询可以利用的索引名;
" Q4 T. Q/ F: z* b: ^/ W# B) b- s5 r  4)key:实际使用的索引;
6 j0 h4 l) n* C2 _8 i& w  5)key_len:索引中被使用部分的长度(字节);
8 W- ]; u( i, O  z8 x2 h! y  6)ref:显示列名字或者"const"(不明白什么意思);
1 Q6 ]) E! o1 h  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
8 I, F+ E' p* l0 ~$ k# O  8)extra:MySQL的建议;, d$ D1 [% L  T2 C, _
  2 U# s# i, A' k9 F- f( @- B1 P
  17、使用较短的定长列$ c4 b' r6 c5 y5 H! L6 A
  1)尽可能使用较短的数据类型;- c' ]- e: ~- Y! O4 @8 I
  2)尽可能使用定长数据类型;: u: F; h; a# P- J' \! A9 ?) u4 R& M
  a)用char代替varchar,固定长度的数据处理比变长的快些;
6 {2 E4 T+ J' }% S4 M0 }  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
" C5 x  V$ W, J0 M  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
0 q6 `: \# S+ c: u) b8 ^6 S  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;4 B+ U2 C6 F/ E
  
' W. O/ f% c. n6 K8 g7 O  18、使用not null和enum
5 \/ i3 n2 U! N# R+ E6 c7 a  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;# J8 s! j( \* q/ O; S" C
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;' t+ Y; m' F/ \
  + Y4 z9 J0 S% S0 R
  19、使用optimize table# w0 l' e7 m8 ?! q1 O4 K/ {2 z
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
! T2 y8 d& d/ S( A! n4 I& d" K# b  : W3 \5 v0 Z) J& Z1 a! @- M4 T
  20、使用procedure analyse(), Q. W" C- j! A: S9 Q0 _
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:3 X$ }! c& e$ t
  select * from students procedure analyse();/ n; d9 ^, i2 O: a' s  Q
  select * from students procedure analyse(16,256);
$ s1 s: c/ \8 J: ^4 Y3 R+ D7 n4 {  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
1 I* r8 l- t2 C  : m/ D7 s- G4 n( R( K0 l, X, T7 P
  21、使用查询缓存" W3 T1 O4 r) x7 _
  1)查询缓存的工作方式:
; P! y& _7 ^$ D0 ]/ ?9 M) W  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。5 a4 u, a9 H$ w1 x- V! p
  2)配置缓存参数:
3 ?. ?5 t0 a; v. A, h  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。5 A$ F$ f" q* P- {
  ! ^1 j2 |0 D# U( m, X
  22、调整硬件. f* C, W: L$ x( a7 t' I! c
  1)在机器上装更多的内存;" J' c( @6 D. _( D  q
  2)增加更快的硬盘以减少I/O等待时间;( ~2 s5 ^$ t, A: L8 u8 n9 C
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;1 H' \/ [) x; e- q# G# {
  3)在不同的物理硬盘设备上重新分配磁盘活动;
; o* ~3 k# j2 \* s  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
( v: [' y9 l/ o2 W) J  ?




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