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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
5 N. J6 i' \: k' k% B  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;" o. R4 G3 j0 k# _  O. R
  列出数据库:show databases;2 w5 z4 w0 C7 x
  选择数据库:use databaseName;: |  [& I. P, M8 j6 S, F
  列出表格:show tables;  M+ Q( X+ i8 t8 Q
  显示表格列的属性:show columns from tableName;: c8 I: A8 I3 g
  建立数据库:source fileName.txt;
$ w9 c' _9 `8 }$ {/ w  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
. Z( m2 o! P$ u  增加一个字段:alter table tabelName add column fieldName dateType;
% U0 h* C- @2 X* ^6 S  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
' N; e. L! A5 `4 U$ A  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
5 O2 E" v! k- [% ~6 Y/ z9 C  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
' ~! K# a& R8 y5 g" R4 t/ E% |! M( w- V  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;9 J2 m7 u5 J% A$ ^
  查询时间:select now();
- h5 b: i1 W7 _0 l  查询当前用户:select user();, Z4 p6 m7 C& h5 {. t. P/ `6 V
  查询数据库版本:select version();
( z3 ^( P- Z/ M$ r! p5 n- @- n: r  查询当前使用的数据库:select database();
8 c) J5 r7 V& ^) |5 q) p3 Q' X1 T  2 ^1 S6 t9 U# _* L/ t2 d
  1、删除student_course数据库中的students数据表:4 ?% a$ h2 l, D8 ~  ~2 R1 m1 M
  rm -f student_course/students.*5 d/ `* q* U' I9 m1 ~- N& ~5 C
  
% r" G% q7 z# g; W8 G  2、备份数据库:(将数据库test备份)4 q# H7 r; |  e& o; `3 X
  mysqldump -u root -p test>c:\test.txt
! e: q+ A. w; X( k, z- X  备份表格:(备份test数据库下的mytable表格)2 g* W  t9 N/ V0 u/ {% q$ g
  mysqldump -u root -p test mytable>c:\test.txt% y+ b; o4 \) M1 S; ^1 q: l9 O
  将备份数据导入到数据库:(导回test数据库)0 Z" \' \6 R* k  p/ i( f/ r
  mysql -u root -p test<c:\test.txt, F5 ~( l( ?* U( r+ E& x2 D
  
, F, I. j6 V; W  3、创建临时表:(建立临时表zengchao)
$ E0 S& v; Z: \9 e9 F- d7 Y  create temporary table zengchao(name varchar(10));
8 `; q% V2 A/ P$ ]+ S) C/ M  D. p  
9 c. v% |3 f* H" A  4、创建表是先判断表是否存在
$ b7 ]  \3 t4 T/ Q: C1 n/ O  create table if not exists students(……);( ^" @6 Q( R( A: m- ]0 {
  ; A* R+ c: V' o, `/ G1 L
  5、从已经有的表中复制表的结构; w- {1 {6 q1 C" o1 [& w
  create table table2 select * from table1 where 1<>1;
5 p; o) C& C3 O) h6 u1 ~  6 y; Y3 R' w9 t+ q3 L/ B: y( f# Q
  6、复制表; t2 G# S8 D6 E8 N4 N" Y7 v/ ^
  create table table2 select * from table1;
% i" I, @4 n& A; p& s! X4 z9 V# ~8 L  
& G- f  l  a$ N4 M  7、对表重新命名9 `6 y; W% T1 q$ l* E1 X
  alter table table1 rename as table2;# Y. M6 Z% Z7 j& j7 y
  * z+ ]: Q4 q2 l( ]+ c
  8、修改列的类型( k  [; W# H  v- `& D' P; X
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned; G8 s" t3 q5 B' G9 h/ h
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
$ w1 a5 {6 `: b( `6 y7 P$ E; q  ; [- X* ]/ y! s: G9 E
  9、创建索引
  S, K7 Y8 Z! k$ j" n  alter table table1 add index ind_id (id);
; C  i4 Y& [* \( ?8 Y; G  create index ind_id on table1 (id);
# H2 X8 ?% }0 ^0 O) n  create unique index ind_id on table1 (id);//建立唯一性索引
$ d( p3 E: h  c# N2 E2 c! Q6 F  
1 K2 {8 }+ L" ?0 d  10、删除索引9 B! k4 q; P' H7 X
  drop index idx_id on table1;
; v* ^. v. Z; U1 B3 X2 F' v  alter table table1 drop index ind_id;! v+ h, t4 A1 R/ I  r2 P
  
0 q8 h# p/ V7 H  `. {" o& ~  11、联合字符或者多个列(将列id与":"和列name和"="连接)# U, F- E7 e7 Z9 N0 t2 s
  select concat(id,':',name,'=') from students;
6 V+ b8 Y+ \% s  ) j) c5 h% h9 A" P( N( m. l& C
  12、limit(选出10到20条)<第一个记录集的编号是0># e7 B! a, C) q# B
  select * from students order by id limit 9,10;
# Y7 x. K. R+ n9 O4 W  ) a$ o! l& T5 M0 Z8 E3 f9 _& ^
  13、MySQL不支持的功能. k- }) t5 t( u
  事务,视图,外键和引用完整性,存储过程和触发器3 L! I0 o% F2 i
  # t0 b/ G9 F+ t( x/ b6 w
  
( J2 d5 L; r! o' F" r% f5 }  14、MySQL会使用索引的操作符号5 N( ~: n5 B6 z' O8 c/ ]# l
  <,<=,>=,>,=,between,in,不带%或者_开头的like
; R0 ^* B8 H6 q" \3 u  ; L# @( K: ^: q  |% m
  15、使用索引的缺点
: g* q: w6 z9 w  1)减慢增删改数据的速度;
2 s3 l7 C: Y8 m+ }, N+ `  2)占用磁盘空间;' p  H  l' L) T% H/ r* s3 U
  3)增加查询优化器的负担;& u% @* x6 i# L0 P3 s# G
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;" g! }/ m) x5 g( q5 q* R
  
( D4 d) W8 X* @1 t2 a+ p  16、分析索引效率
' g) c% Y! H' o  方法:在一般的SQL语句前加上explain;$ P* F0 M$ z4 i! B7 d  p2 F' b( f; ~
  分析结果的含义:
2 n' L6 S/ [6 Z  s6 u6 C  1)table:表名;
% z3 E" p6 N5 ^2 p/ o' B: _  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;3 r% z$ F# k4 T- j( E+ \5 Q
  3)possible_keys:查询可以利用的索引名;' o7 K0 v+ N# X3 G$ e4 m7 v4 l7 i
  4)key:实际使用的索引;
5 ~; r# Q# T: l1 Q, n  5)key_len:索引中被使用部分的长度(字节);
! h; G2 W: V8 O' N+ Z  6)ref:显示列名字或者"const"(不明白什么意思);. E, W; k/ w& u( m
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;/ f. l" ]; _" [' G
  8)extra:MySQL的建议;0 l: g6 j  `% V
  ) C7 S/ s  v- g9 f. M' |; E6 E9 y
  17、使用较短的定长列2 |) o# V5 ?, Z4 x9 w
  1)尽可能使用较短的数据类型;* j( p( ~0 }% ^* _/ ~5 |4 I
  2)尽可能使用定长数据类型;
/ a, \# R1 M" R9 c8 X, n  a)用char代替varchar,固定长度的数据处理比变长的快些;
+ u* G9 O0 o% U& D' o0 \6 u1 S1 Q  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
( a4 K9 A$ {3 _' m  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;+ e/ h3 h- b5 U* Z
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;) B% }& s* B- K4 U8 U
  
& W4 z' S2 z0 ?  18、使用not null和enum
7 v9 `8 H3 t8 g9 ^6 d- @9 G# u  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
9 f  B5 w8 l3 z# e  e# n  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
. s( x5 Z7 D* A* Q  : d6 L8 _1 i- [$ z( n; }3 K& y
  19、使用optimize table
$ V4 O- }, J$ p4 Y1 i/ ^* V  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
$ P% G" U0 o: _2 l  
7 Y* `! F% J- y" |; j, A  20、使用procedure analyse()! D  z, Y; k# O# u$ b! I
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:: x3 Z' O7 W" X1 t0 j
  select * from students procedure analyse();
, L. K6 ^2 f9 p/ j  select * from students procedure analyse(16,256);+ l- n! I& Y0 U5 ~& f7 f" H6 J
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;3 h1 M7 S7 x( Y: @5 i- _+ S1 O2 T
  
, F8 p+ t1 D6 D1 @+ z. d. g  21、使用查询缓存4 T* {: u, @9 U9 V
  1)查询缓存的工作方式:, I" a2 _+ j  ~8 m
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。6 c7 b3 R) z% V% R: O% _
  2)配置缓存参数:0 {5 A0 ]* s4 l; f; Z: u
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
1 M, q& o" p& R# F+ p& F  
! ^5 }  f' D5 p7 l& j. R  22、调整硬件
$ U9 P2 S' I" Q) @# f0 g  1)在机器上装更多的内存;
2 \3 D) B* o0 e3 d& B2 U- k  w: E  2)增加更快的硬盘以减少I/O等待时间;/ m2 {) }5 l/ u* ~3 m* B
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
4 o8 a+ B- g# Y  i  3)在不同的物理硬盘设备上重新分配磁盘活动;9 |8 a4 ~! u: p" F7 H% E% z
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
; k$ p2 G  |9 ]0 J, X' Y3 t$ L  |$ Y
回复

使用道具 举报

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

本版积分规则

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