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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;0 P4 D$ ]  T! I+ T4 J# e! F4 H2 M
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
8 {1 @2 t3 D- K; d& ^  列出数据库:show databases;
! s+ C  X9 f7 ?" f9 q" f# ?  选择数据库:use databaseName;
, I/ f0 q! Q2 @  列出表格:show tables;
/ T9 w2 b$ L7 S6 I7 \# x  显示表格列的属性:show columns from tableName;
  V* |  g3 w' ~9 @; |  建立数据库:source fileName.txt;
. o' C7 e0 ^6 ~/ o+ o! h% X: p1 P: x  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;& c: H) W" o: S+ Y6 j! e( I
  增加一个字段:alter table tabelName add column fieldName dateType;
9 U6 L. E# t% g# b% b* }  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;1 S3 O6 s6 _# T8 K, s8 I# _; F7 n! m; Y
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;# A$ D9 r+ z  `0 W: j$ C
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";2 ]- \+ I( I; D: o0 D. R( F
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;# |! _& n/ n, S% `4 E6 P% r
  查询时间:select now();
' D& I0 y& W* _, Z+ h  查询当前用户:select user();4 g- Z' h! e  [$ i! V2 t
  查询数据库版本:select version();1 u: K7 J/ P! n. J0 A, r; n- I
  查询当前使用的数据库:select database();
% ]# O; [+ b2 D4 H  / d8 w, ]' X6 s) V* q' V0 R
  1、删除student_course数据库中的students数据表:
7 Z* J- t' \; O- n  rm -f student_course/students.*
/ v# f. A6 z- K$ r  + }: h: ]  k; |4 F2 J* u" j
  2、备份数据库:(将数据库test备份)* @1 f, N' ?0 r! N! u
  mysqldump -u root -p test>c:\test.txt
8 ^8 n2 X/ k, f+ `% u3 s  备份表格:(备份test数据库下的mytable表格)
( C' S% _- t: {& }4 H  mysqldump -u root -p test mytable>c:\test.txt& {+ t- @# ~1 L+ c/ ^9 ?, Y- J
  将备份数据导入到数据库:(导回test数据库)( F" _6 ^( t/ g. A! N- P$ I
  mysql -u root -p test<c:\test.txt
: b1 o4 D5 c' T  " o' E- @; S4 V; H
  3、创建临时表:(建立临时表zengchao): h) S# G) O' a7 q
  create temporary table zengchao(name varchar(10));2 V  B7 v5 y# u& v1 t
  # N6 `2 t( X/ z# h' o2 h- R
  4、创建表是先判断表是否存在. H" ?4 j6 u9 C" ?! m, }
  create table if not exists students(……);) @' i! p, c6 ~8 t5 [4 u
  0 H) |/ R" X- L6 p8 \5 {! m0 p0 M
  5、从已经有的表中复制表的结构4 k2 y- d: d# e# m( o9 O$ w1 b
  create table table2 select * from table1 where 1<>1;7 Z. e6 P4 Q3 [0 I. V" D
  7 y$ Q# n! B7 Z1 B4 x3 }
  6、复制表
! S  V  R, ~  g2 J  create table table2 select * from table1;
/ c5 k! D' J5 u6 L  $ x9 i2 p9 E* i8 g# b/ t9 {$ [1 ]
  7、对表重新命名
" `, e& N& i9 l* J( Q' a  alter table table1 rename as table2;
& ?3 ]  l  }. @4 v1 [) d* b5 ]) `  V  
: r' K! E/ @, U& W  8、修改列的类型$ u% t( G5 o  g/ U: ~
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned' Q6 ^; z# l/ @5 r/ |) T
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
& ?; I, V; ?3 ]! R% G9 P4 ?4 U* v  4 Y0 `) {5 i$ L' b. T6 {' ?
  9、创建索引4 t  I3 l/ K4 _. t3 c
  alter table table1 add index ind_id (id);( a& G- f9 E$ y
  create index ind_id on table1 (id);% \& ~0 I  o5 g0 t" a
  create unique index ind_id on table1 (id);//建立唯一性索引, a/ m$ l, u" D1 T2 j
  & n/ U9 Y5 r% v) q
  10、删除索引. H$ N+ N& Z: e# Q; g
  drop index idx_id on table1;, b: L6 m6 L2 b+ h; F9 P) H
  alter table table1 drop index ind_id;6 X  h) W1 P' v* p3 Y: B. M( ?0 b
  
* w6 R& M+ i3 l2 @  11、联合字符或者多个列(将列id与":"和列name和"="连接)
( P0 W3 e4 Q3 b4 i, q, b  select concat(id,':',name,'=') from students;/ `3 N! |* v. \8 j( u$ Z. k" m2 \
  * G% M* x1 N/ ^/ h& d3 o
  12、limit(选出10到20条)<第一个记录集的编号是0>. u& s! S" D8 C1 ?, y; ]
  select * from students order by id limit 9,10;
1 h) I! _2 N1 V5 ]  8 H9 G: ]8 e) f0 p/ ^* T* K3 k9 d) e
  13、MySQL不支持的功能. m, E/ ?9 O3 m' X4 F' H
  事务,视图,外键和引用完整性,存储过程和触发器3 W7 b0 q1 W* H+ a. j) w( G  r
  ! Q' w% E  p/ N6 e  X* o- A
  
5 r! s0 d4 f5 a- w( V  y  14、MySQL会使用索引的操作符号
# O  a5 d# x1 t9 J" z  <,<=,>=,>,=,between,in,不带%或者_开头的like, i" m8 Q, Q5 a; j' w; D7 W3 `
  
/ [+ m% E9 c+ q8 \  15、使用索引的缺点/ `4 J* H; i4 T8 O4 O
  1)减慢增删改数据的速度;# w" {+ ?0 V+ w& f- Z
  2)占用磁盘空间;
1 j& f' Z( e/ n: k  3)增加查询优化器的负担;
" f4 E" i& u4 ]5 D4 _  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
# {7 ?$ X# Q# B7 ~  n  
9 F6 M0 e# _( Y  16、分析索引效率' a. A* U% y! i& R9 W7 B0 m" W
  方法:在一般的SQL语句前加上explain;
. a' w" v' X" C/ z  分析结果的含义:
  y+ q8 r6 Z) ^  1)table:表名;. I# c# c$ ?5 I/ b. x
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;& Q3 Y8 ~) R4 ~8 X; E9 s8 _
  3)possible_keys:查询可以利用的索引名;. _! a, u7 f4 S& u7 a7 Y+ s. }
  4)key:实际使用的索引;# j, _/ z0 R) u" v) C! D
  5)key_len:索引中被使用部分的长度(字节);
" J% \& U& A3 }$ r0 H% P- E, ]  6)ref:显示列名字或者"const"(不明白什么意思);
- d7 f6 b% l2 m8 }  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
( w2 ?; x  f" l  8)extra:MySQL的建议;0 j$ t( k6 N2 u' o! ~
  
9 N! {/ z! ~+ }( n& Y# K  17、使用较短的定长列
' }/ B; B# @0 _2 Z, q9 U2 i  1)尽可能使用较短的数据类型;
& e8 ~! c. V; [8 b/ ~  2)尽可能使用定长数据类型;0 J( d1 X' P, G& F7 Q
  a)用char代替varchar,固定长度的数据处理比变长的快些;
8 |' v" D: y! `8 W4 l3 ~  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
  k5 r  S4 v4 Y# P% |; k  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
  i3 l; X$ {5 V# ?! q  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;+ n6 `; N! i5 |1 l* d
  ! N8 [# _- G4 R6 |. @0 C+ X0 K
  18、使用not null和enum
% R0 p! E+ k7 T* {9 d  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;# l$ M8 }: T( g! W0 b0 _5 r5 Q7 J
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
! l. o$ W7 ?! W0 v  
! f# f! P. S/ n9 j+ n2 U; j  19、使用optimize table
. U. h4 e( T. @% |& k  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
9 v% U5 }. K3 `  : h; ?) _3 b2 _* _) M" M5 y, K
  20、使用procedure analyse()% k& f- E- J( j# a; V' D; _
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:/ @- w* W5 ]( S, K5 e2 n
  select * from students procedure analyse();
: Q8 \3 S( J" ^# P% W  select * from students procedure analyse(16,256);
, ]( O7 A* Q$ A$ S; e+ B  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;6 p9 F$ i8 G9 {
  & s* h( g, N+ }' o4 p' R# g
  21、使用查询缓存
3 Z# I0 W* V% e" [/ d! w9 D4 m0 E  1)查询缓存的工作方式:# D& C9 R7 _% M+ T/ ^2 E) Z
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。' i! C5 e2 D! v3 }  \
  2)配置缓存参数:# \/ g6 N3 P( y- n
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。( H' Y! T* z3 A; r4 D9 d3 F4 u$ h
  3 v7 x: m( g5 z' d# }
  22、调整硬件
8 @8 q2 ~: ]1 x* F% z6 i/ W! t  1)在机器上装更多的内存;
; m+ ~; W+ c+ Y1 G  2)增加更快的硬盘以减少I/O等待时间;6 k1 J. ]: H; f% T# \: D. X
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;: d. u) A  l3 f0 s9 c
  3)在不同的物理硬盘设备上重新分配磁盘活动;
; i% a. I" n2 V7 w  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。+ v8 \, C, g/ {& J5 p
回复

使用道具 举报

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

本版积分规则

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