中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;
" [% h: l4 Q# x+ C+ Y/ G3 W  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;' P& T4 O) p3 z8 R4 j0 h% H
  列出数据库:show databases;8 G* C* T0 I" O: }- _7 v* `
  选择数据库:use databaseName;
( J5 r4 p/ n% I) D0 O" U  列出表格:show tables;& V: p/ O. C7 T& \7 N
  显示表格列的属性:show columns from tableName;
" W% b* E  j6 L2 v- s& M& Q  建立数据库:source fileName.txt;9 s. W# `$ W& [! ]0 d5 _  r
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;% R( m0 l% w9 f0 k# F
  增加一个字段:alter table tabelName add column fieldName dateType;
/ K4 T( v- |' X& U  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;& m7 e5 B! n$ k; Q1 F/ _/ ?
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;0 W. g: Z. N3 G6 u
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
. Z! _, i) ?0 I4 K: w$ ?8 ^( o5 x# {8 y  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
0 O. L) _% }: [% P& b5 m  查询时间:select now();
5 a( Q  s4 S  H3 J+ g& G, c  查询当前用户:select user();
( b; G% }/ L8 h' T9 B" r5 b+ h1 B  查询数据库版本:select version();$ R. \% A8 |6 `2 W8 ]4 n2 V
  查询当前使用的数据库:select database();$ k' s( f& ~5 C( u% }4 H
  1 O' m$ x: [$ L! _0 r; n
  1、删除student_course数据库中的students数据表:
4 ]* s  r0 E4 o& X: E2 u  n  rm -f student_course/students.*
+ K* z+ k. z* y6 U  
8 Z" Z0 ]) `  \- E8 {! o  2、备份数据库:(将数据库test备份)
% }3 i1 ~2 m8 I2 c* j  mysqldump -u root -p test>c:\test.txt4 W! b; g6 [& c  i, N) J
  备份表格:(备份test数据库下的mytable表格)/ r. L) }+ u4 O: K3 W3 C1 Y
  mysqldump -u root -p test mytable>c:\test.txt
3 I- Z* s0 }! o  将备份数据导入到数据库:(导回test数据库)# G% E# s- r2 A& ]
  mysql -u root -p test<c:\test.txt: x/ I; _& j) ^( J. H$ b
  
# e6 r4 H7 d& x0 y  3、创建临时表:(建立临时表zengchao)* V  o; [+ v; s8 K" F% r3 B  ~
  create temporary table zengchao(name varchar(10));/ b6 M. \8 U, a* e0 n
  ( B. A& }& v! ~/ S
  4、创建表是先判断表是否存在
4 N- J! L. Q- P5 K/ p- c  create table if not exists students(……);- P# r+ `& ^  I! Q& }8 U
  / d. D0 b5 E3 l6 w& w, G3 D
  5、从已经有的表中复制表的结构/ v' \; h; ^: w
  create table table2 select * from table1 where 1<>1;  f% f- z; O3 P
  
6 G& j. M  j. K1 G  6、复制表1 _/ Y( S0 z$ R% t2 K
  create table table2 select * from table1;+ f" M0 t. J6 G4 t+ E
  
& r' b% f+ P1 k* E0 A$ m  7、对表重新命名
6 x' c) F/ A9 _) l- S1 g- l  alter table table1 rename as table2;- h) H: D! Q- R; f5 E* P2 {
  " n+ b/ z6 U8 t9 h
  8、修改列的类型+ S4 F% q! m5 w% T7 j
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned( R% Y, ?0 p$ F
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
+ H) L% G' S# [) n& Z" J% ~  T  % s2 K3 P6 N$ f  Y- B. {6 @
  9、创建索引" R- }6 s* c; x  x' W* v$ @* f
  alter table table1 add index ind_id (id);9 S! S  R6 p  {' i. U) B
  create index ind_id on table1 (id);
7 Z7 ~1 ?2 s- ?% ]1 J$ G( p  c  create unique index ind_id on table1 (id);//建立唯一性索引
" S' g8 H, J1 g+ a  Y  
# \7 s9 A/ ~# W& L  10、删除索引
. p7 E( E, M$ f3 h' O4 E  drop index idx_id on table1;% i& l* y5 x3 b' q/ Y8 [
  alter table table1 drop index ind_id;+ c. `( d2 F( B3 o+ B" Z7 i& d
  
1 `. W% k( D/ F; }  J  11、联合字符或者多个列(将列id与":"和列name和"="连接)
& P$ z6 o& p6 V7 c8 b/ J6 o2 o  select concat(id,':',name,'=') from students;$ p0 x& O& q( O! S
  0 f, m& Y! Z1 x
  12、limit(选出10到20条)<第一个记录集的编号是0>
9 V, ?, s( n% s" G6 ^  select * from students order by id limit 9,10;# j2 t0 R/ {8 m8 U: u( u3 I
  $ a  q4 n9 _; e
  13、MySQL不支持的功能
1 _; F* \0 [% [0 |2 R& w  事务,视图,外键和引用完整性,存储过程和触发器
7 _3 s! }, v& G4 t  
; Q* D$ _+ y; P4 L; u  
8 a6 r  y; M% d- R+ w& p' U9 u2 v  14、MySQL会使用索引的操作符号
& F% r/ o+ T" M  <,<=,>=,>,=,between,in,不带%或者_开头的like# V5 Z4 u& P5 e8 h
  $ z5 l1 `& q2 c# g9 f
  15、使用索引的缺点
* }3 E9 L; P6 }- Y' W  1)减慢增删改数据的速度;
3 _) x8 J0 `' ^# o3 l! `  2)占用磁盘空间;
& S- f8 ?' @9 F5 [6 V0 P1 s  3)增加查询优化器的负担;
, ~" Q1 A0 ?, s+ l  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
- S9 o/ o  H; S  
/ J; B# P* j. K9 r( [  16、分析索引效率
* |! C3 g9 G1 A% X+ E" M) F  方法:在一般的SQL语句前加上explain;& B" p' b+ z" \' M
  分析结果的含义:2 m6 a" ~1 o/ n1 a' R2 t' L
  1)table:表名;
) U) r4 S  q, [) k; s  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
9 Z4 X" G5 _6 u) c8 b  3)possible_keys:查询可以利用的索引名;
/ }- \; a" z2 B9 i8 b  4)key:实际使用的索引;# v4 G2 N, |  \  g) T1 v
  5)key_len:索引中被使用部分的长度(字节);; K% v+ [( {( S% t( h: Z4 V
  6)ref:显示列名字或者"const"(不明白什么意思);
+ Q% e- K, _& F+ ~  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
7 L  Y& I0 l& G; ^& S  8)extra:MySQL的建议;( w( r3 R2 K7 _7 Z
  
5 x! L- o" P* R  17、使用较短的定长列
% R2 A$ j3 N" i; W8 W0 N$ o  1)尽可能使用较短的数据类型;
* z# `2 ]; N! b. m0 E  2)尽可能使用定长数据类型;2 \2 L( D! f8 L5 S
  a)用char代替varchar,固定长度的数据处理比变长的快些;3 Q+ M0 |) {( D" ?  j' s" e- A
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;6 }% e* j7 f" G6 N- k
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;1 \- _+ b: Z" ?& Z3 R1 a+ b3 j
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;* g- F1 T) \% ~: j) K4 n, [- M' B- x
  ) [( ^8 q, C; N$ K" T! j/ w
  18、使用not null和enum
8 I* k8 S& e' C% r2 T0 V  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;1 W, W8 I  r+ B- T; W; C5 t
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
) W7 f1 J: Y9 r  3 J6 Z* F2 e) b3 u% }  {6 U% h
  19、使用optimize table$ W) _. ?3 L, q# @% z0 i
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
( }- z6 ?$ @# k5 [# N" M: s' e  " Z5 q- N" ?8 J2 g/ \
  20、使用procedure analyse()" i3 K  h2 a3 W8 x8 h: C  M
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
$ V. q, T7 O% d1 B  select * from students procedure analyse();1 o! t5 `2 N+ w3 R  g
  select * from students procedure analyse(16,256);) s. M( x5 h; M5 \
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
' k& d) T4 T* H/ O( U  5 l) t% R5 H1 U; T- Q4 j
  21、使用查询缓存& ]; x) A5 h6 V% t# [8 V
  1)查询缓存的工作方式:( R$ U* A$ U2 p
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。; [) }. c0 G2 Z$ {2 p7 ]5 f3 A
  2)配置缓存参数:
6 r7 }! ~7 w: b: v, n% {  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。' {5 U5 ]6 f5 S" S9 ?2 K
  
: ^- i) n* X" X* v$ G$ w  22、调整硬件
$ Q+ V. i" U( B! x# L  1)在机器上装更多的内存;9 n" z2 j( w( c% W2 v
  2)增加更快的硬盘以减少I/O等待时间;  c5 Y8 r$ D. i6 c) r
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
- `: p' z/ E1 L! l" w  3)在不同的物理硬盘设备上重新分配磁盘活动;
# I8 p4 U# j4 G, b. c- V% S  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。5 Z; x) s0 w% q1 n





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