中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-13 16:32
标题: mysql常用命令
启动:net start mySql;
' Z* M% {4 K/ g% V# e+ w4 y  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
% E! z% N9 p, [! U6 q, W" K6 K3 j  列出数据库:show databases;
( C5 o! A4 H6 n% H7 N. l  选择数据库:use databaseName;
) [6 d! n; T( z0 o6 l* v  列出表格:show tables;
% q0 M7 }" f3 Z1 v  显示表格列的属性:show columns from tableName;
  Z3 M( @$ Q+ W- f  建立数据库:source fileName.txt;
5 o1 Q8 Q+ o' q) j4 m4 Z  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
& v% s! e* p, @" n: `  增加一个字段:alter table tabelName add column fieldName dateType;: w4 D7 D) t& a: M8 m
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;# d. C  C7 l$ C  d3 t3 V
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
# a& G/ Z! ~" {; T0 \  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";' S' t2 @7 Z& e& A3 F9 }# h# o: R
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;; u5 [- G# l2 e% k# R
  查询时间:select now();
' {6 N( Y" v3 s7 h8 V  查询当前用户:select user();% [2 i6 f2 b* z( Z1 J, E  a
  查询数据库版本:select version();
8 e3 q. ]) _& P4 f# C( z9 c! n8 R  查询当前使用的数据库:select database();5 x$ P: \- x6 A- p* L7 P
  
* I' j! P+ G- n  1、删除student_course数据库中的students数据表:# X2 L7 X/ C+ ?
  rm -f student_course/students.*
; ?7 p( b. k: L; [  
7 q. d0 e! Q8 _  2、备份数据库:(将数据库test备份)
7 T. L  T% v# m+ p, |) Q  mysqldump -u root -p test>c:\test.txt
) {' u/ w1 |" ~) V6 ~; K" \. z  备份表格:(备份test数据库下的mytable表格)
' K* h* j" T! H6 s  `7 \  mysqldump -u root -p test mytable>c:\test.txt
. d8 K+ a" k* X4 }5 B1 I2 [  将备份数据导入到数据库:(导回test数据库)& L2 z5 f0 M. o: m  |
  mysql -u root -p test<c:\test.txt
; \: Z* M9 q) i6 B( G  # @  b9 U# n0 J% n8 W- G
  3、创建临时表:(建立临时表zengchao)2 n5 m; |* J8 ?( c, V. L  h
  create temporary table zengchao(name varchar(10));
8 j( r% n0 N$ n7 r- N  ! {) Z  a% Q. O8 b5 q' J% U: w8 u
  4、创建表是先判断表是否存在4 c3 n% K. j7 v
  create table if not exists students(……);( B: S1 E( w' j0 ]  P
  - |4 O( @* g4 c$ q
  5、从已经有的表中复制表的结构
* u7 b$ f* u* f1 @  ~; g, |& I  create table table2 select * from table1 where 1<>1;9 E. E/ {5 P6 `9 M- l8 R
  
7 V4 d  z- c9 E. v2 w( c  6、复制表! Z8 W8 n% K& {1 Y) L
  create table table2 select * from table1;
% w# Z7 V9 g) q' {: K3 @  
8 X, T, y4 C; }  7、对表重新命名
$ K. o  ~4 s4 n+ Y; c. [& J7 b  alter table table1 rename as table2;
6 ]' \0 _. O" s7 ?# D  
' F* h2 a5 M% Q$ V( `! s  8、修改列的类型. ?( s8 O+ @8 F9 ?+ d& k
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
6 K" y# a- @3 K  a- o  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
- Y0 t9 V8 U8 S( Q  ' F' A0 N/ O3 G# F6 `
  9、创建索引: b! Y8 p7 [+ e# p
  alter table table1 add index ind_id (id);
7 k) l* J; k' K- Q9 f6 F, R  create index ind_id on table1 (id);
; D8 M0 s% g3 L5 I  G3 p  create unique index ind_id on table1 (id);//建立唯一性索引/ r0 S1 j2 r2 a+ e' L" L$ s' F
  
! ^; i# O- s+ L( w3 t  10、删除索引! d, I) Q. A4 u
  drop index idx_id on table1;6 A+ H5 f' h9 L! t8 L$ k
  alter table table1 drop index ind_id;$ C, m+ Q( j" F2 a7 L
  ( B. g8 G) K2 s! p" A6 w8 O; w  U
  11、联合字符或者多个列(将列id与":"和列name和"="连接)- a' s% t/ i3 c' }3 M: l# P
  select concat(id,':',name,'=') from students;
; F& p7 e, J4 }3 ?- y  * d, F9 N% B* i1 ]
  12、limit(选出10到20条)<第一个记录集的编号是0>
. S9 h! S1 e; a' c) W# w  select * from students order by id limit 9,10;
" o8 N! h: g( t5 I- S/ g6 d  
. F- ]0 H1 T, v3 S  13、MySQL不支持的功能
, k* A8 _+ ?* O5 ~" X# ~7 w+ @  事务,视图,外键和引用完整性,存储过程和触发器
/ z3 |, F8 C5 @3 R/ }; e" W5 M  
$ ~2 [+ d3 K3 ]  ' h3 V+ u2 o1 n8 H8 ?" G
  14、MySQL会使用索引的操作符号8 v0 [! X, X- }# ?
  <,<=,>=,>,=,between,in,不带%或者_开头的like1 R) z; W. r% x5 h+ t$ l
  
/ U- [; O5 S/ ~6 Q  15、使用索引的缺点% B8 w- Q* K2 z
  1)减慢增删改数据的速度;6 a" L* }+ t( U4 l+ R; U
  2)占用磁盘空间;
) K4 w$ q8 K5 M; f  3)增加查询优化器的负担;
6 Y" K+ {5 o, u  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
; W/ E1 b3 W& U* Y3 k  
( T' B! I  L  \0 w2 s8 O! L) Q  16、分析索引效率
2 l- I' r7 \, f; O4 F6 R( y  方法:在一般的SQL语句前加上explain;% [4 x) c  b# s2 `# {, l
  分析结果的含义:* G1 [' ?1 w* g# A# @; A
  1)table:表名;2 N  }  w8 x& g( f* t( K
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;8 `$ |+ N7 R- y8 g6 f
  3)possible_keys:查询可以利用的索引名;) y3 j  V& `3 q' I
  4)key:实际使用的索引;, r$ e2 ^, W0 a' [
  5)key_len:索引中被使用部分的长度(字节);8 Y3 j: x4 U) ^9 ^4 W# x4 p" {7 v
  6)ref:显示列名字或者"const"(不明白什么意思);) ~4 y" @2 P1 P2 f
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
. t; ?  }4 A: E2 k% J0 z: c  8)extra:MySQL的建议;$ K" c( I; l. f
  
9 M' U/ J0 G1 I  17、使用较短的定长列" u* s9 \5 H1 t& y: p; ]) e
  1)尽可能使用较短的数据类型;
& F' B8 ^  c5 n. b, |# E  S% }  2)尽可能使用定长数据类型;# B+ n" @7 N7 `
  a)用char代替varchar,固定长度的数据处理比变长的快些;
, _/ Y! A1 D8 ?( x- A" R: d; M  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
: J' c; [$ n' e- ?) M; A% [$ X  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
* W, g0 G0 A+ R: A" e; \  ]! K  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;. M$ ]- `# n& R/ I! e
  / u4 e9 J  v7 q3 i
  18、使用not null和enum
7 p# D3 T5 ?+ N9 d. q0 I9 Z  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
. o4 I! ^( |. h. Q  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
6 X7 L: F; c+ v- T. z1 m1 v! K& B  5 w) O$ w4 s1 B& b% I# F+ M9 I: H
  19、使用optimize table3 f" I" i7 G: m; D* y6 y; V0 e
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
- ?5 L  Y, {9 ?6 f# J, K; a, d  ) n0 Z, F3 {4 k
  20、使用procedure analyse()
$ _. F4 K; r: y  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:8 d0 y, K2 i4 j* F; g
  select * from students procedure analyse();
) D' f* A, ]3 S! D. F" M1 T  Z  select * from students procedure analyse(16,256);
2 i; t- W1 r' C8 O4 E7 D) O  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;, h: m$ r4 |' y1 r
  
6 S* H% }; D& A3 T; V6 `  21、使用查询缓存# O  P$ g- u" u- _" G2 M. S; h9 g
  1)查询缓存的工作方式:* m8 |+ h! j1 k/ u
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
0 |+ a: h7 y6 G6 Q4 O  2)配置缓存参数:
* T1 f2 \% ?( N5 j  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。6 x& b/ ?: X* Q2 u! u& u- X# |
  7 L% o" x2 h1 f( j7 g* D! V
  22、调整硬件
! A8 K9 O7 ]3 \# T$ _  1)在机器上装更多的内存;
0 z$ i, D: |. o% M: N) L9 @2 }  2)增加更快的硬盘以减少I/O等待时间;' `0 X1 d: z, ]/ i# ]8 b" M4 J; r
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
# `, L/ }) m% W( M8 @3 m  3)在不同的物理硬盘设备上重新分配磁盘活动;
# e; |* ]: n% D" l& c) g  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。+ B/ N: L$ n1 l( ^& {





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