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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
7 E' k. r; b# k! s6 Z/ P! |5 a7 ^  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;! g( o8 U6 o: h, ^+ K' G' ~
  列出数据库:show databases;
% l, Z9 P( q6 g  选择数据库:use databaseName;" E- D' B. l2 p' [
  列出表格:show tables;" Q+ L6 k, S# c) y. V
  显示表格列的属性:show columns from tableName;
( W) b! v. G" m7 I  r$ u# x  建立数据库:source fileName.txt;+ N9 i7 B) {2 N
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
6 t# k/ A8 K# U# J6 v2 l7 I  增加一个字段:alter table tabelName add column fieldName dateType;
3 a& o) P, i6 n9 w( x  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;9 m! n  ~+ N8 h  o" F# a0 M# ], ~6 U
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;" S: e2 R( [' B5 l$ @1 K
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
9 [4 l1 g3 v: F6 N( b7 ?/ K/ C  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
( V- y0 H4 Z3 ^- D+ {# y  查询时间:select now();. C' c9 C' F& x
  查询当前用户:select user();
2 z* b% k* G. ~. i* S$ i3 x7 }  查询数据库版本:select version();& ^5 H! X8 [1 l# h/ K, [
  查询当前使用的数据库:select database();
$ M8 E  X& o& l7 ]% y1 U  - h8 m1 X8 e% t+ Y+ ?( ?3 u
  1、删除student_course数据库中的students数据表:+ o2 ?4 t( O/ z. i9 R+ P- h, V/ |$ f
  rm -f student_course/students.*- a3 E4 A9 u" Z5 ^% K5 G
  2 c3 ~* T' i$ L, n
  2、备份数据库:(将数据库test备份)
( q' c  ?$ q: u7 \3 e; I9 k  mysqldump -u root -p test>c:\test.txt+ S8 E$ l; P. A" I% F+ k
  备份表格:(备份test数据库下的mytable表格)
7 J/ W) |7 _4 {  mysqldump -u root -p test mytable>c:\test.txt
& V% c# o' a9 m' V# ~: j! ]  将备份数据导入到数据库:(导回test数据库)0 q* K! Z! e/ o! X# A7 ^6 r" p2 M
  mysql -u root -p test<c:\test.txt
- d# ^* G5 ?5 q$ j; Y0 i  0 Q  O" ~. x0 o+ A: S
  3、创建临时表:(建立临时表zengchao)
& {( f8 R7 n, \  create temporary table zengchao(name varchar(10));! v6 O+ P" h0 n& X
  + T  {4 Q  I, z  Q% v- l) j, J
  4、创建表是先判断表是否存在
" ]0 U0 |% |8 l" {# Y, l1 I  create table if not exists students(……);
1 E/ I) F' X0 V* V+ I( ]  3 f6 ^6 G- D- i# [% b* n% g5 W
  5、从已经有的表中复制表的结构8 v, a9 f* @: ?, b. G8 Q' }  v
  create table table2 select * from table1 where 1<>1;
) F$ c0 @5 M4 \  . q$ ~2 g5 P, T% C9 E* H- X
  6、复制表
$ G4 Z$ d+ H" x  create table table2 select * from table1;
$ p' w  r! _+ m; H  
4 b* |3 j4 X6 S# Y# m6 k+ L  7、对表重新命名# M7 I1 D5 a- I( {& c8 }- J
  alter table table1 rename as table2;: b( v- B: Z, t4 w7 x$ C- |8 a
  
2 n) t+ Q3 n: c  A" Q  ]  8、修改列的类型$ Y8 P: l, O( t( O
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned' t2 ]  ?7 m) s$ v
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned" B3 n0 ~) E1 f. G
  
) K" A; n  o! l$ `( c* Y  9、创建索引
7 O/ ~" l) w, @* B0 m+ g- i+ K  alter table table1 add index ind_id (id);
8 L+ ], `9 `5 p% Z4 r6 n  create index ind_id on table1 (id);
- V' S* B2 k& N- A8 S: m  create unique index ind_id on table1 (id);//建立唯一性索引
) w8 \. N! Q6 \3 \& `$ S8 R  
3 ~! b: J, B+ ~+ Z  D; r; g2 S  10、删除索引4 l# b5 c$ T! v5 W# ^6 b4 V' r
  drop index idx_id on table1;3 E4 u4 _; ~0 ?( @2 A6 A
  alter table table1 drop index ind_id;
/ C; S. D9 G5 v; }! R  
. {, c* {) o& M& Y! O9 d* s- d5 [0 H  11、联合字符或者多个列(将列id与":"和列name和"="连接). m- G1 y; J: A: u8 H1 \8 s; i( A
  select concat(id,':',name,'=') from students;
. [% m6 K- h5 Y2 E' T' ^+ z: E  
$ n4 l7 m3 [3 N0 Q& ?  12、limit(选出10到20条)<第一个记录集的编号是0>
- o8 U1 [) @: u% S6 F  ^9 ~  z  select * from students order by id limit 9,10;
$ R# P$ ~$ b) r3 L7 r  * V$ K* _; b1 w) X8 k% H
  13、MySQL不支持的功能
( O5 v, Z3 _. ~+ N+ M9 I+ k  事务,视图,外键和引用完整性,存储过程和触发器% o- f. y2 d: S$ n
  
* D- _5 \: k, D% U: Z  
# H) q/ L/ {8 k( `. Z8 W! I  14、MySQL会使用索引的操作符号
/ I/ |" X+ u: o; [  <,<=,>=,>,=,between,in,不带%或者_开头的like6 P: a; o" d2 d: x% o* M
  
8 {- R7 R+ d' p, l& K' ^* N9 s9 T  15、使用索引的缺点
& {/ X: s; F8 `9 X  1)减慢增删改数据的速度;3 M/ d) @6 W# o- U  W
  2)占用磁盘空间;
# s( D. Y/ Y) e8 j) U8 C* P+ V- k! w  3)增加查询优化器的负担;
2 I5 w: V8 h8 L' @$ l  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;; O9 f% A. ^" N$ Y  o; e) v
  5 w6 I; s+ {7 s5 U. K
  16、分析索引效率8 u% q5 w$ G3 |9 J. d/ `, ?( j
  方法:在一般的SQL语句前加上explain;- }# Q! m! ~6 p* Q" r6 ^
  分析结果的含义:( l. @' J& B' x% o
  1)table:表名;
8 L; S* t8 E5 G: {' X$ ]  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;; ^, P" U' J; \- e% f
  3)possible_keys:查询可以利用的索引名;, @- ^) j. j/ P" \* J: [; T, X0 [9 p
  4)key:实际使用的索引;
# @$ a4 k7 X! o$ y6 N. d9 x0 E  5)key_len:索引中被使用部分的长度(字节);
8 |+ C, t' p: ?$ U# ^* D  6)ref:显示列名字或者"const"(不明白什么意思);
. e7 B* o3 Q4 ~1 X4 z9 v  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
; J5 U6 H' q4 ]8 B5 C! x  q: C! A  8)extra:MySQL的建议;$ _) F( n; s9 O& V' Z
  0 C% R9 m  _: c
  17、使用较短的定长列
/ m7 a3 P, z8 X% r# E  1)尽可能使用较短的数据类型;8 z1 \" K! J  q
  2)尽可能使用定长数据类型;/ N2 [1 g; S( |$ y. _, }4 u9 e
  a)用char代替varchar,固定长度的数据处理比变长的快些;
" o& P% {5 [. X. P, {, k  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
3 r& p# Z! W- b* p$ j/ u' j  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
# S) T( D- e/ n$ ]  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;4 g4 S6 M9 Y9 M( K
  
" p% I+ \) b8 O7 x7 y  v; M$ B  18、使用not null和enum
  I; P0 b7 B$ \" P# V  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
' O, z" Q% T) [  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
5 S& I) q8 U( q, Y  : d  J/ `$ `4 s  |
  19、使用optimize table! k2 r; C# I8 `" G3 I
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
) s' A8 C% h8 q+ R0 R/ t  9 ?( R' h& \7 J, q3 V& _/ _2 _; ]" L
  20、使用procedure analyse()
- {$ @( i2 o& ^$ |  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
1 K* _. ]2 t! A8 P  select * from students procedure analyse();
" v" p7 p' R# J( y  select * from students procedure analyse(16,256);& n- B+ h" _3 z( b9 G
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;1 W% |; M- b5 w* S1 Z( S
  7 N) Z4 F8 }4 ]1 Z  y/ k
  21、使用查询缓存
! |" P7 Z, r8 D: {( X  1)查询缓存的工作方式:
6 c8 j5 J' q+ }/ Z  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。  ?3 l/ A# k) o) j! a6 z* @
  2)配置缓存参数:
8 A* a, Z; U# B  D0 _: F  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。! H3 X9 W0 U/ [' ?5 g) _$ o
  
1 S; p2 \, S' W9 J& c  22、调整硬件, {; d( l: `3 m# w: g
  1)在机器上装更多的内存;- n& s, {# V8 D' r6 U
  2)增加更快的硬盘以减少I/O等待时间;4 j1 a# q) J, w
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
8 v) E$ I# [$ d' c9 w- l  3)在不同的物理硬盘设备上重新分配磁盘活动;
$ k4 U( N4 _6 N  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
) Q+ G: `+ C  q) D3 ]5 {
回复

使用道具 举报

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

本版积分规则

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