中国网络渗透测试联盟
标题:
mysql常用命令
[打印本页]
作者:
admin
时间:
2012-9-13 16:32
标题:
mysql常用命令
启动:net start mySql;
! S8 F: Q5 E$ P/ G* i9 b6 I! ~1 R
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
- B8 g9 y0 k& G0 X) R' N
列出数据库:show databases;
! g- Z4 o) j. a1 R; `! {; `1 @" n
选择数据库:use databaseName;
! `1 Q7 _2 Z4 e4 a0 Y
列出表格:show tables;
; `/ Z6 R2 m/ A. u! P
显示表格列的属性:show columns from tableName;
* I" G" K$ U; q% v) L: q
建立数据库:source fileName.txt;
+ a) y l) M- F0 ]
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
1 N- p6 ~2 r) C4 ]) D$ J
增加一个字段:alter table tabelName add column fieldName dateType;
5 Y, @, H- ]2 v( [; A, O7 D4 @9 \
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
$ |; ^ G5 Y( b- d
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
2 B$ ?: o$ b7 R% y5 E
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
# f! l' \, l( l8 p! T
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
! j5 p- C' C; J# n4 t; v, C' T
查询时间:select now();
$ t {6 a7 b5 J# T" g
查询当前用户:select user();
u7 \! v3 h/ Z9 k2 u S4 x
查询数据库版本:select version();
2 o) k* p4 a$ P. v: B
查询当前使用的数据库:select database();
8 b6 y4 j# x" y1 [! s
% \; p& O) }0 V) z$ n7 |6 X
1、删除student_course数据库中的students数据表:
6 l6 g9 d" ^: L T; z
rm -f student_course/students.*
R. W" v, O/ ?! b
! m7 ]$ @: @; L/ q$ x* P
2、备份数据库:(将数据库test备份)
2 M, d i: X" ^( W3 H' j" E
mysqldump -u root -p test>c:\test.txt
+ o& e- V4 c; g& ~* ^+ g- {
备份表格:(备份test数据库下的mytable表格)
) V1 H- \" G% g3 n2 x8 N
mysqldump -u root -p test mytable>c:\test.txt
! ~7 U, G! E+ b @ Q7 ]2 B. L
将备份数据导入到数据库:(导回test数据库)
$ b( q9 D1 D% ]+ r- ]5 P
mysql -u root -p test<c:\test.txt
2 `; F+ v# [6 `/ G; j
2 t7 j$ y" ] Q, K$ |) C+ o u
3、创建临时表:(建立临时表zengchao)
2 E$ ` m& Z* f7 L" m" Q
create temporary table zengchao(name varchar(10));
7 v" T5 n* B7 U% S6 ^, ]
7 l1 h4 O' n8 T' ?
4、创建表是先判断表是否存在
" b/ f! e9 w- D7 T
create table if not exists students(……);
; P) |* ~- Z8 Q$ ~# Y* N
6 C" A i+ c U1 `2 f) i& B9 q2 \
5、从已经有的表中复制表的结构
) R0 R6 f# d: B8 Y3 b
create table table2 select * from table1 where 1<>1;
7 H) H, F, z# x; R4 \3 F
a5 \8 t. ~% R+ Y1 w1 k
6、复制表
$ m) J/ A; w/ Y4 C6 m l8 u4 B- C
create table table2 select * from table1;
' ~, |/ `% t4 z
. U' a9 D3 X% Y. E
7、对表重新命名
% C1 R$ [4 T7 ^. m5 F: W
alter table table1 rename as table2;
, K9 c, c, |. w0 J& ]
8 Q: a" u" ~! V8 \7 Y% L; ~/ S4 \
8、修改列的类型
1 T) |% ~- M' ]# J
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
: V7 o6 j: C1 G% U2 ?/ }
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
7 H! n* c4 a# q: s. @5 c% \
% Y! n1 U$ {0 }
9、创建索引
3 Y3 a7 W) G, X4 j' Q# w+ ^6 U
alter table table1 add index ind_id (id);
) P- E' U- r# o( q8 m% n
create index ind_id on table1 (id);
7 }7 y, w3 ^! j+ ^
create unique index ind_id on table1 (id);//建立唯一性索引
) N* @- `9 R1 H: l
- {, E8 E8 l* M
10、删除索引
1 b7 T" S: e8 r% w& k8 F
drop index idx_id on table1;
; ?2 [' o$ T8 u* Y2 t% J7 l$ u
alter table table1 drop index ind_id;
$ v( {9 S/ B x; F, e- n! E+ Z! @
7 @& Z! k2 L1 Z) {" K
11、联合字符或者多个列(将列id与":"和列name和"="连接)
" Y( G( I/ l6 O: F2 w S1 |( p
select concat(id,':',name,'=') from students;
% v6 u( _: u7 O$ W: G/ C
- e6 \# a1 a* S Q6 W9 B3 n
12、limit(选出10到20条)<第一个记录集的编号是0>
& {- v/ d; u) |, J, j) x D
select * from students order by id limit 9,10;
, Q' n# f6 s% m. [8 r; E
, \3 _ ~. b. u6 q
13、MySQL不支持的功能
+ C# t3 Z1 r) w
事务,视图,外键和引用完整性,存储过程和触发器
/ Y7 @' n, [( p w* k8 Z/ g8 A5 ?* s
0 D$ {6 q9 g4 |7 n: E
; g+ Z) I0 {2 U% A8 G4 W
14、MySQL会使用索引的操作符号
) M+ ^6 x* s8 J
<,<=,>=,>,=,between,in,不带%或者_开头的like
0 d! L9 A W G* A. N* {! W
6 X. M1 r% x1 _* ~
15、使用索引的缺点
& ^: a& b0 \0 v9 o9 [/ H0 w1 ], O
1)减慢增删改数据的速度;
9 H; K8 `) A" Q
2)占用磁盘空间;
2 ?" I- |/ p8 ]; U
3)增加查询优化器的负担;
* N C ?) C( I4 q* L. ]- @
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
- C$ f9 H! T/ H) z( `/ q
@- Q% I4 F& F& j; k7 F" E9 A
16、分析索引效率
$ `; M( n& f5 m5 S' r
方法:在一般的SQL语句前加上explain;
( y" V/ L" f; g$ |+ y
分析结果的含义:
- |) ^* d; h" G' R8 r8 }
1)table:表名;
0 H0 O9 u7 o# k( I6 I8 b7 d
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
; E. y, v/ p8 H' i# J$ }
3)possible_keys:查询可以利用的索引名;
4 w" M4 `% n& j0 Q. J1 [( L( ^
4)key:实际使用的索引;
( ^& } @3 ^' l h3 D4 O1 R
5)key_len:索引中被使用部分的长度(字节);
4 w. O$ R/ ]2 x4 s# O
6)ref:显示列名字或者"const"(不明白什么意思);
) `! I# }+ X& F2 b% B/ _
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
a* T1 Y3 e4 O/ ]: F+ C4 _
8)extra:MySQL的建议;
$ x9 h" _1 O. j7 u9 K/ A: b. p
: j/ D, L u7 D
17、使用较短的定长列
! [6 h, d/ f% u8 S) c% ~. K- w4 D
1)尽可能使用较短的数据类型;
3 f1 w( s4 ^: I* }4 l0 }) H
2)尽可能使用定长数据类型;
) I! `9 K3 ~, p+ V6 g
a)用char代替varchar,固定长度的数据处理比变长的快些;
3 ?5 o' r0 E' b7 j4 C
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
. R/ N& q6 w# _4 D2 n- p# h
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
' k! t6 q( v; _7 Z" _3 h
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
7 M6 I) h, f# O% x' U- c/ q; V
7 l# | b) `* |3 d- k+ k. X
18、使用not null和enum
_2 c: Z! r* ?" N: [: |
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
8 h2 o T. [5 K, Y- A" H
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
" X P+ S) _ b( m& P5 }
* S9 P7 {# M! Q8 A/ T6 i
19、使用optimize table
. [) e: r4 _; S% Q3 v3 B8 _
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
5 B2 N/ r( _+ `! w
- J9 U- C. v7 G" I3 [! ^
20、使用procedure analyse()
+ R1 {1 y0 ]% A7 c
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
. Y4 }7 d+ L2 s. }) n4 I, N
select * from students procedure analyse();
( \. c7 I* o8 q- E0 i
select * from students procedure analyse(16,256);
G9 {8 H* B2 H. N; X, Y8 X/ B w7 z
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
( g. ]$ u1 P3 y$ z( h
0 G: R: a& o! n. p. J0 H
21、使用查询缓存
& S2 {( d2 }9 w) C1 B& V& a
1)查询缓存的工作方式:
( N( m5 Q( i1 C/ ~. Y3 R" d
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
_' K: F: [2 r9 _
2)配置缓存参数:
! W1 j% j, S2 I: X
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
1 \& f( t C/ q8 T8 o. o
: W% K9 e. s b- {
22、调整硬件
3 n0 t. j5 L! I; o' n
1)在机器上装更多的内存;
/ s2 {9 U) S% U w, i6 \1 g" F
2)增加更快的硬盘以减少I/O等待时间;
# t# K% u7 i8 `. y( h
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
8 {- T8 a2 L& S' t
3)在不同的物理硬盘设备上重新分配磁盘活动;
. {. i8 @. a; B; ^! Y
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
; m* z+ {; ]& z5 ~* U1 g" Q# D$ o
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2