找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2669|回复: 0
打印 上一主题 下一主题

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
. z* @2 L3 W; @2 ?5 v* j$ }  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
. J& K" L. O) g  列出数据库:show databases;
0 D, C8 K+ ?. B$ l# v) R0 E6 D' I  选择数据库:use databaseName;9 O/ X4 f0 y  J( s6 N# X8 t8 N/ y
  列出表格:show tables;
) I: ^4 q0 X" n' b  显示表格列的属性:show columns from tableName;
: B/ S7 X' M/ K* x  建立数据库:source fileName.txt;0 B, y4 k# ]  c4 f
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
2 Q9 J1 k$ Z" F  增加一个字段:alter table tabelName add column fieldName dateType;
6 t/ [$ j3 i0 x# ^  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
; t% z; d, h) U, T( Z  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;! s  H1 B7 c6 n5 P7 y4 N2 s
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";% _" `  K+ z) w2 j" k. h
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;& ]" m; ?- n+ ?
  查询时间:select now();
% A* d6 h" r( Z0 t3 O  查询当前用户:select user();& `% C1 {7 ]6 S+ A! z$ l
  查询数据库版本:select version();# L6 N: h# r. g$ \. I2 g4 n
  查询当前使用的数据库:select database();
" e0 W* m& l' i5 D) e  2 J0 r4 e1 u' y" h$ y9 a
  1、删除student_course数据库中的students数据表:
/ N3 b5 r0 N, d7 f6 s* ]9 _  rm -f student_course/students.*3 F6 F9 a) U# [
  
% Q4 m7 }/ ~/ ~, [0 {& S: i  2、备份数据库:(将数据库test备份)
1 @6 ?, N3 W( k- u2 L( I! P; b  mysqldump -u root -p test>c:\test.txt
' ]; n0 n" ~% x8 S% D8 f  备份表格:(备份test数据库下的mytable表格)
+ T/ W, Y: G4 Z* a  mysqldump -u root -p test mytable>c:\test.txt
, @5 h8 g3 f( D, Q  将备份数据导入到数据库:(导回test数据库)
; A4 {/ o+ z' R4 j3 v  m# N7 _  mysql -u root -p test<c:\test.txt) h- V! a: x  x
  % w! L* z/ R3 [* W
  3、创建临时表:(建立临时表zengchao): v0 y9 {$ d% l- W& Z8 v7 P& N5 x3 |
  create temporary table zengchao(name varchar(10));3 \# [2 }$ X9 M+ l" H- y# _& j
  / g' [6 C! ]% ]! R% \3 b+ S0 b5 r
  4、创建表是先判断表是否存在; F+ Y) m. |/ z9 F/ e5 [
  create table if not exists students(……);# u: I+ F( j" [
  ! q2 [' F% m1 S) i2 V! F
  5、从已经有的表中复制表的结构' r& ^) Z4 I" g- Y
  create table table2 select * from table1 where 1<>1;( m* H9 e! b% r* A! E& `* V/ O
  / n0 H) c3 X! G+ a
  6、复制表3 F* }% O% G. z4 C  i
  create table table2 select * from table1;7 v( o2 Y( a' Z- K
  / Q0 |4 u) M8 W; W+ q
  7、对表重新命名
$ C2 o7 E3 ^2 w1 i( r2 I  alter table table1 rename as table2;
( M: E1 Q9 ]( N& z3 F  
% N" O) p+ R; q  8、修改列的类型
9 A- x+ U/ S7 c. a9 a7 ~  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
+ J- l/ d. l. [  Y5 M  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned  S) T' v( W) @* ?  P1 S: r
  ( U1 x. x. F5 ~7 o& n! h
  9、创建索引
8 K4 P, j# C- Q% Z6 [  alter table table1 add index ind_id (id);; p! b& u; c5 H! Y4 m
  create index ind_id on table1 (id);
$ V  m5 S( D, P* J4 F! `  create unique index ind_id on table1 (id);//建立唯一性索引
$ q! F& U: b) O2 ^  
, I4 F. R8 Y7 e  C+ y0 E  10、删除索引6 n& h& ?/ F" X$ N$ l  c
  drop index idx_id on table1;) f2 b: ^8 _& h$ ^
  alter table table1 drop index ind_id;1 @* }2 N- v" v! }* _
  
9 B4 ^  D/ P* Q( }4 ]1 \  11、联合字符或者多个列(将列id与":"和列name和"="连接)
5 a1 o1 n+ Q6 }/ m! O5 U1 c  select concat(id,':',name,'=') from students;: M. ]3 N9 U0 s0 h4 q  }. M$ L
  
9 A$ P" I/ e: S* }; a9 r! L  12、limit(选出10到20条)<第一个记录集的编号是0>" Q- m1 L; `) j& {2 I4 D: G  M
  select * from students order by id limit 9,10;
9 X. m  W  J0 _0 f6 R) z  
* i2 @. @/ B! m; H1 j! N: C  13、MySQL不支持的功能& v2 G! X. }) u' U! {: Z
  事务,视图,外键和引用完整性,存储过程和触发器- I: {8 t! |7 i( G
  0 H0 j) ^# g5 w* F5 O1 r+ d# F! W
  
0 o8 E8 [4 \. R9 m# O. i  14、MySQL会使用索引的操作符号$ G9 z% P1 o! a' {8 H4 ~5 V! D
  <,<=,>=,>,=,between,in,不带%或者_开头的like- ~5 \( r  L0 T5 c; r0 P; m
  
: e3 P. F) d4 z, Q  15、使用索引的缺点
$ V5 l( O/ |( R/ N  [  1)减慢增删改数据的速度;
4 J) F/ }! P- ]+ |  2)占用磁盘空间;) y2 V- l$ F7 J6 G% q5 g( F3 A( u" d
  3)增加查询优化器的负担;
( D+ `6 d0 W6 s) `  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;/ Y! S( a8 S1 C3 A, m) D% W4 a
  
! I9 t- N5 u  \  H" R" k1 w2 {  16、分析索引效率
/ i+ l$ @+ A2 ?' U1 |  z/ F  方法:在一般的SQL语句前加上explain;
* R: b7 A! O, {. Y2 [$ |% A2 h9 t  分析结果的含义:
! L+ M: Q( T" }9 a# \% z( S  1)table:表名;# F9 {1 b8 l# s! r
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;+ p8 G8 y) s, J8 g) c; m
  3)possible_keys:查询可以利用的索引名;
% t  _+ h; _% }  4)key:实际使用的索引;5 l9 K$ f  _  T9 v( }6 M
  5)key_len:索引中被使用部分的长度(字节);
" X4 j% R. r$ o- e- a  6)ref:显示列名字或者"const"(不明白什么意思);9 B) J; U' A6 }( @
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
; p+ D* _7 Z2 e1 @$ s8 _  8)extra:MySQL的建议;
3 a, Y( y$ F# o; k- `7 {# m9 P  . H) n, J; E2 A5 z
  17、使用较短的定长列
$ ^0 s6 z2 F9 p6 M: p, i  1)尽可能使用较短的数据类型;
3 C  {1 ?+ c1 f9 W0 u  2)尽可能使用定长数据类型;- i  h. \1 k! W+ [
  a)用char代替varchar,固定长度的数据处理比变长的快些;" V! @$ g" C* g7 [) C7 A3 [8 I
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
1 A: w" [* T. A! i  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
* G3 k+ Z7 E; E8 G2 ~) ?  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;4 v& r; W$ T- S
  / w& [/ F" m, n! \1 Y# Z; I8 A' t7 E
  18、使用not null和enum6 y& ~& ~2 Z: A% x3 W
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! T6 K6 }9 g% V' |, ]  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
/ i: s  [1 j' k) T# u( h  : z7 ^8 B4 }- ~* }
  19、使用optimize table
7 }  S$ _2 @' e- a% t- \, |  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;7 U. X5 m! j6 E2 l( X1 k' t. C- S
  3 q# j/ \4 ^" b: t
  20、使用procedure analyse()' m9 T' r# l( L) I1 K- ~0 m& `
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:( a: _1 [1 I3 k5 X( L- C
  select * from students procedure analyse();, g5 r+ w6 Y+ `! v, D
  select * from students procedure analyse(16,256);
' k$ O$ T. h* ]" @1 s, p6 R$ q% n  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;' t7 L+ E' @3 H5 l  s
  
9 N' T: l- L6 F7 A  21、使用查询缓存
2 j1 o7 ^9 X! @1 x% L5 P  1)查询缓存的工作方式:9 j+ H3 x7 ?' X: |: F0 T
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。0 y% a, g* g4 C8 F3 e9 H
  2)配置缓存参数:
! e4 G9 R9 G1 h0 j/ g5 u/ L  f5 s  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。3 _2 x/ P7 a' Q- V* \3 i* C
  ' F! W- ^# F4 U& j
  22、调整硬件
' m8 m4 N' O) E8 |2 A: f( \  1)在机器上装更多的内存;
3 |/ M, F" {2 _5 b# c- L# i  2)增加更快的硬盘以减少I/O等待时间;/ j! I  }' J+ u! z) {7 p
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;3 Q0 ^6 ]; H  {: F6 O) F% S! F( p
  3)在不同的物理硬盘设备上重新分配磁盘活动;. _6 J1 c4 q0 r0 t/ `' C: z: N1 y( A
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。( j# t- q' `" h4 p) q+ ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表