中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;
+ N; C: U# A5 n  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
# t4 T$ b; m/ t0 O' N5 |& ]4 e  列出数据库:show databases;
; p2 Z' j5 t% B5 _8 q( }+ j  选择数据库:use databaseName;( G/ l' e  n, X- ?
  列出表格:show tables;
- @  E* N* b+ z8 d, }  显示表格列的属性:show columns from tableName;- C% m5 p: M  B" {; U
  建立数据库:source fileName.txt;
9 b' S, a& B1 G8 u, y  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;# k+ F$ Q( w. P, c! g1 R+ C
  增加一个字段:alter table tabelName add column fieldName dateType;
* d+ F! W. u" a% `, C  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;  y" Y; E9 W5 d" A( l% H4 M2 F# f
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;- k- m8 \7 S& N5 M+ `
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";9 J; H% S. B9 {7 ^
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
2 N" H- A6 a5 z  查询时间:select now();
! D, M: z$ J7 k$ C  查询当前用户:select user();
* a4 _& B* d* Y8 A+ ~, L. W  查询数据库版本:select version();5 n* H: ?$ C7 V- k; c3 A  r% I
  查询当前使用的数据库:select database();0 I9 ?* t- D6 f, Y' M
  ; z* U" ~% s# U: e* X- u: r" F
  1、删除student_course数据库中的students数据表:
4 `# o" _; c) F5 s. m2 U  rm -f student_course/students.*5 X3 c$ _# q3 y
  - @/ l- N, U4 {  E. ~. H5 c
  2、备份数据库:(将数据库test备份)
+ I  S2 e$ q* D$ s4 F2 u  mysqldump -u root -p test>c:\test.txt
: N2 r( _" ~3 S! {8 P  备份表格:(备份test数据库下的mytable表格)
8 n. D9 z% X8 S+ \! O$ Y  mysqldump -u root -p test mytable>c:\test.txt' [  ?$ |+ p+ _2 C. L
  将备份数据导入到数据库:(导回test数据库)
# a/ b  t: K& \  mysql -u root -p test<c:\test.txt6 b) L, m6 d$ A6 r6 [2 D
  
: A/ s8 p( x1 }5 K- `. M% y3 ~  3、创建临时表:(建立临时表zengchao)
+ A" W' G% P% I4 y$ |% E7 T- M  create temporary table zengchao(name varchar(10));  J$ A; h8 e" a7 u% q- A
  
5 T, _" h9 P) P" g  4、创建表是先判断表是否存在
" d- ?5 j% Y1 G& a( L: Q  create table if not exists students(……);
2 @5 I7 d: q2 k0 r9 I  . w; T3 O5 i8 k( ^0 {) S% u' j) T
  5、从已经有的表中复制表的结构
8 W) w( f0 Y8 O8 x/ f. H( q  create table table2 select * from table1 where 1<>1;9 A7 F0 {& K: E) b4 W' q$ S
  
9 z+ [/ E2 ^, r. ]  6、复制表
- Q$ h+ I# z% t/ C' c  create table table2 select * from table1;. G$ ^) i, P6 W, E' p. l) x
  
  ?2 A9 i  U) {( [- `- B  7、对表重新命名
! X( ^1 }) X, Z8 {# W& {  alter table table1 rename as table2;- d9 \( |1 q' p4 z
  
7 T. V( I& p2 ]) D1 y' \6 O4 p  8、修改列的类型# j" F' v+ u# n. I9 A; I
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
7 R. M. R: f  j% F" t8 I- }3 |  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
" M( P5 i) _) D2 r1 J+ {# A  # v/ m5 T4 ?! v+ A/ W9 k& r# W; m& ]
  9、创建索引
0 V+ {7 o; k% R$ o( z% p  alter table table1 add index ind_id (id);. R' }% k$ @9 V: j' Z+ R' l
  create index ind_id on table1 (id);# T5 v5 c7 f. e
  create unique index ind_id on table1 (id);//建立唯一性索引+ z2 g, k9 X, H: ]( `4 i; O
  . |" s" F; |" t; n
  10、删除索引6 o9 Z7 N) g- Z0 M6 t. m: y
  drop index idx_id on table1;% K6 {- V+ B: A; x% k. ~
  alter table table1 drop index ind_id;, t' q  `! y( e" u
  % j# Y6 H+ M- t; B6 j' _( R! Q; D
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
( }: g! G# F% q/ X$ e0 G* \) R  select concat(id,':',name,'=') from students;4 C- j2 c' f- l3 m, \4 b5 ?
  
! P7 N; i% B2 W  12、limit(选出10到20条)<第一个记录集的编号是0>
1 O% q" x3 O0 _' T% @  o; |, |: A$ t  select * from students order by id limit 9,10;: j( P) k) s! k9 T
  * \5 v% U2 D3 ^
  13、MySQL不支持的功能$ ]% H0 ~2 s) ~* K% _
  事务,视图,外键和引用完整性,存储过程和触发器
( Q2 H7 V9 x* U  
* {, X! L0 L: }$ O1 D( R  
% g" ]$ ?0 w3 G7 L  14、MySQL会使用索引的操作符号0 d  T: m! j! p% Z
  <,<=,>=,>,=,between,in,不带%或者_开头的like* f8 _( _5 ?- \' j# m+ @# }1 s: {
  
! u/ O4 p0 l# g; c/ I* ?- p  15、使用索引的缺点
! ]' E6 Z4 j: r: Z, |4 ^( o. ?- u  1)减慢增删改数据的速度;
5 f1 u8 c* W. z6 W- V. W9 c  2)占用磁盘空间;
0 r! s% w2 x# M1 h  3)增加查询优化器的负担;: d9 z, E' }; E$ Z( X" p: b" L
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
& P9 F1 X( v7 M. z  
; i. d* R* S+ B" ~: b  16、分析索引效率- U5 Q1 V  V( }, O
  方法:在一般的SQL语句前加上explain;
8 {. U9 X! c! x/ d" ~) ]  分析结果的含义:# Z0 X0 L" m. D% M' @2 ^$ s, i
  1)table:表名;
4 I0 H/ L6 i" u/ c; C  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
& U6 B+ u) _, l9 m  3)possible_keys:查询可以利用的索引名;' b3 ?7 U( o* k( f
  4)key:实际使用的索引;. ?0 m. w5 _# z% l
  5)key_len:索引中被使用部分的长度(字节);
/ T0 g3 T: P; v+ M; M  6)ref:显示列名字或者"const"(不明白什么意思);7 R( s3 e' i2 Z+ a. _+ Q7 s
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;+ C: B% R0 |7 n  }
  8)extra:MySQL的建议;1 K: V; h% X4 H  D0 u% i1 `8 ~
  
6 Q# g  T) B+ p0 O8 P: D. I  17、使用较短的定长列
% f% Z# o& w# v2 O% |  1)尽可能使用较短的数据类型;
) m) B5 o5 b9 ^  D8 T* b  2)尽可能使用定长数据类型;; K# }8 v# O! x. Q" v# B" I1 c. q; L
  a)用char代替varchar,固定长度的数据处理比变长的快些;6 ^& j2 ^' [# {& h2 b
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;5 w' o( {: D& v4 k# n8 L, E: I4 c; y
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;5 i- t/ B! V: n6 e
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
, e* {6 K! W; c/ J  c  
6 }" t0 L- o4 l4 C- H  18、使用not null和enum
% u; Q+ ^) A3 `& s  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;8 h3 t" _' M7 K8 T/ F. O
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
: D4 Q( p7 x1 L( o' W9 i8 \  . w8 J  Y# R3 ]% d4 T
  19、使用optimize table/ d% ^4 q* c6 t1 x) {( Y# \. _1 \
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
3 X$ m# J3 g6 `8 U9 \    K9 z. w& d2 @. c% w
  20、使用procedure analyse()
$ A. t6 `( L1 y" K% q8 Q; s- v  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
. n, r2 I- o% H/ p) C+ R7 b+ N1 l9 K  select * from students procedure analyse();' C* E; c% w3 E
  select * from students procedure analyse(16,256);
& w, _0 c8 \& a  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
0 J  I% Q: w3 d2 v' G/ Y  ( Z2 ?% H1 I  k# B
  21、使用查询缓存. _: t& c+ m4 n4 `
  1)查询缓存的工作方式:
8 B7 @( Q- M# w" E- m) B  v  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。: {# J2 |" j5 U6 i5 F5 ]5 Y4 ~
  2)配置缓存参数:
& ~3 e' f* e9 P% ^( r- w3 G4 p  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。5 {. ?. o3 G: T2 E! E4 k
  
6 u8 p* f* P7 Y, h% l- k  22、调整硬件, ]6 l) a" b  I4 L4 _* E6 R
  1)在机器上装更多的内存;# W* e% Q' A) B, i' m
  2)增加更快的硬盘以减少I/O等待时间;
0 i- e9 P5 ]. B3 k  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
$ Z0 o& W" ^  k5 g! i4 s/ p  3)在不同的物理硬盘设备上重新分配磁盘活动;
# u. B* W$ A: s% G$ m5 k  F  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。7 L# F# [' i- ~1 Z- @7 ?3 R, L( W) V2 c1 |





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