中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;. J, x: [4 P; V! S
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
. h  X) @: Q& D6 X4 E/ y6 V' C  列出数据库:show databases;
  ?, z) i9 d+ A' m- S8 M* i3 ^  选择数据库:use databaseName;" a3 j4 ?- P' T: C+ A# X
  列出表格:show tables;
" D8 j0 v2 \$ L$ r  显示表格列的属性:show columns from tableName;  _* d. u3 u: J- M* Q; {/ P
  建立数据库:source fileName.txt;' |* C( ?% w# Z4 S1 c% A, `1 k1 l
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
7 s! Z; ?; s& z9 R% b4 m7 O  d* Q+ q  增加一个字段:alter table tabelName add column fieldName dateType;2 @1 F; _( {- L9 @4 P3 o0 V
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
* w' L- \( G9 C! J6 z2 S/ @6 x# K4 t  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;7 i( d6 k1 V2 p) \; l
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
! J: P% V3 ~/ F) q& w2 Z$ Z( J  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;- A2 Y8 q2 D$ Y; D- ?8 h4 N  Z
  查询时间:select now();
2 w" O* l5 }9 p7 {2 L8 L+ q  查询当前用户:select user();* _" J0 C! F5 }! L  N
  查询数据库版本:select version();
- r1 w) n. I1 h+ ?8 L1 Z' T  查询当前使用的数据库:select database();* d, G- W2 z  y3 D, y7 x5 [. s
  8 R) r* [; t5 ^' M- L) W3 ?8 ~3 C
  1、删除student_course数据库中的students数据表:$ R: |& p+ P0 m5 Z
  rm -f student_course/students.*0 q  Y' e/ H9 j( Z0 M# A
  ' _4 h5 W" |; q0 z# N; ?$ F
  2、备份数据库:(将数据库test备份)
+ d! B# w+ w4 [- b  mysqldump -u root -p test>c:\test.txt% u& E! B; A5 x$ c8 O
  备份表格:(备份test数据库下的mytable表格)* P6 N2 [. N: m; _, _/ A- a
  mysqldump -u root -p test mytable>c:\test.txt
5 K$ }* l& B; C) B: v+ p; ^  将备份数据导入到数据库:(导回test数据库)
% A/ ~5 l1 A, O9 y+ o  mysql -u root -p test<c:\test.txt0 X7 e5 E$ m+ O
  
0 K, X4 C2 r0 E2 w" ?; i2 E0 \  3、创建临时表:(建立临时表zengchao)! J$ ^0 |! k4 p4 Y& e+ Y. H  ?! D0 ]2 a
  create temporary table zengchao(name varchar(10));5 T5 I" m) V: q! d6 q9 o
  ; K6 T; P8 X/ T- E
  4、创建表是先判断表是否存在
6 f* n6 R% Q- M- D8 [9 x  create table if not exists students(……);8 }1 l% z' w0 p0 v. e4 U1 V2 y
  0 `0 V. v2 D. `
  5、从已经有的表中复制表的结构- V3 B3 l  G2 {
  create table table2 select * from table1 where 1<>1;+ j: N8 f' G( G- N3 z
  
8 f6 v9 d+ K. D; U! ?$ @  I  6、复制表
; u! H4 ^/ I" ]4 x" X- Y  create table table2 select * from table1;5 }; H% Q8 j2 ]& f+ k/ c
  % F8 ]) n# D2 ?  @% {* S+ G
  7、对表重新命名
- g" W3 Z' q% A" A% a) k  alter table table1 rename as table2;
# `1 W+ L( j. O' u8 Y' f  
( C3 V9 {- J2 b( C8 x6 m  8、修改列的类型+ v9 ~8 \+ p% v7 \
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned# I- @+ t4 z8 `' _5 V) T* l
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned5 J& I! e: m5 A$ J
  
% h; H: S9 r3 Q, m' H2 M  t- K: ~( i  9、创建索引
$ C6 F% m2 s6 p- q# g! Q2 S  A! Z  alter table table1 add index ind_id (id);5 T/ J: n8 s* \5 j7 {
  create index ind_id on table1 (id);( S9 L0 {' W9 g. k
  create unique index ind_id on table1 (id);//建立唯一性索引! P8 h& o$ i, _3 }; @$ b, }
  5 g' z  y. z/ y; @* b( e
  10、删除索引/ \5 R, ?! i' }. S
  drop index idx_id on table1;
3 V1 D8 M1 j6 K; L: W8 U" z* E  alter table table1 drop index ind_id;. C; W% h! r; B+ l, ]4 a. J
  3 ]6 t$ L7 a: i6 i; ]0 Y
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
1 b  v4 P$ G  N1 U3 f1 ^  select concat(id,':',name,'=') from students;
0 t( h& Q& D6 I( [, y$ ^  
4 h/ v, e" D8 Y+ e9 \  12、limit(选出10到20条)<第一个记录集的编号是0>
$ s6 @5 G9 ?) L! T# ]$ S  select * from students order by id limit 9,10;
8 f1 d* L' A( D2 [  
- H; S, L7 S6 E/ m, a# T  13、MySQL不支持的功能- U2 q1 F3 s1 i* O
  事务,视图,外键和引用完整性,存储过程和触发器9 h5 {8 l5 A( X) F8 O
  
7 s! x! V: B' O. m  
0 |! |3 N; C. B- s  14、MySQL会使用索引的操作符号5 D5 D. d/ u# w' L3 l) b8 n
  <,<=,>=,>,=,between,in,不带%或者_开头的like, s/ J" }7 W* X- C8 ], E# Z4 C
  
) t. j6 Y; u' @' o2 z" e, |: V( |  15、使用索引的缺点" n- ?1 d1 B- R6 I9 j# i
  1)减慢增删改数据的速度;
- I$ s7 x% @7 k7 E7 o2 }  2)占用磁盘空间;
. t; n3 _  l/ N  3)增加查询优化器的负担;, j6 w* G2 O3 `; R6 l
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;6 f, L% ^5 Y8 [+ D' U
  
7 \; g9 w. B( u9 o0 g2 A  16、分析索引效率
6 T2 V. E7 k9 q& f/ _- T' {  方法:在一般的SQL语句前加上explain;& o) \8 O  @( e. ?- n
  分析结果的含义:
9 }! Z& V6 P. }& p) W( F  1)table:表名;5 b. L0 e1 Y. ^" t# c
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
7 d: f* G2 V$ l  3)possible_keys:查询可以利用的索引名;
/ k0 s8 W  i1 L5 u/ v; J" J  4)key:实际使用的索引;! _: L8 [  `% J* \3 y8 f. x
  5)key_len:索引中被使用部分的长度(字节);. I2 Z9 d  W# ]% O$ r$ t( h/ Q2 W& ^
  6)ref:显示列名字或者"const"(不明白什么意思);# C, z# Z+ m- |: @( W
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;0 h* ~! o/ @: ~+ z0 O
  8)extra:MySQL的建议;
& H$ L; E$ E# `; \" K0 F3 h- E  
2 n* e$ U$ H, N  17、使用较短的定长列7 G& A: K2 @3 y( O# O! t
  1)尽可能使用较短的数据类型;
& J3 Y6 ]; v1 v7 ?' w; H  2)尽可能使用定长数据类型;& M3 u$ F; K+ d! J# s5 X
  a)用char代替varchar,固定长度的数据处理比变长的快些;/ T9 c" ]6 b5 r$ L$ e
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
/ A  X& T7 ?& G. V  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
! O6 j6 t% ?5 y# s; q1 L4 `. d  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;" J7 @/ |- M$ p
  
4 R7 I  Z- F) v# q: m  R5 [9 g! i  18、使用not null和enum" n; i5 `: c# L! @4 E  w
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;# U) p# r/ i# k' W/ `: N7 \
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;# q: l0 ^) I' N  W7 b
  
+ p6 B. ]- [0 @( p1 h  19、使用optimize table: ~. N4 ?. B+ s& ^& H! A
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;1 ]' X. k4 ^4 x
  ' w6 [  M1 D" [; [  Z
  20、使用procedure analyse()
" l0 X, |7 x3 |& D) Q  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:( e. y$ @' w+ Q( D4 @" i5 G3 |; h) Y
  select * from students procedure analyse();
$ x3 R. |! i. E3 C; B  select * from students procedure analyse(16,256);$ L# d+ a* I# q, |. N
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
) i/ M4 J# N" |1 Z2 n2 `  
# f/ O. Y, U$ o% g7 T8 o6 j$ {: U  21、使用查询缓存& E. r, X; m1 ^4 |" {9 a/ q2 A6 C
  1)查询缓存的工作方式:
) S; I( I. M( x9 p8 d1 C4 y7 `  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
. b+ F' `5 G$ W! E5 ]  2)配置缓存参数:5 ]3 r( P. ?! \: Q2 h+ p
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
* h( S9 f9 q6 M' m7 A2 G  " i# M3 g) X8 ]" X2 ?
  22、调整硬件
* k5 N/ F3 z' P( \  1)在机器上装更多的内存;2 A$ I+ h3 T' {
  2)增加更快的硬盘以减少I/O等待时间;0 T7 ^7 r8 R$ \0 n7 I
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
1 _3 T( g  c9 D% ?1 |2 B  3)在不同的物理硬盘设备上重新分配磁盘活动;
' e* h8 E5 U$ N- m  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。' U1 j4 M) c9 ?6 b" A





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