找回密码
 立即注册
查看: 2618|回复: 0
打印 上一主题 下一主题

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
9 }# }0 }9 ~" D  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
6 c: ~/ Y% Q* _/ o! u0 V" I  列出数据库:show databases;
3 I$ j7 f  ?3 L+ ~2 L: S' ]6 ^1 _  选择数据库:use databaseName;
8 g$ l$ \# D9 w# Y- g  列出表格:show tables;
# M4 X/ N& b* H- A  显示表格列的属性:show columns from tableName;
' Z% I; J( L. U8 N) Z  建立数据库:source fileName.txt;$ B( X* z6 q1 R5 u
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;3 g" q" Z: i9 A4 \& T" X
  增加一个字段:alter table tabelName add column fieldName dateType;
, W2 D3 T6 P) W  J+ d  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
) f2 }, J; L+ o  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
  g# O4 \2 ~" A, \! {) {% g  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
9 T# d" M8 _( p0 X( x" _% \; _  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;! u. _* f' [% g6 d- u& Y" T( k
  查询时间:select now();( J+ u8 i; N$ `/ B0 t8 Z/ w
  查询当前用户:select user();
% ?% Q  s4 l2 |  查询数据库版本:select version();% f' T# G" i' N4 O+ A. d* J
  查询当前使用的数据库:select database();
8 c0 C; d3 s" j# l, g% s8 c! _  
" ^; f7 X9 {" ]+ b6 w  1、删除student_course数据库中的students数据表:7 S/ m  F. c! W$ d. K. K/ f4 U. @
  rm -f student_course/students.*+ N1 M6 q' ^' s1 \1 @6 L8 n1 s
  : U2 G; y$ R/ H% \; |9 ~/ v
  2、备份数据库:(将数据库test备份)
5 V' h- \& g3 x" ]8 [  mysqldump -u root -p test>c:\test.txt
$ y9 z3 w) Q- W: C8 s) N7 G& @. T  备份表格:(备份test数据库下的mytable表格)
( V2 [$ u2 K6 s$ {7 Q$ @' H! ~  mysqldump -u root -p test mytable>c:\test.txt& t2 ?4 p* x. B- U" q$ L  i
  将备份数据导入到数据库:(导回test数据库). p' n1 I  [/ j9 x* G: C
  mysql -u root -p test<c:\test.txt
6 {% V% E0 t7 c0 ~- k  ! B; J. R5 i' T# l1 c/ @$ [5 }, `
  3、创建临时表:(建立临时表zengchao)8 p9 J' V8 `, B% T4 i
  create temporary table zengchao(name varchar(10));& h7 ?& q  A! T! S9 w" S- C
  . z0 }) x9 [" u: Y& `1 t( A  r
  4、创建表是先判断表是否存在
8 y4 w5 z, D3 v: n  A  G' }3 x/ q  create table if not exists students(……);7 M! M+ D/ x' _9 g, x
  
7 V4 C8 j. Q/ l2 ^  5、从已经有的表中复制表的结构
; C  K* d$ _, u6 M: d* y  create table table2 select * from table1 where 1<>1;* _  v. M, G, \( o
  
# r$ K. H: H) p  6、复制表9 x/ |% p$ O, g* ]
  create table table2 select * from table1;' a% v+ T1 X) k6 I+ L
  ( s; I$ G4 N0 t" m# p$ T! [* a
  7、对表重新命名
9 m7 P: m; s/ W$ ^/ p# V  K7 ^# a  alter table table1 rename as table2;
: \" u; i( H" i& F- z  ; U* r. C( s' v% m! _
  8、修改列的类型2 A  ?3 k* y; H* E& ?4 ^
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned: ]7 w1 E! ?5 K
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned& y( A+ P! A4 r0 J1 A8 a
  : w* l6 W& d( G7 z6 W5 ]- P0 T/ d
  9、创建索引
! t1 R* B& K, I) M8 k* M  alter table table1 add index ind_id (id);! T' B7 u/ U4 C$ ?8 w5 Y- a
  create index ind_id on table1 (id);
3 K. ~& d+ e% p  [# H' [% R0 S" G  create unique index ind_id on table1 (id);//建立唯一性索引
7 Z$ ^$ O* y& x* D  3 \* S8 U/ x% g  d$ d1 T
  10、删除索引
/ I- c+ C* E3 Q: o+ v) d% g# }  drop index idx_id on table1;
, u$ t" s9 s7 }1 G  alter table table1 drop index ind_id;1 j! _, J) H: _1 ?! F0 I& z: k
    h( h( @& k" ~0 F) c9 |$ ]
  11、联合字符或者多个列(将列id与":"和列name和"="连接)6 Q% n* j- P4 F# Z% W) y4 S
  select concat(id,':',name,'=') from students;
4 F6 r5 ?- b! h* ?2 k) l  ! \3 G( ?! H, Z; |; }/ o' y. m3 i
  12、limit(选出10到20条)<第一个记录集的编号是0>
9 X- L' u/ L  Y( J7 Z8 G- h* o5 q( [  select * from students order by id limit 9,10;7 S/ u3 e  Q1 W$ N
  
# h! E" M9 g" \/ s9 ~+ d7 P  13、MySQL不支持的功能& Q! J( {0 D0 G0 [  W1 j+ N7 Z
  事务,视图,外键和引用完整性,存储过程和触发器
, g9 ~! c( [4 a5 n4 V# J6 h  
" x7 x* p' I! h# S. z  0 |2 ~7 w5 D+ V- K- C
  14、MySQL会使用索引的操作符号
9 A# K* _0 S' x: d  o) |" k5 k2 [  <,<=,>=,>,=,between,in,不带%或者_开头的like# C# N# a/ g- [  n0 B0 a- B/ p! E
  6 b: u$ K- m7 e/ t5 m. M
  15、使用索引的缺点
0 T( m- s0 o# {7 ?' e  1)减慢增删改数据的速度;
5 J6 P) D& x: ^3 C. k  2)占用磁盘空间;( |6 D- `, ~8 \: q! G$ @8 I
  3)增加查询优化器的负担;$ v: }7 t& _0 q6 A7 Z
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;% i( o4 _1 |  F  ]: \2 `/ F
  - x+ g. O/ r: ~& [
  16、分析索引效率7 P% ]& z, \: A3 x! Y( s2 U
  方法:在一般的SQL语句前加上explain;
; }+ ^9 {! v% W8 O+ r  分析结果的含义:3 h  H2 [  j9 E" z3 s/ l" N6 g
  1)table:表名;
$ o. J. K1 ?) ~/ j6 d: Y7 A  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;! B9 b( q4 {7 T/ H( d
  3)possible_keys:查询可以利用的索引名;
) X# y9 ]  Y$ w! X3 C  4)key:实际使用的索引;# p! S: i# X; U1 L
  5)key_len:索引中被使用部分的长度(字节);
( d: t) T/ A& l, q& ]  6)ref:显示列名字或者"const"(不明白什么意思);: |" x2 c/ C: E7 n+ F% H
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
" j8 u7 `$ Y5 K( x: h  8)extra:MySQL的建议;
" C5 P) E; {! o  / v( D2 S  c" Y% ^5 v" R
  17、使用较短的定长列. l3 D' p2 b7 E' ^7 _
  1)尽可能使用较短的数据类型;
3 ~/ t! j# S: @' `5 e8 e4 V  2)尽可能使用定长数据类型;
! X8 m9 u5 O* h- W! w0 t  a)用char代替varchar,固定长度的数据处理比变长的快些;6 K# H; I9 a5 b# B+ b4 x
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
" K5 \% p, H2 i( ]7 b+ R  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;" D8 U2 {* R$ u, M& S& d
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;* \; d8 a9 l- y) f9 U! J
  
9 j# P2 }3 t3 {1 \( z  18、使用not null和enum
0 L! v: |  y" w2 y  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
3 U9 }* R9 y) z  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;( l7 m2 g3 }  M. s5 a
  ( w. }9 Y: v9 o9 ?& @
  19、使用optimize table
" [) v# _6 p! V6 T" X& n5 W  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;; Q* g$ I; Z/ ~8 c
  1 b7 E! w3 X4 u, I# f$ u
  20、使用procedure analyse()
6 A& r( G* U' ?& I- ~) c  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
( a" b9 K" f/ }! n  select * from students procedure analyse();
3 y6 @4 L% q/ o* _8 Y  select * from students procedure analyse(16,256);& Q4 s2 @1 a/ Z  ~: D
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
1 B& E; S+ f# r  
, Q! y7 r0 g& M9 L: Y5 Z" [  21、使用查询缓存
1 [$ U2 C8 j* `8 Q8 n8 [  1)查询缓存的工作方式:9 f0 g3 O/ C' [2 N$ V! }
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
2 m$ p1 F# @. V! U4 S  2)配置缓存参数:
- ]" p9 d! f- h& H. G2 b8 s  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。% y5 G. t& _9 n- \
  & Y( L) t/ s7 u4 J/ X% t4 Y
  22、调整硬件+ k7 O* `: ^# t3 p
  1)在机器上装更多的内存;2 }8 ~, u. H6 l- o6 o6 o2 q
  2)增加更快的硬盘以减少I/O等待时间;8 x0 \! Z9 g' q2 y/ k
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;9 J% D4 u, E; h- A. [$ A6 g% ~/ i( p
  3)在不同的物理硬盘设备上重新分配磁盘活动;
6 V* r5 {& R, E4 }, ]  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& l. q. V6 P& m2 I5 n
回复

使用道具 举报

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

本版积分规则

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