中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;% Z. _- d* G* z% @) u9 O
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
- f& k9 @  z* J3 l  列出数据库:show databases;" i! W# q4 [' r- X
  选择数据库:use databaseName;
% \: {0 n) M) a# d6 ?) H  列出表格:show tables;
( ]% W% w% \6 d% v4 f+ n3 p  显示表格列的属性:show columns from tableName;! Y& u& m! C9 G% v
  建立数据库:source fileName.txt;5 z* W5 V6 u" L: x* B
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
1 K5 T2 Q( b" v9 y. ^  增加一个字段:alter table tabelName add column fieldName dateType;) }: H( X" l  p6 h! B
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;+ i" @, U3 D  S9 s& F4 _% p0 k
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
# l2 U- ^( W- u( E" J6 N  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
! h7 x! @, p; S$ L) h  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;5 A# }6 N# E( N5 [" S$ t0 m
  查询时间:select now();
/ V) M0 p. g' {8 G5 z5 y1 i  查询当前用户:select user();
0 t! P$ y7 B2 x& e3 q0 X9 P  查询数据库版本:select version();
  E+ C1 u. P4 o4 c- M" @4 U  查询当前使用的数据库:select database();1 t( E2 |) ]3 E: d+ ~, t" y
  / B3 v: K7 c$ a0 J' s1 O
  1、删除student_course数据库中的students数据表:: L# u8 z0 J9 u1 V& L2 s
  rm -f student_course/students.*
/ b6 f) z/ M! _, J  8 P6 M: p' `; I* H# Y% |9 Z6 h
  2、备份数据库:(将数据库test备份)
8 l! t/ A, _6 l8 N* U  mysqldump -u root -p test>c:\test.txt
" K$ i: T  ~) R3 N  备份表格:(备份test数据库下的mytable表格)$ i) B7 s, h1 P9 H3 g! P
  mysqldump -u root -p test mytable>c:\test.txt$ B9 V3 r% E, F6 M5 T
  将备份数据导入到数据库:(导回test数据库)/ w& v* \3 M3 l9 Z! D
  mysql -u root -p test<c:\test.txt
- o; l) |6 S* Z! {' K# g% C. Y  4 }; G2 O4 h  @& i% W" G
  3、创建临时表:(建立临时表zengchao)
9 j( E% `# J. K7 s" _/ ?- p+ n  create temporary table zengchao(name varchar(10));
% ^( j. B: r" ]5 b  & e5 Z* m& G1 w# `
  4、创建表是先判断表是否存在
2 ^, W$ ^9 ~1 j4 t3 f  create table if not exists students(……);5 t- ]8 a5 W, @. Q, j3 y$ c
  
: p) P8 i  W/ ?  5、从已经有的表中复制表的结构5 _, w2 L3 {; o; g2 a) G
  create table table2 select * from table1 where 1<>1;6 s* J. G- f$ o, H) }9 y& P
  
  t0 d0 Q: {5 x2 o! p1 l! \6 H  6、复制表3 t; m9 `: O. c4 ]
  create table table2 select * from table1;
# b6 z2 j6 @1 G7 H  " x3 Z& V( c1 h- h" F" u5 ]
  7、对表重新命名1 U8 p# u3 K1 M: y: e, E
  alter table table1 rename as table2;* _/ s6 z9 @9 P: e" F* w9 t( @
  
6 w7 z- o4 |$ S+ b: ?% S  8、修改列的类型; Y1 L; X7 B& S, n% D+ g
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
9 g. ~1 N+ Y# r4 X  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
4 @0 O2 [+ T4 t4 ?$ I" `  ; O% V, A. }! ^8 c& _* _
  9、创建索引4 r" d/ F  `% |- R- s7 v
  alter table table1 add index ind_id (id);
# w& Q9 x: G! H1 n) Z9 `" K  create index ind_id on table1 (id);
, C5 J- f8 k. K8 z  create unique index ind_id on table1 (id);//建立唯一性索引
" s3 m% N  q! r$ z* Z  5 m$ _* W8 U# M1 o
  10、删除索引4 C. B9 z- h0 P5 E! D$ _
  drop index idx_id on table1;
8 {* K9 u4 ~, l- k0 v  alter table table1 drop index ind_id;) A" s3 h0 Q/ I1 e
  
& y$ d" q, [/ |  11、联合字符或者多个列(将列id与":"和列name和"="连接)6 X/ U  \0 O. e' f
  select concat(id,':',name,'=') from students;  H" S$ _/ y- m3 u, n$ n; W
  * g9 B5 W1 X) R3 ]4 p; J+ p
  12、limit(选出10到20条)<第一个记录集的编号是0>
. j# B7 @( Q; O* N  select * from students order by id limit 9,10;
8 Y" P4 N4 o2 a% Y7 i  
4 ~+ _# S( P) ^4 b5 E  13、MySQL不支持的功能! A' F5 K9 a7 Y+ l9 P' U2 V# o
  事务,视图,外键和引用完整性,存储过程和触发器8 l2 I4 ?5 N7 S$ b
  
8 f7 s4 r! K% r0 @8 B  , C$ t9 @" @" h+ s! \
  14、MySQL会使用索引的操作符号7 l- Y1 |. h0 f# p
  <,<=,>=,>,=,between,in,不带%或者_开头的like, X3 g; G6 N9 ]2 e
  
; |1 }" n2 i* K. n& E9 J- {  15、使用索引的缺点
2 T3 E4 B2 y3 s# o& ]  {+ @7 |' n  1)减慢增删改数据的速度;
" ]; R  h  ?- r/ n1 F) k  2)占用磁盘空间;
; o/ M  f% ?+ b4 k  3)增加查询优化器的负担;
1 e2 d3 a; e( A1 K* Z( N  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;, I% Z0 D4 Y! }* Q( y2 v0 z
  
* {5 s3 L9 A1 Z" X1 X4 `& O* X  16、分析索引效率
5 c# m  c- L2 J# }3 g5 J  方法:在一般的SQL语句前加上explain;2 f- s# Z4 a5 k) t& P5 e+ n$ F0 a
  分析结果的含义:
2 K# N" _8 I5 p/ e; ]  1)table:表名;0 J( V) [7 I' f6 u+ @2 K4 e
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;# ?) X+ y6 G% Z
  3)possible_keys:查询可以利用的索引名;' K; J! V: \6 |' g7 [" V. B$ d
  4)key:实际使用的索引;
# e; l" }: p3 n  5)key_len:索引中被使用部分的长度(字节);
& J" `7 L4 w, k7 ?9 A8 ~  6)ref:显示列名字或者"const"(不明白什么意思);- ?, ~% J, W) u
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
2 I- G9 T( d3 i$ o* |& o$ F  8)extra:MySQL的建议;* W) u( t  `$ k, e# Y3 D" [: L
  
% J" N. p. ^5 p$ x# A% ?  17、使用较短的定长列
2 B$ n$ \1 x; ?" @, j& f  1)尽可能使用较短的数据类型;  Q' B: R; j. D2 M- E
  2)尽可能使用定长数据类型;% R# H. ]/ D, n  i
  a)用char代替varchar,固定长度的数据处理比变长的快些;
. _" J5 C: E  V2 f6 L  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;7 P3 C5 Y5 D8 M1 L( H; o# y! t
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
. c5 F! y$ o' w: b. Z& a  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
: a6 }- U) H8 Q0 Q. C, g3 @  
8 ?  a& ^3 E; L# _; E0 N% k" u" C% z  18、使用not null和enum" i- s/ C7 O# s. X
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;/ O: j; e% X- x) Y' k3 R. e2 F
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
6 [" ?2 [# D: X/ Y* ]0 \) S; R  
- T( G# S; m) @. a" F4 M  19、使用optimize table! t. z" _; L" C; Y9 k) Y7 |+ c) z
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
( H$ I: n" ?. A) N& s  
% v8 k9 n# c. s4 C  20、使用procedure analyse()9 N- _. L) u' F  x+ J1 M2 i# w
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
$ v$ L% B% S+ |  select * from students procedure analyse();- y( G& f5 p, `- \8 S
  select * from students procedure analyse(16,256);; k# t! j& }- i2 R
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;% u5 L8 w% V+ n- S
  
; `# W! j. ~9 H2 b, ^4 a  21、使用查询缓存
7 ^$ l) l4 J9 k2 d! |  1)查询缓存的工作方式:
- c5 w+ a9 A2 m" h6 q0 g8 ]% r: H" ?  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。" [6 h9 {' U3 i7 L
  2)配置缓存参数:
& R* I$ \, p0 Z9 W1 N  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
. E1 D: q1 b3 C' ^5 h  - F; _: v1 I' v
  22、调整硬件
, J( g5 H/ S$ [' q0 {: z& Q  1)在机器上装更多的内存;
+ `0 Z. O* i" |$ T$ h* J  2)增加更快的硬盘以减少I/O等待时间;) ?! m6 B; z- Y3 q  j
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;3 G5 J$ J1 _# P! V- e
  3)在不同的物理硬盘设备上重新分配磁盘活动;
% c4 O6 [% z- z, A# G  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
1 ~; j) w4 j3 j/ D4 I8 p




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