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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
. d" u# O1 g0 r8 m: c) Z' b$ @  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;. U( ^/ g. \( \4 M3 C: R. |
  列出数据库:show databases;
. _3 v5 a+ c5 c$ J- d  选择数据库:use databaseName;
$ B! j5 X& o6 t  列出表格:show tables;9 {& J, ?2 w0 j$ a1 A3 N* K
  显示表格列的属性:show columns from tableName;0 w5 R& y. V5 p8 ]8 C! }
  建立数据库:source fileName.txt;
8 m# ^# C  }9 B  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;, p' U9 E2 q' ]( N3 _7 `- n* D2 q: v$ [
  增加一个字段:alter table tabelName add column fieldName dateType;
) @# z# q& j" x, ?  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
) C5 M; Q( F3 ~# u. B  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
5 U2 q/ J* U3 V& T. Y/ E$ t; k' L  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
3 j9 ?( P2 C' q8 f1 E" w  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
! l$ m1 d6 O4 N2 ?* c  查询时间:select now();0 @' J2 \  q" H" y. ]: A& o
  查询当前用户:select user();0 {- S' ], r/ ^( g/ }7 t: g
  查询数据库版本:select version();
0 m3 E' Q( T; q0 |  查询当前使用的数据库:select database();
  T# ^% F" W1 q9 V! d0 K3 {: C  
9 u" s( z6 v1 L  1、删除student_course数据库中的students数据表:
9 Y! ~6 c7 t" R3 h' [  rm -f student_course/students.*: _) Z+ ^; s% r
  
+ Y( ~7 F7 B9 e8 Z( _# o0 c0 g  2、备份数据库:(将数据库test备份); |9 _% y  K: q3 e
  mysqldump -u root -p test>c:\test.txt
! ^8 o0 X& j0 ~  备份表格:(备份test数据库下的mytable表格); B7 |  M) C( B$ ^/ j
  mysqldump -u root -p test mytable>c:\test.txt0 }- {# y) P3 V! I. _  f) n5 L1 K* L
  将备份数据导入到数据库:(导回test数据库)
. m& s8 [3 @. U- f8 v% H  mysql -u root -p test<c:\test.txt' L! k& `& H' H/ ]$ {" a6 L
  
* M  G$ x) I$ F8 Z# `, T  3、创建临时表:(建立临时表zengchao)
1 b0 M. f% ]& L( d/ A, I  create temporary table zengchao(name varchar(10));
+ o7 `0 s$ U5 c8 c; p6 e  0 [1 y: ^" o" c  y$ K
  4、创建表是先判断表是否存在
. ?# X( G/ w  J& M5 i! V$ W4 E# k  create table if not exists students(……);
0 z' @7 `4 ~$ O2 D) T. a. E. `  ' C) {# f6 y. w8 Q- E, V
  5、从已经有的表中复制表的结构* D! M1 G; v) u1 q/ u
  create table table2 select * from table1 where 1<>1;! G6 ^% e9 _' r6 S( l/ E% U. e
  
) z, ]! ~" K  f* f' ]$ h6 r  s  6、复制表  P2 D; l7 c" ~% I3 k3 ?
  create table table2 select * from table1;' B7 N* e) p" u# f/ e4 \- E; \
  
1 f  R6 H* F. X3 {) q8 B3 Y  7、对表重新命名
- X; G5 c8 J; Y  alter table table1 rename as table2;5 I3 I$ \  @7 G3 R
  $ h0 V. `* s( h$ h' `! [7 ~. r% r
  8、修改列的类型
2 b, u. x8 X; O1 ~* J" W  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned0 p) U0 s( |, U# Y1 \7 k3 {
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
7 `0 x* x/ c9 j! ]) R  
+ U% b+ h5 g4 I  9、创建索引
* Z  y' b! C) B3 R9 d& a* B; b  alter table table1 add index ind_id (id);
: b& I) R# L6 @* Q' Q8 n; ?$ c7 _  create index ind_id on table1 (id);/ B5 Z1 S2 K2 {
  create unique index ind_id on table1 (id);//建立唯一性索引( b/ h, x% U' R. W$ d0 L& U
  ; ?- i) O/ ?5 e3 @) \5 _
  10、删除索引4 d' t8 X$ x# b
  drop index idx_id on table1;
7 T% d1 B. ~) D2 @7 c# U9 [5 a: J  alter table table1 drop index ind_id;, E6 d3 Z) h. p/ \8 T
  1 c; w0 Q! q7 I1 D
  11、联合字符或者多个列(将列id与":"和列name和"="连接)7 a2 E. N$ V2 i3 r: w) K4 N
  select concat(id,':',name,'=') from students;
; O: @2 L$ [8 t+ k4 c  + ?% y: d$ @6 l7 ]1 [9 s; }
  12、limit(选出10到20条)<第一个记录集的编号是0># v# v5 p* Z( d" B" V6 B
  select * from students order by id limit 9,10;! w3 [- u1 F6 ~
  
6 y. x* |- d6 I7 J) O. S  13、MySQL不支持的功能) o1 h  Y/ h, w4 o2 W
  事务,视图,外键和引用完整性,存储过程和触发器
3 j% g/ S0 F7 b1 F9 p) b  
8 K( e- K  e1 L- i9 H# B) V  
% l7 b8 N3 H" l! O6 }/ j( t  14、MySQL会使用索引的操作符号5 a& c3 N8 M* e
  <,<=,>=,>,=,between,in,不带%或者_开头的like3 _% S/ \% g) U0 \4 N$ Q( t6 n6 _- m
  
, I1 e+ L2 L9 k7 `  15、使用索引的缺点
1 x, M- Z5 }4 b, T- I$ P6 T; t$ g; B  1)减慢增删改数据的速度;
# }8 V: x/ Q( X% |3 z  2)占用磁盘空间;
) A  Q0 f8 @& H& V" j0 T) Y  3)增加查询优化器的负担;5 V; r& V5 L6 X& v8 ?4 ^$ R& ?
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;2 i4 k0 A& Z5 g: a6 T, O/ f5 L5 e/ v
  
! `$ m; ~/ w( L6 z( s% u3 w0 H  H  16、分析索引效率
4 R6 ~, D% N+ M( B; t. C  方法:在一般的SQL语句前加上explain;6 `1 o! Z7 T( n' y+ ]8 l3 T
  分析结果的含义:
9 h! ]+ j# E7 U# Y; j" h2 B  1)table:表名;# L* E3 S- I9 y' t4 }* N
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;* j1 p1 q4 `- W+ i% R+ g2 E, Q
  3)possible_keys:查询可以利用的索引名;
- i8 S% ?1 Z8 |; d9 H, Q  4)key:实际使用的索引;- D. v2 e9 a$ L  ~) f# @8 j) R8 ?
  5)key_len:索引中被使用部分的长度(字节);, K5 n5 y% Y% _( v. r  n1 @. A
  6)ref:显示列名字或者"const"(不明白什么意思);
: O) W4 j7 ]" h: n2 L2 ~1 h  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;4 ^3 n5 ?  o8 o! Y6 S6 X/ P
  8)extra:MySQL的建议;
$ x' c8 Z& O( Y, b3 z$ ?  ' ^& @6 g% N) T' }% n# V
  17、使用较短的定长列# Z* G8 G. d* Q5 o& X
  1)尽可能使用较短的数据类型;* X3 o: I4 j, |$ `  `
  2)尽可能使用定长数据类型;
7 y" v" P  `. r( I& M5 v. ^  a)用char代替varchar,固定长度的数据处理比变长的快些;
$ d6 Z  n: k3 Q" I! J  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;$ x1 h! P/ m. Y$ L5 p, h
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;) u# P" C9 y. O$ |: i
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
+ @2 x: {8 m  L" x  
1 m  T# @  l8 n+ P) X  18、使用not null和enum. t3 C. P2 R9 M6 ]! o0 i
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
4 M& p' w9 k% n1 N: B, k8 S& F8 M' K; G  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;: t8 P' W) u9 W. s% P: z
  5 E# V" }) `) Q
  19、使用optimize table
* p8 ]7 b% W6 D8 K4 H  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;2 N2 E; X7 ~7 A  y3 l
  
! j! ]6 N2 \8 u# z3 L6 Y1 U: g  20、使用procedure analyse()5 j" j; F* d. R, \
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
0 o% t; a" }8 @3 [5 `: `  select * from students procedure analyse();0 v1 c% u8 H: F: m/ ~5 j
  select * from students procedure analyse(16,256);
$ r7 L- @2 g  {! _: G" E, B  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
; k6 W; a8 ~6 Y6 ^1 U6 ^" g4 d* X  3 O! |" m9 {* f5 i& r/ M8 B6 X7 [
  21、使用查询缓存
; D9 p0 f8 {( H2 R0 Z6 M- X0 Y6 m  1)查询缓存的工作方式:4 n, w. _' J" {6 @* j4 m) \
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
/ h0 G+ {  [7 U* L  |6 `  2)配置缓存参数:0 P: Q7 c) C: f4 D" G2 x* _) P! B
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
: g; m* V/ _- g* s8 I$ h& B  
2 S+ m% q" @: z. F- p4 R0 y  22、调整硬件: p, ?4 n4 H8 N
  1)在机器上装更多的内存;
* _& M; _0 n% s9 M! ^, t  2)增加更快的硬盘以减少I/O等待时间;
6 F: ^# b8 S& n& @9 W6 ^7 I  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;: _  P! A7 ]7 r: r# y$ U
  3)在不同的物理硬盘设备上重新分配磁盘活动;: w$ L7 c; P8 t3 V
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。. W/ p% n5 t; q8 H! p2 o4 e
回复

使用道具 举报

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

本版积分规则

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