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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;3 w/ q; P  O4 v" l
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
2 ~( C3 X6 @3 w) R7 k' Q  列出数据库:show databases;' l. F' b7 k5 _! e+ j& N$ a7 `
  选择数据库:use databaseName;
8 M. T% l6 I( c  列出表格:show tables;
8 ]# z' Q/ l8 a7 D- c* O. ^( L  D  显示表格列的属性:show columns from tableName;# a1 O; G/ z" ^( O- }
  建立数据库:source fileName.txt;
# v0 `8 _; n( B4 ?  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;- b& b; q+ d( Z/ N5 o
  增加一个字段:alter table tabelName add column fieldName dateType;
) s0 h& q5 b7 I% Y3 I  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
5 X. _% g1 n( v  E" o7 I5 @, c  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;0 }/ L* W5 Y* |2 K8 O* [
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";: u. T' L4 ]# X7 }/ k) A+ U5 ]
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
6 s+ J8 |! K' i" K  查询时间:select now();# Q. N4 P) [! l* B' a1 @& w" b
  查询当前用户:select user();4 H8 d# T- v: M1 b# x
  查询数据库版本:select version();$ [( t7 p% g8 ]. u$ n! f6 M
  查询当前使用的数据库:select database();
; g* w3 [+ z7 V" }% X! N  
% H8 e* J/ \3 B0 J  1、删除student_course数据库中的students数据表:2 P" y, ?# z; g8 M7 n& {
  rm -f student_course/students.*
0 G% \! d5 C8 W( D: o6 Y9 x  ; G+ `, v  s6 _
  2、备份数据库:(将数据库test备份)3 A( _% z  X9 j: Y1 e6 R3 I* i% X
  mysqldump -u root -p test>c:\test.txt
$ `# ?, R5 x0 c! }$ L  备份表格:(备份test数据库下的mytable表格)
' [- l; L' C) P+ V4 Q0 u  mysqldump -u root -p test mytable>c:\test.txt
/ {/ f& v8 }0 b! W/ q+ @- m  将备份数据导入到数据库:(导回test数据库)* }+ F0 [. i/ R* }" l
  mysql -u root -p test<c:\test.txt
2 d" n! w7 y" c1 {7 V2 t; }2 N  7 g4 J% W; j) j/ K: h, r  V6 M4 ]
  3、创建临时表:(建立临时表zengchao)
' M7 O# N) X8 @5 \' x9 V& c  create temporary table zengchao(name varchar(10));/ ]6 x- `  W: C9 R; X
  
- a$ e8 l( ?1 N1 z7 E+ k8 ~: J, v  4、创建表是先判断表是否存在( c/ i! \; R9 o1 M- a8 F3 q# J
  create table if not exists students(……);1 T8 c" P0 C* c/ L9 ~' I
  
* w6 M, m. {; s8 V  5、从已经有的表中复制表的结构
; T1 W1 A6 b2 m" x5 q8 v  create table table2 select * from table1 where 1<>1;( N, O  u( \9 g7 C6 l% _
  ( A- ?# k8 X; J9 X( P% [4 V- H
  6、复制表! E$ y: y- ?0 G. ]/ K
  create table table2 select * from table1;3 K& q/ U2 q' d$ P2 m4 B6 I& Q
  4 Q: P- p7 w" i& @
  7、对表重新命名* M: `2 V' k/ ?# H3 B6 d$ v
  alter table table1 rename as table2;8 r# M  P# b9 A& j" M, C+ S3 N' m* ^' Z
  & Y( }2 a: n& D) `
  8、修改列的类型# {; u- i( x  [. n* Q$ y9 t
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
2 S- Q2 f/ k1 W# }3 U: @6 R  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
( c; Y( c$ a# N3 ]% x  + l8 z: y* ?& J% \
  9、创建索引) n3 [3 b- H  W3 O7 Y. S: m, i; i
  alter table table1 add index ind_id (id);" A: {) \# ]  r: j( P
  create index ind_id on table1 (id);! x2 g6 @* Q0 d- q1 D& [  O
  create unique index ind_id on table1 (id);//建立唯一性索引
. L+ ~2 _# J" s; p  
& J7 D7 }6 s! q# X- b- k9 o8 H( i  10、删除索引# W( w& u/ W5 w0 a; \* f  F
  drop index idx_id on table1;4 @7 ?, C/ x, D7 F& j
  alter table table1 drop index ind_id;) a1 w* K& _+ p; p" G; n
  
  o% L' {# ^5 Q/ H# @( L- a' |  11、联合字符或者多个列(将列id与":"和列name和"="连接)( P9 D1 [  \3 l
  select concat(id,':',name,'=') from students;
+ `% i8 X4 C3 g  
' D: F" k7 D; F# l+ f  12、limit(选出10到20条)<第一个记录集的编号是0>
' q4 D7 y- L8 x  select * from students order by id limit 9,10;9 j( ~: p/ U6 C! y/ ]+ {1 v
  & I% d7 s+ w  w" F$ z" w
  13、MySQL不支持的功能
5 @5 D9 I3 z# m3 ?& _, y  事务,视图,外键和引用完整性,存储过程和触发器8 q; C8 j" J& |; I7 k) U8 o0 m
  
5 e1 E. `+ s$ N1 ]. q- Y0 ]  
7 T2 M7 W& ?* d3 k: [$ D  14、MySQL会使用索引的操作符号
' \) W; `6 P+ O& q' T7 f  <,<=,>=,>,=,between,in,不带%或者_开头的like) V5 o( O' j8 H( M
  
- n9 N" s* Q/ J) f  15、使用索引的缺点
# U/ E  S4 j1 p. ?2 U! X* E, N) D  1)减慢增删改数据的速度;
( }% }! y! {' Q0 J* G4 n  2)占用磁盘空间;2 G* A  h2 ^; g4 w, r
  3)增加查询优化器的负担;
$ N$ }& u% U+ y  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;  b7 k. m/ A- d' S/ e0 e
  
( r3 U. ?4 `' r  16、分析索引效率3 ?7 x+ @) X" y, O! J* ]1 m& ~
  方法:在一般的SQL语句前加上explain;
/ ^! `4 K  Q( a8 Y; j5 p" I  分析结果的含义:$ U7 A* `  b" ^: x( ^0 Z# H
  1)table:表名;
+ P+ y' L$ ?2 D! T2 p  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;6 \' m$ G: K3 p9 ~$ q
  3)possible_keys:查询可以利用的索引名;! m9 z9 }/ A: w0 R8 M
  4)key:实际使用的索引;
1 r. m0 e! R2 d( l  5)key_len:索引中被使用部分的长度(字节);
1 b* z& g, Y5 H) p  6)ref:显示列名字或者"const"(不明白什么意思);- S' s% f7 M) |/ M5 B  N
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
' C8 T$ z1 M: c* g4 [  8)extra:MySQL的建议;# U  }2 U3 L& v3 P( _# _
  
0 B0 n. f7 B- B( K' O  17、使用较短的定长列. [% \1 m2 V- e& g! a4 a
  1)尽可能使用较短的数据类型;
* }( _- o4 J. i  2)尽可能使用定长数据类型;
+ J% B: h' c* L1 F3 B7 g6 N3 c/ b  a)用char代替varchar,固定长度的数据处理比变长的快些;
& M0 u3 Y8 w  b; Q; b8 N  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;" s: i: n( A2 |: l! ~
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;/ r8 E' x4 Z& _( {9 \: @( N4 y
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;, t9 A, U. H9 y
  * c5 h1 C  x* B9 J, [( u
  18、使用not null和enum
: v% Q% A& e1 I8 y: H% Y  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;$ _: c# m1 G+ j7 R# R
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;" q% A8 u9 I. \* A6 H$ h
  
' j! I( u1 u. y3 b& i  19、使用optimize table/ H6 M& Z* {+ q% X# z
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
. W9 D# [2 V0 e% m8 S$ g" ?  6 y, u7 Z2 N% y; `1 h4 ?  N
  20、使用procedure analyse()2 N+ b9 {1 N6 x5 m/ L
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
5 L. D' c- c9 z4 J% Y- m4 K6 y' f  select * from students procedure analyse();2 V- f8 D9 J: N! |8 Z
  select * from students procedure analyse(16,256);5 C+ z8 P; v4 w1 C, T4 z1 [
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
) q2 k$ f7 }/ ?! _8 ]6 s  # Y( H5 o+ ^- D. @. W
  21、使用查询缓存) B- I' P% E7 x4 r2 E9 {. X
  1)查询缓存的工作方式:
! T& p  b! c/ p7 H  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。4 t. z' O* j2 K
  2)配置缓存参数:# h% s- e' K1 Z& ?3 B1 T7 m
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
: s) f' g4 J' q* x% L$ I  
1 x: o( e" G! ?  22、调整硬件
5 \0 u' w4 A6 s3 L1 d  1)在机器上装更多的内存;8 g. \/ D, M& V' I
  2)增加更快的硬盘以减少I/O等待时间;
& h. v/ t1 r1 F# ?, W: h* j  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;' T1 ~1 ^2 @4 z! }' p3 W
  3)在不同的物理硬盘设备上重新分配磁盘活动;: t: ~! g% s% v9 @  r% Q& y
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
: B3 F* ?. a0 y9 }
回复

使用道具 举报

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

本版积分规则

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