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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;  w- c, ?. I- T( u" Z; [2 p
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;% R$ _$ ~( G$ T; f& @' ]' v
  列出数据库:show databases;( J5 f( v6 i1 D9 [" E4 `
  选择数据库:use databaseName;$ U$ O' t4 F& b7 X7 R8 J
  列出表格:show tables;6 z2 b& j! B9 A
  显示表格列的属性:show columns from tableName;# m( _# ]4 o, }2 g9 O
  建立数据库:source fileName.txt;5 w- i5 C$ ~! h) F" F8 \
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
( ~4 e8 c* j: c* j/ I  增加一个字段:alter table tabelName add column fieldName dateType;% [  V5 ^" w1 |2 G2 `( M
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;& D, V- {. @) ^# e, M1 j
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
5 s# b7 o3 Z5 }  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";4 r7 v4 ^2 O+ _" ?$ _8 p
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;: u/ \4 {+ U: F4 e
  查询时间:select now();/ L7 C9 Q  t7 i
  查询当前用户:select user();' N+ Q! M4 V" J& S9 B
  查询数据库版本:select version();: c/ \1 r9 b" x% z4 ^
  查询当前使用的数据库:select database();
$ N1 l3 h$ k& V8 N5 Q  $ W: D/ `! ?2 _0 k
  1、删除student_course数据库中的students数据表:
7 n6 I4 _: k& c7 l& \0 z: h/ k  rm -f student_course/students.*1 a; p. m/ F& D$ a+ B* O: z
  
! U' j! A( |6 c( O9 U  2、备份数据库:(将数据库test备份)/ I9 e2 n4 z% j% `; b
  mysqldump -u root -p test>c:\test.txt+ h( V4 C* c2 T
  备份表格:(备份test数据库下的mytable表格)
4 h( n$ c: R, t# v  mysqldump -u root -p test mytable>c:\test.txt& f/ Q; I8 e$ z3 |" V/ F2 J
  将备份数据导入到数据库:(导回test数据库)
3 b/ S9 V6 v# R$ Q  mysql -u root -p test<c:\test.txt+ N# c# {# ]* g* E/ \
  
. d  Y' r* C9 V1 e1 }% A% f( q  3、创建临时表:(建立临时表zengchao)
3 l- O8 \+ L$ `6 n7 B- k4 r  create temporary table zengchao(name varchar(10));
/ i! o7 a$ ?$ ?' i2 |0 }  
3 B9 Q( z2 J6 u& n+ l, o) N1 q  4、创建表是先判断表是否存在$ J7 S3 R& z5 a% x% e" @' m; I- K
  create table if not exists students(……);. f/ g3 B& o* \, {- c0 i$ S. H
  - ~& @% ~2 y1 t) ~! ?
  5、从已经有的表中复制表的结构* h6 }7 X& C; V6 T: B: b  n$ `* i6 K
  create table table2 select * from table1 where 1<>1;
- y7 q9 O, Y3 u  
! `, S4 _% e  O4 W; I; Y  M  6、复制表9 W# S1 l4 X2 ?3 L) `; k
  create table table2 select * from table1;& }7 ?0 b2 Q$ n# `+ R) o( p, P
  
0 H' n0 o' K7 _: }/ k& O  7、对表重新命名
# t  V) b7 w) e  alter table table1 rename as table2;2 u6 l* N6 U2 H' }9 p( Y
  ! c1 z) x4 f% e
  8、修改列的类型
+ |1 Q5 c7 ~/ F7 I7 u  p  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
' n7 [. A! m0 U0 A& _7 V$ M$ \  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned- e: I8 o  s# o# i" j' _
  
( Y3 u5 Y& d; A5 X! |: O7 I  9、创建索引1 k- V- W! n! e2 B6 U5 @
  alter table table1 add index ind_id (id);
) X+ v; f# g8 e( H6 E. P* K8 R  create index ind_id on table1 (id);1 J% `) \& W+ k! i+ f. i  X
  create unique index ind_id on table1 (id);//建立唯一性索引$ b% s' S  F+ Q+ V- |, F% }
  
0 D  V: W, n. P3 B# x  10、删除索引  f) {6 u  Y/ b/ Y9 K3 K
  drop index idx_id on table1;% A1 p+ M% t4 M, i, ^5 J9 M
  alter table table1 drop index ind_id;0 Z7 A- a7 X, H  Y8 x/ T; _0 h. K
  
! c' |3 W2 g) J/ p, m4 C# q  11、联合字符或者多个列(将列id与":"和列name和"="连接)# y8 O; {& J- Q. M- _
  select concat(id,':',name,'=') from students;2 V- k2 X- U) E1 |, R
  - F& J4 z7 \2 ~2 G6 y/ n
  12、limit(选出10到20条)<第一个记录集的编号是0>7 h- z, x+ n% H2 S2 x+ f9 H# r0 }) {
  select * from students order by id limit 9,10;
. i/ z* x! @; Z2 w& q" e7 J. R  
4 d) y# `1 M/ Z  ?% s  13、MySQL不支持的功能
  j) G7 v  W4 v' x  事务,视图,外键和引用完整性,存储过程和触发器
# u) v/ p# a5 Q4 n* R" q, b  
, ]1 n7 W1 t" S4 u  
6 T3 h0 B# o. ]' O1 D; ~$ w  14、MySQL会使用索引的操作符号
6 R" U" ^4 [% B5 S% ~$ A- u/ q  <,<=,>=,>,=,between,in,不带%或者_开头的like% ^5 o6 @  w, H' j" `6 O
  ( L* @; t1 }9 `6 i; q
  15、使用索引的缺点5 u: ~& V8 d& o% \; ~* d
  1)减慢增删改数据的速度;
( O9 }9 B* g% [* b: V  2)占用磁盘空间;) L5 b, o  U2 r- I+ z
  3)增加查询优化器的负担;
; ]3 B1 [% }* g2 k' D  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;: k4 {: }0 [& Y1 I( E# [5 I
  
1 C9 g, B# i4 X( x  16、分析索引效率
% {6 [* X- z: ?* B8 {; d  方法:在一般的SQL语句前加上explain;
) P1 N5 `( p+ R: Y1 R  分析结果的含义:
. r6 _2 C2 j/ I8 \  1)table:表名;, \+ x6 ^( A  A0 r2 i7 j9 O4 T
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;' s5 C- Y) o" {6 ~. U+ q& z
  3)possible_keys:查询可以利用的索引名;2 W; ?. `" p* y) Q9 E( X: @5 V& x
  4)key:实际使用的索引;, J0 g- _. D4 z  ^4 N% [
  5)key_len:索引中被使用部分的长度(字节);; `1 q3 ?( ^7 L6 F
  6)ref:显示列名字或者"const"(不明白什么意思);
7 `# n* ]* `4 [1 N. `7 E9 u  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;# k  D/ j9 B( N* f  x; [4 p
  8)extra:MySQL的建议;6 s2 H9 ]* ^0 y, M. d
  
- J: c" C; g0 ?. g) a; z  17、使用较短的定长列! `3 n7 L* r1 C' V( S' p; {
  1)尽可能使用较短的数据类型;
  G- V) K* p7 l  2)尽可能使用定长数据类型;& J! F4 A, d3 r3 u
  a)用char代替varchar,固定长度的数据处理比变长的快些;
' F( T5 k6 W" o! M$ ]  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;9 I8 [1 s8 |" h% h* r2 l
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
+ {9 G8 ~# |! |2 q1 M! m, R$ E; ?  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
2 a; m8 J- z" k$ f  : T( ?) @7 k4 j0 H; L  {
  18、使用not null和enum
/ A) a/ I) q- ^3 E, l  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
  [% G7 Z. c4 |$ p7 z  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
! x# t( Z* B9 w6 P  - |( D1 y& I$ K( F  T
  19、使用optimize table0 M3 M) X. ^( e5 c
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;& G8 s4 \7 L# b- H( V9 L3 j
  ' B2 k6 s* U' S
  20、使用procedure analyse()4 c  c8 {, m  F# |5 g
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:3 L1 k6 B* K" e9 e
  select * from students procedure analyse();
( @9 F. V" q- _  select * from students procedure analyse(16,256);
, i% ~+ P4 f" x  H* _  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;" T# F  S0 {- k) {( S
  6 H0 c: L, `. X1 u
  21、使用查询缓存
( B% h* U1 b/ q- [' G  1)查询缓存的工作方式:/ J: |0 K2 L! c, G: b; f
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。1 p& t, f/ {3 ^9 B6 V4 o
  2)配置缓存参数:5 M4 D9 }2 p) Y# F* R  Z
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。, ^0 O3 d! w; e) G4 u6 G- Q5 U
  , Z% s, Q; p& T( k) _( A
  22、调整硬件
& `  Y- _8 d2 Y& G% l: \' E# |  1)在机器上装更多的内存;
" F  R6 l6 A0 U. A3 z  2)增加更快的硬盘以减少I/O等待时间;4 D. t. a$ K4 h3 I# |
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;, y( b, r/ c8 d5 g) f/ A' F
  3)在不同的物理硬盘设备上重新分配磁盘活动;
; _9 J2 e3 d6 a& A( y" @  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。& J" \( o; F# h9 O+ X
回复

使用道具 举报

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

本版积分规则

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