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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;3 `5 D6 P2 S) {+ R
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
7 i% r. I3 Q$ u3 N! a/ r! |  列出数据库:show databases;
1 n% A6 A" k) |& m5 A3 p  选择数据库:use databaseName;& b" ~+ I1 C8 z2 f0 N# R0 ~
  列出表格:show tables;% F# m0 |, v8 M* T
  显示表格列的属性:show columns from tableName;, P9 f1 r% o% D  G
  建立数据库:source fileName.txt;
: f2 i( j' u2 a; \$ G0 }. D) ?% k  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;; Q+ y8 z5 K: t0 ~
  增加一个字段:alter table tabelName add column fieldName dateType;& s7 ]' w& c) P! X! r8 y
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
7 b! ^+ T( o0 T1 ]  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
  V  m; J; \6 B  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
/ b, `3 ~' U6 ~( d0 w! W9 M  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
' E" B- C1 C! o% ~  O, e7 _  查询时间:select now();
0 n$ D4 {  \' c& _% E  查询当前用户:select user();* ~- T* p* U8 c1 }
  查询数据库版本:select version();
/ b2 ?, X# w" s8 c4 e. v  查询当前使用的数据库:select database();: e4 Q. X  A! N- S: o, z! e# c
  
' D: U0 o' \, Q+ g  1、删除student_course数据库中的students数据表:: n/ d  \$ k+ L3 N4 d( c' x
  rm -f student_course/students.*
* z! t; V: J9 B9 U1 M; P  s( {% w  
' f2 A, X. |, v  2、备份数据库:(将数据库test备份)
1 Z6 _. m( I7 y0 o- f1 I, U* ~  mysqldump -u root -p test>c:\test.txt
2 L: k) W4 n# v) D. k2 {5 m  备份表格:(备份test数据库下的mytable表格)3 l1 _6 }* |. h# z" v5 e9 H
  mysqldump -u root -p test mytable>c:\test.txt6 N% p6 o/ K! l/ z/ X7 l+ k8 \
  将备份数据导入到数据库:(导回test数据库)
8 x3 |4 t* ~$ Y3 C  mysql -u root -p test<c:\test.txt
  l' S  M8 o1 P) z6 ^+ I, Z5 y# y8 Z$ D  ) O: c5 _) ?% @$ `5 h) _: u! G
  3、创建临时表:(建立临时表zengchao)/ t- m' i# q0 }4 M' p9 D
  create temporary table zengchao(name varchar(10));# u. L" b( i0 i& _
  1 U2 j8 [& n" l% Q! z
  4、创建表是先判断表是否存在2 ^9 ?; B: z6 K  O% a5 M
  create table if not exists students(……);+ Y, D& [5 H9 T; a+ W* @- i
  9 v6 B% ?' p% j; a  G
  5、从已经有的表中复制表的结构" j0 J9 d  \! l9 t5 ], o
  create table table2 select * from table1 where 1<>1;; V" r( J1 D8 H+ q/ u( S
  8 n3 k5 H8 h: J! R' ^* c9 f
  6、复制表
: k' R( [( h5 Q  k" s/ i4 E' ^  create table table2 select * from table1;
1 M" K' l5 K, k( p  
+ [* ~7 v% T8 b  e# c3 b- j  7、对表重新命名
0 e$ P. l( x2 @' t  alter table table1 rename as table2;
& }# r. ?) [- ^: z0 g' |  " z# \8 H1 V! J4 w* q
  8、修改列的类型
$ q8 R! e! o$ i3 k8 k  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned$ ]1 F% [+ Y. Q& I; T. v# C
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned" Z! o% m; G/ |
  
# p: f- d4 m4 H* u3 H+ I  9、创建索引. \' r' z) P7 g& ~
  alter table table1 add index ind_id (id);3 _9 N$ _2 V) a
  create index ind_id on table1 (id);
8 [' z7 z; L6 v$ D( J( L  create unique index ind_id on table1 (id);//建立唯一性索引0 r4 A. V% D# l! x
  
) M3 x. v5 a4 L4 ~  10、删除索引+ O! b! |4 e" o3 j9 o  N1 z) _
  drop index idx_id on table1;
5 U; o7 d( o! {5 O) G$ ^6 c  alter table table1 drop index ind_id;; f3 \! ?0 Z4 W% |! |
  # S6 y( g3 O4 p; _4 L
  11、联合字符或者多个列(将列id与":"和列name和"="连接)7 Z# P. W6 a8 I  T
  select concat(id,':',name,'=') from students;! I" d6 Y9 [1 K
  
% u: I+ r) c9 n* I  12、limit(选出10到20条)<第一个记录集的编号是0>
& J- K- X4 w+ p. D8 z  select * from students order by id limit 9,10;! F1 p' S% Q+ Y( Y
  
' S3 ]6 ]: F: e+ q1 N4 v" X% [- s$ a  13、MySQL不支持的功能
1 m. j3 T; C! A* N2 ~, b/ j  事务,视图,外键和引用完整性,存储过程和触发器
- `6 S. j" w0 f& K  
! A+ z. p6 P5 \; N7 x- O8 Z) K  * K; p. T0 Q' c5 t: s
  14、MySQL会使用索引的操作符号
* |4 Q: H! j  ]% ^6 {) H  <,<=,>=,>,=,between,in,不带%或者_开头的like
4 k0 [$ L. z! s  
/ h8 v- n' a5 r: G( h  15、使用索引的缺点& P3 ^% l; y5 p
  1)减慢增删改数据的速度;
& T9 t! \; A$ ^# I  2)占用磁盘空间;
. U+ M$ ]6 `2 N8 k0 J  3)增加查询优化器的负担;
( `$ O6 p+ l7 \6 d) y1 K  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
; t) t2 R7 `" i! @0 Y" L+ L! Q  7 c. t/ _) q7 ^' S
  16、分析索引效率5 R8 {1 Q( Q& |0 B- R. ]+ l& M7 x
  方法:在一般的SQL语句前加上explain;8 m0 S, r- Y' h0 e+ T
  分析结果的含义:
5 i$ c* S/ D3 b, A1 {3 m8 w" n# [, D( m5 L  1)table:表名;
6 {" U$ v$ {7 J6 R" d) c+ m  W" x  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
2 C; c! S$ a3 ?# o3 O* y' j: R% e  3)possible_keys:查询可以利用的索引名;1 a/ E% w1 q; X0 ~; o. K: v% z+ H6 n# Y
  4)key:实际使用的索引;" `4 w8 W. ~  n# \% X
  5)key_len:索引中被使用部分的长度(字节);! W: g$ N/ @4 G6 j1 T# _8 z
  6)ref:显示列名字或者"const"(不明白什么意思);; L+ u: n: |( n$ _/ s6 M) s6 M
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;. s& Y5 |! Q% S0 d$ x; r
  8)extra:MySQL的建议;
& J, p* x' z) k0 d: z+ V    u0 k$ M0 e0 e+ {+ ]% y
  17、使用较短的定长列
: W9 t; V$ o9 k. ~' F1 C  1)尽可能使用较短的数据类型;
5 J8 U* q5 }* ?/ z; |2 s9 [' T( O  2)尽可能使用定长数据类型;. w/ u* I" X- _3 d+ n4 k, k
  a)用char代替varchar,固定长度的数据处理比变长的快些;
# K4 T' L5 @7 p9 r$ p: Q6 }  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;& ?: J' Q0 p6 e# V' e
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
- }; [0 C4 t+ z( b- q  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;$ a+ u+ p5 F# m3 i- B- q) W
  
8 W$ \2 Z. ~  [- C, L  18、使用not null和enum  ?& v9 t6 l0 b0 y: ]- J
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
( n$ V0 k( d, A1 ~1 X% i3 ^  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
* G! ^: H8 T( w, W: p7 q8 N" v6 I  
! M1 g. z( n+ f" ]& b0 o( n; a5 z  19、使用optimize table+ T  L) I# w5 w1 j  \; U" n
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;7 r' o( w+ w! i* d: W# M. x6 N( G  M
  ! g( H" w, h) k  W
  20、使用procedure analyse()4 C$ l7 F7 f+ c& }
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
( P* U1 q5 \6 q  C' T* E. [  select * from students procedure analyse();
, B" b: M1 o4 x; w  select * from students procedure analyse(16,256);
3 S3 Q: }% j) G" ^7 c  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
9 k: c5 Y: R4 _' j) S$ i  
% m1 d, b: t6 r# @& W+ C' X- P  21、使用查询缓存
: U- g( Y* w6 d! F; V- z  1)查询缓存的工作方式:
3 S! w9 E& d% Q. U3 A) Z  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。3 g/ Q# b' {) m0 Z* m
  2)配置缓存参数:
# {- U4 F+ b, E  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。- S9 p2 q7 r1 R5 \/ \3 T+ g/ {
  
4 `* V7 D1 `' F  22、调整硬件
# f4 h) a& ^& A1 B' Q! l9 y- |5 {7 Y, q7 Q  1)在机器上装更多的内存;
# P3 F7 H% l* ]  2)增加更快的硬盘以减少I/O等待时间;0 q. z" l, K" U- ~6 u
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;. g8 H7 U! ]* G4 Y. M: |
  3)在不同的物理硬盘设备上重新分配磁盘活动;& F) z& a6 G( S
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
2 T9 K9 `& e- s
回复

使用道具 举报

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

本版积分规则

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