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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
/ |+ U2 }! S% f5 E, o  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
* b. F6 ^, U) a  r" W; J/ R8 D  列出数据库:show databases;
( ~+ }4 J  ?9 j2 H: K) t4 ^  选择数据库:use databaseName;
% ^4 o, Q0 E5 e  列出表格:show tables;
/ l/ ^7 T; o' b% ?6 a" Y: E% L  显示表格列的属性:show columns from tableName;8 v2 ?) W" K1 ^' |
  建立数据库:source fileName.txt;
5 P' P$ `7 l# _( ]& i: a  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
; X( v2 I$ V, |* j: Z  增加一个字段:alter table tabelName add column fieldName dateType;7 z4 z+ s; E' w4 M5 E' I7 E/ T/ p
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;% ^) T: F! g& V9 G  U
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;, P8 l( h5 S& L% N
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";% G, [7 {8 c2 K( l8 y2 ]
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;$ i1 L; u, B7 K" Q8 q
  查询时间:select now();
2 w9 k) M( q% k/ H8 z/ x  查询当前用户:select user();
- }# }% k' U$ C' S4 v! l1 G  查询数据库版本:select version();
/ R4 f- v3 t9 O1 }  查询当前使用的数据库:select database();# l, f- R5 m8 e1 {
  6 A. u7 [) L8 _6 n- A! i
  1、删除student_course数据库中的students数据表:
6 t0 Z" ?$ T* J; T0 f  rm -f student_course/students.*
4 G7 A0 `+ b" m, K0 N6 j( R0 \    i6 H5 z' J( F0 f% n" L; X( N
  2、备份数据库:(将数据库test备份)$ D( n7 m1 ]% @% S4 V; x  @
  mysqldump -u root -p test>c:\test.txt
# n4 h7 D, T0 }; l; o1 C* r  备份表格:(备份test数据库下的mytable表格)
! p& l3 i* b) A- \% i  mysqldump -u root -p test mytable>c:\test.txt
3 L$ r, E0 k( t% W5 y  将备份数据导入到数据库:(导回test数据库)$ Q2 f& P0 H: c% h7 V! d/ ?3 @
  mysql -u root -p test<c:\test.txt8 _; U2 q* c' H2 [, m
  ; S! a6 o8 Q: y, W2 _
  3、创建临时表:(建立临时表zengchao)
8 e+ D1 ~0 V4 f# b, |! z6 m5 ?8 B0 ]  create temporary table zengchao(name varchar(10));
* f" S" ^+ U$ I! o  
. d2 N$ \8 P2 r2 _2 J  4、创建表是先判断表是否存在
1 j' K8 G; o6 a" K7 n  create table if not exists students(……);9 L& I# y" t" _! f9 b
  3 o. k6 Z$ Z5 g/ L& x
  5、从已经有的表中复制表的结构+ g: p2 e$ A) h  b% h  p* ?
  create table table2 select * from table1 where 1<>1;
4 V4 u+ B# I* D! P; O9 f- j4 H& R  
& @9 x8 {7 }) z' m& C7 p  6、复制表! E) N2 h( C9 i1 g. L) x: \1 W
  create table table2 select * from table1;
. L6 u3 ?1 q# l( O# t6 k3 j  
% h% F; x) B  f/ v0 u  7、对表重新命名1 }( R2 \  u5 m6 |8 d) S
  alter table table1 rename as table2;
0 n7 f3 Y( I8 l+ T/ Y) R7 f. O  1 \1 f( M# }/ m
  8、修改列的类型
6 l' D4 Z6 S5 n2 \  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
) D2 G7 [+ N. J  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned& t' V! x' C5 g! G3 F( G, R
  , ^/ W. m) T. `4 a) Y
  9、创建索引
# e6 C  b( Z# T6 ?( ^9 v9 s( K  alter table table1 add index ind_id (id);
- @0 w5 x  V# O' z  create index ind_id on table1 (id);' S& Q1 [+ y8 B# g
  create unique index ind_id on table1 (id);//建立唯一性索引; _% `, R5 v6 I0 O6 |
  
3 c0 m# _$ j& Y5 ]/ }  10、删除索引* ]1 t- \8 B2 q
  drop index idx_id on table1;
; z3 g+ `4 l' `6 V' V* ?1 L! A  alter table table1 drop index ind_id;3 H& f" |7 W+ m+ c  G+ B0 y
  
' T  m; Z. G% C9 }; R  11、联合字符或者多个列(将列id与":"和列name和"="连接)
0 i* V! I# [$ }/ m9 a6 I  select concat(id,':',name,'=') from students;
. H$ T( v1 T% I* v, b  ( L8 s" \2 D) l. @/ U: v4 p0 U
  12、limit(选出10到20条)<第一个记录集的编号是0>
+ [9 V! Z: A. p3 t- y6 u  select * from students order by id limit 9,10;
1 v" J3 v, R. J$ K- g  0 L0 Z, {5 ]3 ~) N
  13、MySQL不支持的功能
( s, P, S. Q' |' S  事务,视图,外键和引用完整性,存储过程和触发器4 y9 i& V5 s+ b' C8 O! L  X# Z  L
  1 y' e  Z! X$ U
  * g* @, x5 t' a+ I9 t
  14、MySQL会使用索引的操作符号, n) d- M+ M" s& e; _$ l, s9 R
  <,<=,>=,>,=,between,in,不带%或者_开头的like
7 s/ g0 u8 X8 A. d4 h* V  
& J1 s; Y  A, o9 O$ }  15、使用索引的缺点
2 i0 l' z* w) z: j6 J+ g  1)减慢增删改数据的速度;8 h/ I7 ]& U9 K6 [0 T4 e
  2)占用磁盘空间;
. l" p9 x$ q' |# _' w0 \% l  3)增加查询优化器的负担;' I0 `0 R  R# J! [
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
! |: O. g- A! u; d$ k! z  
- j* G& w1 }7 W; B( K5 C7 ~2 x$ \  16、分析索引效率3 U) `; i: L/ L; L0 N
  方法:在一般的SQL语句前加上explain;
+ @1 p7 W0 k' S  分析结果的含义:
* \  d2 T" t2 b' h2 a* {5 j  1)table:表名;! U5 G/ n4 D8 s" l' e" c; `) D1 N
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
9 Q1 c- \( A5 r6 y. W  u  3)possible_keys:查询可以利用的索引名;6 r+ M" B, W$ V$ P& q* M, G
  4)key:实际使用的索引;0 l# ~7 L% l: k9 f8 I) e/ E) V3 w* J
  5)key_len:索引中被使用部分的长度(字节);  ~9 F0 p# L) M
  6)ref:显示列名字或者"const"(不明白什么意思);
' d; H7 e" w7 @  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;! }$ y1 q; E8 o( c% c- \
  8)extra:MySQL的建议;
1 H4 Y# h8 z- p- E2 K2 |  
  u8 {8 `2 a% D7 U  17、使用较短的定长列, j% P9 \; O  i( J% \0 f, K
  1)尽可能使用较短的数据类型;
( ~0 \6 G& O) R  2)尽可能使用定长数据类型;
" Q' P% r, p% K( }) f2 }  a)用char代替varchar,固定长度的数据处理比变长的快些;' W0 \6 {* V/ m7 O, e2 s
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;! Y. ~+ T- u. U& r) h/ p
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;. l: ]8 z0 h) S
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
+ J* Q" Q$ V0 H; n, F# K  & g2 `6 Y* E8 M0 g! N: m; d) c
  18、使用not null和enum
* q* M- R" @, h. B, |  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;# k. A6 q/ Y3 ?9 a
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;1 w( P7 c' t5 S3 Q8 n6 M8 ?. @/ e  W, {9 c
  " w# s1 Q% c, M+ P6 j% i
  19、使用optimize table
; m- N  M) [" t3 c  d+ a  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;1 b- ?6 _' @' S% t  v5 A
  
1 E( ^9 }- d' d# l0 L  20、使用procedure analyse()
1 ?- I7 q0 H" @; j  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:8 p5 P9 ]1 ]2 S: }$ p" S8 \' w9 p5 ^
  select * from students procedure analyse();' z7 o. [9 M/ `! B
  select * from students procedure analyse(16,256);8 A4 }: ]+ n) @( x. z7 C/ N
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( z! O  A& V* s% g4 l( g
  
" \" D  [! y$ c. ?& P  21、使用查询缓存; ]; q3 q/ w5 w
  1)查询缓存的工作方式:
  M& G( k* v. Z* l, g8 u  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
/ x4 g$ ~3 J) H# h4 P3 J' M$ H  2)配置缓存参数:4 T% a) g2 _1 |7 s* {" ?
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。5 ?4 s/ d- \2 q" L- ~" ]
  
; R& D* t; C" ?  22、调整硬件
" u9 N. G! K% R7 i: h% v# v  1)在机器上装更多的内存;4 N2 }4 a! v  o$ G/ `
  2)增加更快的硬盘以减少I/O等待时间;/ Z8 {1 ]) m" E* R0 e: x
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
, p, a" q2 c# m  3)在不同的物理硬盘设备上重新分配磁盘活动;) T/ {, U+ z- {
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
6 W3 N7 ~# `$ }% Z: y
回复

使用道具 举报

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

本版积分规则

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