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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;8 K) f6 P* ?; {
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;  O' E+ [! _7 y+ u4 n: [* P4 m
  列出数据库:show databases;
. j: [5 @8 S1 `  选择数据库:use databaseName;
# h) o* o- D6 g: z5 g  列出表格:show tables;
' l6 [7 v4 ~/ F0 m; D  显示表格列的属性:show columns from tableName;
5 b" @: B7 }3 _( U2 u  建立数据库:source fileName.txt;
& H8 L$ T) t: l+ Y8 G  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;- n% d+ U, Y1 i$ o. V
  增加一个字段:alter table tabelName add column fieldName dateType;
: x" n. t3 ^( S5 g, ^  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;9 C" @2 U- s9 i" o2 l% B' Z
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;$ Q) H6 e2 I1 i, ^
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
' d+ f. S, C+ {9 o- e% F& N  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;+ j  q  `  L+ ~2 Q6 z( B. ^
  查询时间:select now();& w3 u6 d+ G/ N1 u
  查询当前用户:select user();4 Y- k3 |  I% c" u% E$ z# P
  查询数据库版本:select version();, D( p$ n$ J0 K+ x  [% c* @
  查询当前使用的数据库:select database();
! e9 K0 z5 `9 Q+ [, }9 `  
; m; T3 W% [4 ?! _  1、删除student_course数据库中的students数据表:
& T' a& c( Y2 k- l) C  rm -f student_course/students.*
& Z: J* w5 H& h* d  
2 N8 ^" A" ]' F5 a/ C1 H" |  2、备份数据库:(将数据库test备份)
- ~5 H$ C/ k" B4 D  c  mysqldump -u root -p test>c:\test.txt
- p' q. M# K1 t1 a/ }) [  备份表格:(备份test数据库下的mytable表格)
3 b3 Y; e$ n! V; _( l! G  mysqldump -u root -p test mytable>c:\test.txt
/ A/ ~2 Y5 I7 i+ u! b1 A% D/ a2 o$ O/ w, y  将备份数据导入到数据库:(导回test数据库)
0 A1 C, q7 c9 O) d: ~3 Q/ c: O  mysql -u root -p test<c:\test.txt0 o- V9 w6 k8 @* i( Z+ i5 D4 B
  
, _4 h" [* D4 u  3、创建临时表:(建立临时表zengchao)
1 p$ D2 c7 k6 W2 g: ~: U4 Z  create temporary table zengchao(name varchar(10));
- w3 j/ R7 u1 D; k  
2 U$ N1 S3 V8 l8 d' o  4、创建表是先判断表是否存在
. l' O2 V6 W6 B  create table if not exists students(……);6 u: o9 q5 i4 [2 U" R( g
  
- q: o6 Q7 a, h, Y' P  5、从已经有的表中复制表的结构9 |: [3 Q; w# N6 Y8 j/ |
  create table table2 select * from table1 where 1<>1;3 t6 E5 x. ?9 Q( k1 M
  
. U" L  X# \/ O% M  6、复制表: {- {/ D& q. {) G- ^  M( f/ I
  create table table2 select * from table1;
/ o. r  c/ Y4 K$ K& s  ( E# ~+ C1 T/ Y0 Z! ^4 s7 t7 I* x
  7、对表重新命名1 i" _+ e1 ~0 I" Q9 L, l7 t
  alter table table1 rename as table2;- D2 n1 l, s) i4 z
  + g7 {/ p  z/ F" Z8 E1 _
  8、修改列的类型% W# o* J1 D1 }4 _- S) N
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned6 a3 c$ b0 s9 W% f+ _4 M
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
* t* [5 g: e0 b  
& _6 \/ }! P6 _- a! R* J+ E  D  9、创建索引
# p% e7 B7 E' h7 ~  alter table table1 add index ind_id (id);
( q, {+ k3 a/ R$ {7 ~0 @  create index ind_id on table1 (id);) E  l, O- }; F$ Y' d
  create unique index ind_id on table1 (id);//建立唯一性索引: D4 A& X) t- Q, M
  ! ~7 R7 o4 ?! s8 i; k5 s' }. Z3 [
  10、删除索引
. ^+ c3 u2 y8 T* c/ ]  drop index idx_id on table1;- w9 a; Z- |' Q1 x* p* \* @/ D
  alter table table1 drop index ind_id;
5 A; E& [3 u7 D# h* @, E$ y0 _  
; G2 {1 K4 j7 S, a  11、联合字符或者多个列(将列id与":"和列name和"="连接), X6 S, S& j, r
  select concat(id,':',name,'=') from students;
6 O- F. Y) |- V+ S; W" l  
8 c8 Z8 ]% q8 V8 o& {8 R4 G9 ^  12、limit(选出10到20条)<第一个记录集的编号是0>0 A7 P) ^4 {5 H0 u2 ~
  select * from students order by id limit 9,10;% {2 w% V5 S/ u0 y5 n) @0 L
  % _/ s# [& X) I1 A/ r% i
  13、MySQL不支持的功能$ ~3 N" b8 K* m6 L! z5 O: g
  事务,视图,外键和引用完整性,存储过程和触发器6 D8 Z9 l0 t6 @* |4 e3 A7 N
  
6 T) X! E- x6 U: O2 o; a+ _7 J" c( H  * H2 s" S' m' @' O( T( h: I% ^
  14、MySQL会使用索引的操作符号, w0 a; J7 D( i, U* G
  <,<=,>=,>,=,between,in,不带%或者_开头的like
8 O) }. @1 y( ?7 R9 I) |  
; @# c" e& t; ?$ E4 J$ T  H7 }  15、使用索引的缺点% }' q: b# ]6 h# P$ l: C4 o: p5 Q
  1)减慢增删改数据的速度;( r. a7 n+ ~" A( T% |
  2)占用磁盘空间;/ m* {! E1 r. P/ z4 s
  3)增加查询优化器的负担;3 a' ]* ~+ ~1 T8 y2 r& |
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
+ Q/ ^! N- k& `  4 j1 ?+ m1 P; G
  16、分析索引效率
( o4 G: h- k: Q  方法:在一般的SQL语句前加上explain;
) K5 v5 ?9 i6 p6 Y  分析结果的含义:1 b: {7 t$ B% ~
  1)table:表名;: i6 N. r0 U5 b8 F
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;" _7 h5 _( p3 D9 A/ \( H0 ]
  3)possible_keys:查询可以利用的索引名;
, j1 H# A8 Q) }; D8 H  4)key:实际使用的索引;5 R1 M, K9 R( k5 B
  5)key_len:索引中被使用部分的长度(字节);
0 |/ |1 y. p) `6 R5 F  6)ref:显示列名字或者"const"(不明白什么意思);
1 P. v# c& A" V7 h  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
. ?2 t" b5 J5 u$ @0 _  f! k  8)extra:MySQL的建议;( n& a6 D' J3 Y. |1 E3 E
  
& U& u. i0 H7 z# G# |  17、使用较短的定长列+ k1 O7 ^" O( {9 p) c1 q, a, f  W/ H
  1)尽可能使用较短的数据类型;# J. a6 J( Y. V  B4 l
  2)尽可能使用定长数据类型;
4 Y) R# h' Q2 o7 ^, n  a)用char代替varchar,固定长度的数据处理比变长的快些;  d5 }% ~9 c! u, ~; K
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;" W0 A5 ~+ Y( D5 y; l
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
1 |9 p7 j0 c  [  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
; U: _$ g! ?, ~: @  
1 W' A! L: Q# y& V- {  18、使用not null和enum  I$ J- q* l  Q: U% T3 U
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
) h7 C- k7 A, Z% m  Q# i( {  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;3 m; \1 C& J5 Q" u) t; e1 _
  
; L5 P; ~. p  T8 Z6 d  19、使用optimize table6 y4 s3 z# _+ _2 s. L6 p
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
! N; f+ w' _& J0 l  
5 b9 ^- {6 o% p9 R0 `  20、使用procedure analyse()% P' C0 {5 v7 K/ F9 l2 s7 r
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
% {  j0 @; s% h. O/ s1 W4 w! l+ X9 h  select * from students procedure analyse();( ~4 ?9 J$ g% x/ b
  select * from students procedure analyse(16,256);( e9 g# [8 z2 K. x+ R# ?! f, V
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
! ~& [0 k* P+ k5 o$ j% U% Y  
* c6 h4 _7 G: {$ A, }( F  21、使用查询缓存5 y' I" ?" e# ]2 d- X% K' v
  1)查询缓存的工作方式:# b3 R/ l" Z% c% F5 [
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。# D' v9 c) f% o
  2)配置缓存参数:
& C8 M/ Y; ]' C  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。8 f# C# ?# T* D) Z5 m
  - L6 r4 K3 I) T4 X
  22、调整硬件9 Z" W! {0 p% A5 ~
  1)在机器上装更多的内存;0 \9 X% U  p* ~6 j5 C" i5 K( _
  2)增加更快的硬盘以减少I/O等待时间;
1 a: y% ~( j0 H  \  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
  k# r$ G4 a# ^5 y: c  3)在不同的物理硬盘设备上重新分配磁盘活动;
" K0 S8 h" ~' E( x% t2 ]* \  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。$ r9 g0 f2 G* q
回复

使用道具 举报

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

本版积分规则

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