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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;
+ U- a& G% X3 o* u% [0 `  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;7 u8 @4 U1 B1 v$ T- J  G
  列出数据库:show databases;: k! d( E" V( A5 G& R
  选择数据库:use databaseName;
- _- a6 N6 i( `9 q, P) k0 h/ I  列出表格:show tables;' y6 v" L/ I, h* t8 i4 c# @$ {# h
  显示表格列的属性:show columns from tableName;
2 t% ~6 I( E1 R/ P  建立数据库:source fileName.txt;. o  l, F$ j! U
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;  Y% B& [$ b) j; ?$ g. `6 R
  增加一个字段:alter table tabelName add column fieldName dateType;
3 ^; s) h" C9 j5 Q& x! J' t( W  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
& j, z% @( z. j0 W  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;. ~8 ^1 T9 d6 d& p" U' n
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
* V) n8 k# E3 b' l  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;4 B6 S, Z/ ^* ?
  查询时间:select now();: h% j0 Q8 J# _/ O5 \) y! }
  查询当前用户:select user();9 ^% m# S5 m% B' B4 t
  查询数据库版本:select version();
* [, d% I' J! A( {8 ~  查询当前使用的数据库:select database();, T- u4 S& v7 t! ?5 H* ]
  
( T" u) b' ~) u9 z+ o  n  1、删除student_course数据库中的students数据表:) O: m! c9 b& C( n  o7 O0 G
  rm -f student_course/students.*, F( S4 r( g3 [( k
  
1 k5 M* o$ }/ x8 q7 E* w; j  2、备份数据库:(将数据库test备份)
( y9 F1 y( m* K# J' V7 n1 C7 M  mysqldump -u root -p test>c:\test.txt7 P# Z; D' j# b
  备份表格:(备份test数据库下的mytable表格)
2 _( `# T6 I% M: R' \  mysqldump -u root -p test mytable>c:\test.txt
  w. B; U( C4 T0 \# C  将备份数据导入到数据库:(导回test数据库)
+ A8 O7 [( W. S- {7 S# U4 r  mysql -u root -p test<c:\test.txt
* t  |% O# @  l  V- Y2 m4 h  F. `  % x, O' }. J  U+ W
  3、创建临时表:(建立临时表zengchao)+ F7 |2 n0 s' U+ ]2 a6 H" @
  create temporary table zengchao(name varchar(10));6 \$ w6 _1 `. O  i  ~
  
+ Y7 O" N$ I) d/ f( A7 C0 o  4、创建表是先判断表是否存在
% T2 Z+ ~% u: f: q* k  create table if not exists students(……);
! t$ R% ^* G2 J5 r* u4 v+ r9 R) R  $ m. _$ J8 K# m4 T/ T5 }5 p' d
  5、从已经有的表中复制表的结构
1 C- M* U0 j" V$ x% ]  create table table2 select * from table1 where 1<>1;% e5 }# s) b7 t6 X3 l
  
1 k8 G3 N9 q8 b- C' a  6、复制表
% p0 ^1 A" @: V$ q( x2 z% S  create table table2 select * from table1;
% y' C: m% ~. y3 k* z. m. V  
: _% \( Z% T) n0 g4 ?0 K  7、对表重新命名
" x: ]: C6 a1 p7 R$ n- R& I  alter table table1 rename as table2;
/ M6 `1 j1 _* |/ h  
2 |8 \, t* }1 \2 V2 \  8、修改列的类型: H$ o# [  V: d
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
1 ~( h* x1 b! k" ^) T/ W. \  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
4 V- f2 z0 T3 N3 d' O  W, W) y. l" p& Y  
: ?( e3 N% ?4 r( S9 F  9、创建索引7 W; k/ e: C2 p- m7 V% P5 s4 p3 d
  alter table table1 add index ind_id (id);
4 ^4 P1 n& m( `4 {3 N1 G. V/ V  create index ind_id on table1 (id);6 L. \, Z$ C2 [9 T' ?
  create unique index ind_id on table1 (id);//建立唯一性索引
- Z6 T# d  f. F/ Z6 S" l  
( D! b6 T5 k; c; d7 T3 R  10、删除索引
2 @* Y3 b1 [, T$ |  s  drop index idx_id on table1;
) H# ?* E6 q2 O: \  alter table table1 drop index ind_id;7 ~) B5 @5 M/ o; f( N; h
  1 m# a' N# N7 f* @4 q: h9 t8 a5 w
  11、联合字符或者多个列(将列id与":"和列name和"="连接)- o) r0 @1 W; M& J* w8 b
  select concat(id,':',name,'=') from students;! B: s8 }  T" G: H( c  Y
  
+ B, d9 B5 I2 z$ ^  12、limit(选出10到20条)<第一个记录集的编号是0>
6 e6 w. z( L, \- K* I  select * from students order by id limit 9,10;0 P  L2 o. B3 s6 @- @) P+ a: ^
  
3 h8 J+ x* N% v# ]  13、MySQL不支持的功能
) `$ S, D! Z! L( f# S% w  事务,视图,外键和引用完整性,存储过程和触发器) `2 r( m: i$ k. Z; @0 V1 ]9 c2 _
  
( J7 ^) ?' a) M  0 H; G. [) g3 I& e# D5 S. w2 E' p
  14、MySQL会使用索引的操作符号* F( Z) {8 p& D0 P
  <,<=,>=,>,=,between,in,不带%或者_开头的like. V! \  Z/ g4 Y" e7 S, U
  - C# u# O* S- i
  15、使用索引的缺点
  k8 V! [& |" {) M  1)减慢增删改数据的速度;/ i7 v! }7 Z$ O( K0 Q
  2)占用磁盘空间;
- f% u# C8 H3 ?: |0 n) A+ q1 k  3)增加查询优化器的负担;6 y. H( W( W- H
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
" G# o+ n* r% T. M9 J8 _- }  
4 R) M; p. g' H  g$ F" o3 \3 E  16、分析索引效率/ [- z+ m* A: h" q
  方法:在一般的SQL语句前加上explain;7 S9 y% h/ @, M/ a
  分析结果的含义:
6 p; c) d2 |* c9 P2 y% }6 U  1)table:表名;
+ Z/ ?" L$ X3 y4 i% r3 t: N3 ]9 c% Z  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;4 j! z( A, W& ?' w( C
  3)possible_keys:查询可以利用的索引名;: a7 R, L8 {9 \" j9 N
  4)key:实际使用的索引;
% B& I  g- f& J/ {* U. a' Y  5)key_len:索引中被使用部分的长度(字节);
) Z. Q- ^1 z6 P0 |/ c* m4 N2 O  6)ref:显示列名字或者"const"(不明白什么意思);* ~! }. l+ d! [' ^( A# V8 Q
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;& p1 w% P: A) E3 n, C
  8)extra:MySQL的建议;: d- }$ N* m5 [
    c/ z& _" H# i6 i$ \% q( p9 _' X
  17、使用较短的定长列6 R6 J' b5 i: r6 d
  1)尽可能使用较短的数据类型;1 @9 Z! t/ ^4 D. U7 \; J, k
  2)尽可能使用定长数据类型;% P  n  U9 |! H, T6 V9 y
  a)用char代替varchar,固定长度的数据处理比变长的快些;
% k) L! h6 h$ G; B/ S; l  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;, q  E8 P/ c7 V6 W) ?
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;4 v6 D  R( P! @5 D" }
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
( n: p* ~0 z2 }: h+ H5 u+ Y/ b/ J  2 O4 t/ o8 J0 K
  18、使用not null和enum
9 _; K) e" v5 O# H* v  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! l3 Z. ^. g8 j9 G& M7 V+ L  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;/ g. ?, R+ X; o! A
  
3 ]: W2 p. b, e; G  19、使用optimize table! n# q0 d) Y  U' {2 x. r
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
. V+ Q+ Q. z+ R' w  ( R+ c" i  a4 V+ |. Q( t9 M
  20、使用procedure analyse()& V6 n; ?; ]8 U- P% l
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
+ H# b" E% u! j  select * from students procedure analyse();
4 Y% O$ N  H0 ~2 O0 U3 U" W4 |% c  select * from students procedure analyse(16,256);
9 L. [& u" p& C6 P- ^" D. p; Y  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
! b, z" U4 S% r4 @  3 a( T4 E- J6 q( [7 H% z) p
  21、使用查询缓存3 o, Q5 \7 q& ?$ H; B6 e
  1)查询缓存的工作方式:
: M6 E) x9 C3 ?: J" r' O3 w- O' G  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。+ H$ g) H" |- Z
  2)配置缓存参数:; O0 Z& I# r3 {8 n2 H) V7 C: j* ]
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。4 g+ j$ C* ^) v
  
/ S2 {  @6 p9 r' i( P/ G% d  22、调整硬件
( n9 n/ k) X, D4 B: H' B" Y' W% V  1)在机器上装更多的内存;+ Q" g, D0 t( d# J: Q0 b+ H
  2)增加更快的硬盘以减少I/O等待时间;  w8 J/ ?2 z6 o" J% ^' l( d% x
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;  A& r5 q: }* M6 k( j* b2 L4 V9 n
  3)在不同的物理硬盘设备上重新分配磁盘活动;
& Y, M& X$ x! i/ E: J. x0 ]' x9 l  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
) _6 Y4 m" Z# D* `
回复

使用道具 举报

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

本版积分规则

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