中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;" ~' }7 V& [3 w+ W( N( {: |9 t
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;, x7 Q) q! v" i* Z3 r- V1 q+ ?6 _
  列出数据库:show databases;
& K5 B3 B, r( M  X2 [& B  选择数据库:use databaseName;
) ?: Q% C. M! W  Y  列出表格:show tables;) A$ x3 w4 B# \
  显示表格列的属性:show columns from tableName;
/ A; b+ a0 W" S% A  建立数据库:source fileName.txt;, @2 S* M7 k  j7 f( f5 r, c
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;8 p/ n, w. s5 j8 x. B9 T/ @7 y$ ^
  增加一个字段:alter table tabelName add column fieldName dateType;) j* A5 U! b7 T- o. T- q
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;& l( i: H" b4 J4 I5 r
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;3 e$ a5 u) h$ n- S  Y# f
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";. i0 h) [' v3 |9 _1 M
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;% g2 W, r" I7 M6 c2 G4 o) i: |
  查询时间:select now();
/ ]; H( f1 |4 g( l  查询当前用户:select user();/ N, z7 J; X$ f4 Y
  查询数据库版本:select version();
' `, }# i9 P# o* p% T1 L  查询当前使用的数据库:select database();
9 ?" k) D$ N4 {9 y' y' F  # U/ `# A7 v6 p$ f
  1、删除student_course数据库中的students数据表:
. b3 |6 n5 K; x) x( l+ B7 z( k; e+ o  rm -f student_course/students.*
. x' |0 r$ ?: L, V: h9 a+ M  2 n9 \6 P" s  B8 z$ @, r
  2、备份数据库:(将数据库test备份)
) A$ V" h; E1 n! x* s1 z  mysqldump -u root -p test>c:\test.txt
% \& d+ M' `1 A: X) ?, v/ O1 o$ ?/ H/ ^  备份表格:(备份test数据库下的mytable表格)6 f4 n* A/ @3 v/ |
  mysqldump -u root -p test mytable>c:\test.txt' f9 C4 t( o, o$ T0 v( x4 a
  将备份数据导入到数据库:(导回test数据库)
/ U5 M! W* l: s7 x* G: y) _  mysql -u root -p test<c:\test.txt% l  |4 d$ M& u4 N
  : o9 U) z2 T& I
  3、创建临时表:(建立临时表zengchao)0 e4 c4 ^5 l: k3 m
  create temporary table zengchao(name varchar(10));
" c7 I, d' j. J8 W1 Q! G  , }4 g, p! {/ b0 y0 g- V: _' H
  4、创建表是先判断表是否存在
; S9 t* B7 I) \6 u- J3 T  create table if not exists students(……);" f4 n- K3 ~: A* v1 d
  . o/ H4 F' x6 P) }9 Z
  5、从已经有的表中复制表的结构% N6 N% ]1 l: V, U8 Y
  create table table2 select * from table1 where 1<>1;
2 y2 I& x% g% x  U: j: f  H% Q  
7 D, R5 ~) n1 a2 o  6、复制表" h( b  {* n7 ]) P7 ]' r" {
  create table table2 select * from table1;8 \  z2 Y$ p8 f  p, Y
  
& f- ^3 h' e- K7 C& ~! N  7、对表重新命名
, j$ S# V' N* w  alter table table1 rename as table2;
! H8 S  T5 l9 P, M( j  6 b8 G3 b% y) A" h* k; N
  8、修改列的类型8 t$ t4 y9 H- r7 W# {. ?2 R% ^
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned# I7 E, q- h) ^0 z" J6 [
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned# w) Z/ `  \, \; A! g, K2 d
    I& L* V. b' D' B
  9、创建索引+ k) p+ O& g% K
  alter table table1 add index ind_id (id);/ Q# E# w4 M, _6 f1 B  m' @; L
  create index ind_id on table1 (id);6 ^& C0 D! Y, I: e( J% M' q
  create unique index ind_id on table1 (id);//建立唯一性索引
( ^! c! i2 H/ v6 q' A  ; D, Y6 }+ P/ l, T
  10、删除索引
0 t4 X; r; F2 _4 K  drop index idx_id on table1;) \! ^- b$ a/ z# f  u( h! f/ P
  alter table table1 drop index ind_id;
% B/ b5 M8 J$ k2 k& c6 e  
7 N4 P4 z3 w3 M1 o3 n  11、联合字符或者多个列(将列id与":"和列name和"="连接)9 X5 j. T( D; ^/ ?
  select concat(id,':',name,'=') from students;
# t4 Q  f/ ~& N; G  w0 `9 P  5 j" ?' p5 |- `" z' g; r# N
  12、limit(选出10到20条)<第一个记录集的编号是0>
5 @% h% m/ Z  E7 n8 v  select * from students order by id limit 9,10;* Z) X: C' B" I1 y
  
( L0 p8 i; q4 w  Y: O  13、MySQL不支持的功能3 ?, M$ ]) w# r$ p2 i  w1 T/ h) b
  事务,视图,外键和引用完整性,存储过程和触发器% o" ]8 o: L% K$ k3 u
  ; y1 K$ ^. P0 z) H$ P
  
1 X* o& Z4 \8 t  14、MySQL会使用索引的操作符号+ s$ g! {' F( b7 q
  <,<=,>=,>,=,between,in,不带%或者_开头的like' c* J7 m6 ?6 o( O
  , H- p# J8 C4 P9 ]4 u
  15、使用索引的缺点9 N- d% @( z/ F; |+ V  h4 L
  1)减慢增删改数据的速度;
1 C, |5 V  {# O0 C  @  2)占用磁盘空间;
7 @1 r1 n; e. j7 M8 ?- B% L& p  3)增加查询优化器的负担;
8 k5 I% f! y/ @: m# _8 E& ]7 E! x  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;3 Z* g+ v2 v4 f" i( v( j" S
  8 R9 `$ H" f/ {3 N
  16、分析索引效率
1 ]7 {4 v/ y2 r0 O0 L# A  方法:在一般的SQL语句前加上explain;: {# d8 J6 t3 L- [! t: I9 a$ }
  分析结果的含义:5 B# U% k) V, E  L
  1)table:表名;
# t0 G/ y" q5 s4 u* {- A$ d  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
# O  r; ]9 l7 F  3)possible_keys:查询可以利用的索引名;+ S" w/ V& V3 `) k: n4 r
  4)key:实际使用的索引;9 e9 Q% {  j! k$ |# G
  5)key_len:索引中被使用部分的长度(字节);
. O3 {: P7 m0 v9 n' f  6)ref:显示列名字或者"const"(不明白什么意思);9 m( s+ v7 F9 a# Y
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
9 [/ l1 W/ X, O4 j1 c7 x, M  8)extra:MySQL的建议;# K; O4 `( Z. H$ ?+ z1 R0 V! ]9 q
  / d! ~$ n/ v' l) [5 a
  17、使用较短的定长列% X! H7 {' \' }) b& b
  1)尽可能使用较短的数据类型;
3 f1 ]8 c8 T" n3 E8 a6 D  2)尽可能使用定长数据类型;
" C7 i. u, E/ }3 F1 J; H  a)用char代替varchar,固定长度的数据处理比变长的快些;. g9 M/ ]" b  U7 u' e: D, ~1 X
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
$ j& Y" f; j9 Y: _* l3 n* a! j  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;; t4 e) t/ P2 ]2 H( v) P( D/ O
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
- {8 m. l# J$ B. x7 s, p! a6 u( B; S1 J  7 l: W4 B! z$ q! `
  18、使用not null和enum
6 ], U$ t! g: l6 u" S( O& _  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
/ n3 d1 X3 b$ k9 x2 \. G  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;* P3 @/ g8 V2 D
  " t5 @2 R/ @% t
  19、使用optimize table, |% J" q/ Y6 T4 v+ ~
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
' w1 V# y* [0 m9 u  - }- z; B8 ?$ h, C$ Q3 d2 j, b
  20、使用procedure analyse()% i% V, w, t8 R* e2 a7 d1 }
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
6 h6 j2 J8 w! D: ?( F  select * from students procedure analyse();. m. x0 I. q7 G: E1 \$ T
  select * from students procedure analyse(16,256);
( [- o3 V- B, v4 y. A  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
6 g7 n& b4 r& b( Z8 |7 ^  U  2 F; H1 v3 z* w2 f; s
  21、使用查询缓存) E8 W' K$ n6 C( I
  1)查询缓存的工作方式:, o* |7 D0 n4 w
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。0 D( G7 S, w5 K
  2)配置缓存参数:
; J; c2 Y; S$ Y( f& x6 j  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
0 ?- @) O- y  a% O9 {  |  * E7 H$ F6 m' Z6 [
  22、调整硬件
  G, E2 b" ]2 Z' h! w. A3 z  1)在机器上装更多的内存;0 ]. n1 m: S" e4 S/ X
  2)增加更快的硬盘以减少I/O等待时间;9 S3 Y% k7 p0 O) i" G
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;3 B( G# o+ U. }: u& ~5 k
  3)在不同的物理硬盘设备上重新分配磁盘活动;
" v- G: I; \, ]. [* n; P) R  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
. a7 k! }$ ~3 c




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