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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
; X+ ?) n. _  \5 w; j  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! u" }3 T; s' y  列出数据库:show databases;
" }, `. B' l: K  选择数据库:use databaseName;
* q# x5 H% c6 [/ L& {  列出表格:show tables;
( V0 K. S+ y9 _$ s0 B5 T2 L  显示表格列的属性:show columns from tableName;5 o; ^; P$ r3 I4 Q9 ~4 V
  建立数据库:source fileName.txt;  f, G. A& z( l. @, t) C
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
3 ?, O7 f0 L( x0 {  增加一个字段:alter table tabelName add column fieldName dateType;
+ V6 F. c# |6 D5 I  X3 i  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;* u/ o5 }; U, W1 E
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;+ W# @/ n0 B# H: N. c; {
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
6 T( E* h' _* J# h  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
# d+ [9 |" a5 R! }( S2 ]1 X  查询时间:select now();* L. S, q1 s) b1 V0 E, d
  查询当前用户:select user();
: I- i0 ?8 x' n' ^7 d$ l0 R  查询数据库版本:select version();
2 L2 L8 a# v/ \  查询当前使用的数据库:select database();
( l8 w6 y1 S" M' \  
  S* a! x* |# H/ ^  1、删除student_course数据库中的students数据表:
" W- q, [! q5 v. r6 g; `  rm -f student_course/students.*8 {! ]" W# _* A7 B. _* H
  
$ \& _2 R9 p8 {% [4 n0 E  2、备份数据库:(将数据库test备份)
$ m/ T2 c% N6 l0 k  mysqldump -u root -p test>c:\test.txt. G. g& r& p6 ?% V; `/ Z2 M
  备份表格:(备份test数据库下的mytable表格); p) O" P( B2 b6 w  D; e* k7 f
  mysqldump -u root -p test mytable>c:\test.txt; [) ]* k% _) I) U; E
  将备份数据导入到数据库:(导回test数据库)0 \: C( q3 Q, z
  mysql -u root -p test<c:\test.txt
) O; F: |4 X; f, i, I7 P( x9 V3 ]  
6 d, _4 ]+ x7 h; z& D  Z  Z! E6 u  3、创建临时表:(建立临时表zengchao)
3 D+ `' h  S+ m" a  create temporary table zengchao(name varchar(10));  A7 ~, ]8 I0 c
  ; m  I0 P% B. K/ k
  4、创建表是先判断表是否存在( [5 j0 w5 a# x! k$ C
  create table if not exists students(……);$ t* E1 h. _2 `' t5 l3 |' t" h
  + c4 X1 s- l. c9 @8 K' a
  5、从已经有的表中复制表的结构6 ^: O$ B/ B' j" k& w& S
  create table table2 select * from table1 where 1<>1;
3 q4 J8 q& X# f3 t& d7 H+ N  5 {" q- i( J" `; F! q( \
  6、复制表
8 b, ~: s0 a6 F3 q9 s; d/ N  create table table2 select * from table1;
1 c! Q  C0 U; Q. S* U6 g4 S' \  9 `1 w7 ~5 Y4 N8 [
  7、对表重新命名) M$ @+ U  `  d
  alter table table1 rename as table2;
" Q  ~) h) Z6 U( _% j  
% X- Y3 Z: _: S7 f  8、修改列的类型# V$ d8 p/ x; \$ h( D
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned/ D' \/ S, \0 A/ |- L$ X
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
8 b( M7 S9 q0 e& b  $ I5 c/ Q7 I7 h; E$ j+ K% Y( |
  9、创建索引
, Q; t4 R2 c3 V# L9 P5 o  alter table table1 add index ind_id (id);
9 t7 X9 Z9 c! Q9 G) R. W2 T7 ~  create index ind_id on table1 (id);5 W* ^' e2 `  H+ }* l5 J7 P
  create unique index ind_id on table1 (id);//建立唯一性索引- q) {9 k/ p7 k6 P
  ' j" g' v9 `( |. q
  10、删除索引# ]. R: A, b+ T- J: ^0 p
  drop index idx_id on table1;) _% B) V8 f8 W& y& B
  alter table table1 drop index ind_id;" `$ R1 `0 D/ {- K& k- V
  ) h/ O4 y+ f* I* T3 k
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
/ v8 c7 D# n3 O5 t& O+ \, A5 w% u  select concat(id,':',name,'=') from students;4 x( ?/ p# m, j" \+ j
  ( k5 ~& n$ }/ n/ V2 Q, o+ R! A
  12、limit(选出10到20条)<第一个记录集的编号是0>3 G" M4 ~' H) j4 Q7 D
  select * from students order by id limit 9,10;
8 B2 z0 H8 }; e( T  ' [: w6 m4 A! z% A
  13、MySQL不支持的功能
# C1 V( e* t) t0 c  事务,视图,外键和引用完整性,存储过程和触发器
, N1 r- l  M( o  
8 T( O2 t% n  {  m/ B  t5 X  
( w2 `  d5 q' p4 E" I  L9 S  14、MySQL会使用索引的操作符号) p4 a" H& L! ]
  <,<=,>=,>,=,between,in,不带%或者_开头的like
9 i6 M2 P" Y7 o# x  O  / z+ ?" c! a7 X( s7 q& c# O2 r
  15、使用索引的缺点
2 b1 ]0 p) O$ Z8 L! O6 s+ T  1)减慢增删改数据的速度;" M$ \" t, R5 |: N
  2)占用磁盘空间;8 T5 D# P& j3 \" Y
  3)增加查询优化器的负担;
' k5 Q6 |2 i0 z3 o  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
. E# `) C5 t: @* B7 l/ w+ z, D, t* Y0 l  
! a+ O# i4 e6 J4 L- H( M$ \  16、分析索引效率
# {  K1 J) J0 y+ s+ `0 I  方法:在一般的SQL语句前加上explain;
: u6 w8 W/ ^5 x( C3 C+ F  分析结果的含义:& p1 A+ J7 T( _: q! j2 Y+ O
  1)table:表名;
3 e, q' G2 c9 O# f: Z! m% ^) R0 s+ T  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
9 g& S. Q* p) `! ^5 [  3)possible_keys:查询可以利用的索引名;
4 E! Q3 M$ N  t& j: m5 ~# k2 k  4)key:实际使用的索引;* X. ^: s2 V! z5 h1 C1 M- \, g
  5)key_len:索引中被使用部分的长度(字节);
# A3 u8 Q6 Q, T, o9 `  6)ref:显示列名字或者"const"(不明白什么意思);
- N4 Y6 b1 J, f! g4 n  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;# \0 t3 @: A$ s, A
  8)extra:MySQL的建议;1 o7 i, b* n/ q9 j0 A6 V& E+ g
  ; p; l5 m* W3 g
  17、使用较短的定长列
$ b0 I! y- e5 R  1)尽可能使用较短的数据类型;& q# s5 K4 N. r" n) t
  2)尽可能使用定长数据类型;3 b; R+ T: |  e
  a)用char代替varchar,固定长度的数据处理比变长的快些;, Z+ q( y$ G. @. x
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* @& [, B$ h2 h9 Q  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
2 B% t3 ?; G1 v$ u) ^% J  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
; n  y4 K# z5 M$ g+ t2 v  
: f( ]# f. \: G3 {6 ?* q- B  18、使用not null和enum$ G/ X5 t' S! F8 J0 Z/ _
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
3 w% h$ G9 d1 {1 c  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;0 f$ b) D& P1 m: E( N! ]9 s, q$ `
  # A& i& P" _# o! A% R
  19、使用optimize table1 K: q+ ^* `! _0 u7 u2 i5 J
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;. _7 k% g& T5 L6 t; h8 w7 A
  
0 d: L9 j! @: _/ x% M  20、使用procedure analyse()
0 r" Q- s* r2 {+ T1 e: J' y  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
( _& e! Y* B/ i. K3 ~/ Z$ Y! n  select * from students procedure analyse();
& O& C3 i  O* ?6 L0 s5 D  select * from students procedure analyse(16,256);& ~, ^: `& s, T/ k, f
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;1 f& [5 v! D: m( T+ Z
  
; o) q4 a$ @" E( D6 V+ I( ~8 a  21、使用查询缓存- n4 ~) i" C: {2 R- _
  1)查询缓存的工作方式:
& J/ a- t" Q% k4 j7 B& J  K. {  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
' Y  f2 v+ q" B# W  2)配置缓存参数:
; A" B+ |6 T- o$ w. V$ |; ^  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。$ g$ n. ^* Q5 w6 }1 s* ~- K
  + w. W9 S( A$ U1 e/ w
  22、调整硬件
) u! v9 a0 Y$ K; J1 y4 B) s6 Z1 Q  1)在机器上装更多的内存;9 d) ~+ u( w$ ]0 H+ D. M, j
  2)增加更快的硬盘以减少I/O等待时间;% j- `' }* u% f
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
/ m1 ?' _& K2 H! v  3)在不同的物理硬盘设备上重新分配磁盘活动;2 |/ q( V$ y4 M3 {7 U. N
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& z. E: h. \8 |5 F. s
回复

使用道具 举报

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

本版积分规则

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