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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
8 ^) x8 ]) }, z  Q  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;$ y* j9 F5 o4 Y" u4 g  [- \
  列出数据库:show databases;- m/ }& n+ w5 Y" J& Y
  选择数据库:use databaseName;
7 S9 J7 ^& U/ G1 w) ^1 `* Q; w, R2 k  列出表格:show tables;( r1 H# `% m# H
  显示表格列的属性:show columns from tableName;
- X% X0 ^, }& L3 I7 y+ Z  建立数据库:source fileName.txt;! v$ X. U# t+ p# e* k: i
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
1 a  U  i) E* h8 u4 n7 B  增加一个字段:alter table tabelName add column fieldName dateType;
  S* ?6 I. h' O: q  x& \) l4 i5 R  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;- j) u' E5 t% p& N0 L
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;3 [% y; G. D: I2 x3 P
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
) e/ u4 T0 O7 K  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;8 J; d1 j0 h1 o* ^: [# v
  查询时间:select now();) }8 f1 ?9 X2 B/ c, C
  查询当前用户:select user();, Y2 f9 H6 G! S
  查询数据库版本:select version();$ d: k) w/ t, |5 l
  查询当前使用的数据库:select database();. P* `- U' L9 n7 h7 e
  
, L, Y# g2 Y, f/ a  1、删除student_course数据库中的students数据表:: s/ A3 s* u$ m: P: X6 ^3 K
  rm -f student_course/students.*
7 _1 r6 n! h) D6 K# p  ' T( r9 z+ W. M/ l) j
  2、备份数据库:(将数据库test备份)
3 t* N* t3 v$ G5 b% v/ [3 P0 a7 e  mysqldump -u root -p test>c:\test.txt
# ~, `6 N8 Y: S* K) C  Y0 i  备份表格:(备份test数据库下的mytable表格)
5 d2 t, s3 T1 A8 o9 I# L  mysqldump -u root -p test mytable>c:\test.txt) e- P1 \+ O' R. B6 _. @# F7 K
  将备份数据导入到数据库:(导回test数据库)3 c! t9 |2 ^) i" \/ O; p
  mysql -u root -p test<c:\test.txt
& @' ^2 N" V4 F4 a  a* F* C  
4 A9 M& M2 Q+ A) h; u' D5 {  3、创建临时表:(建立临时表zengchao)
( T& ?! [/ I( O7 Z* W  create temporary table zengchao(name varchar(10));
; t% O, e4 v# P, f: A3 y+ d: L  : F8 g5 x4 ~/ e  x- V* @
  4、创建表是先判断表是否存在
# g* v5 F5 P1 D& A  create table if not exists students(……);* b% W; _8 v2 y5 A
  6 ]: M$ A' h: M! O7 n( [
  5、从已经有的表中复制表的结构
' ^. F& t! }  I5 K  create table table2 select * from table1 where 1<>1;
7 y- Y, `! d  M& U: {$ M+ B  - U  f- {  t: d4 G# d& J" l3 n
  6、复制表
/ I4 m6 `; z6 {  create table table2 select * from table1;
$ J$ W$ d0 d3 O7 |# m- O. |  
/ T' z$ S% m( O3 S# `# k2 z  7、对表重新命名
6 N$ ]1 `# d) }, K  alter table table1 rename as table2;
7 s& l( h; `' [; H: d* F; l  
7 Q& p* h, O9 v5 g5 k( |% t  8、修改列的类型
5 w0 w& }3 z: x4 P) }! \  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
* `) z5 `) ^. \  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
$ _& p6 T; U3 K1 T6 j! r) E5 m  ' d. O; q% Z. E7 x
  9、创建索引$ H2 b, C5 p% `, D4 J8 I( ~' v
  alter table table1 add index ind_id (id);7 L" C( w$ p) I7 k( P) N" i
  create index ind_id on table1 (id);
$ z; e2 k! m$ Z# D6 {. a7 M# f  create unique index ind_id on table1 (id);//建立唯一性索引
# k% x/ K0 d5 s: W/ p( p1 K  
/ [( V( W7 ?! y. G4 A  10、删除索引" {* W+ R) ^1 c7 M0 _* q8 Y$ F
  drop index idx_id on table1;0 u5 O7 D% Z6 P
  alter table table1 drop index ind_id;
9 L0 Q" n/ k- u' M: m  
: f. a0 B% W* O) H1 z2 B! @9 `5 _1 y  11、联合字符或者多个列(将列id与":"和列name和"="连接)
2 b3 z4 T) w/ g: l  select concat(id,':',name,'=') from students;0 @# j1 L- k8 g$ P4 Z* ^% L4 g" L
  
& j( M' _! D3 b& z. b5 y" Q  12、limit(选出10到20条)<第一个记录集的编号是0>
" a8 C! d, Y. I7 [- ^  select * from students order by id limit 9,10;. E' M$ S# l; R4 ^4 O
  : h. L2 ~- i) f1 g/ w
  13、MySQL不支持的功能
/ o( g( f* w0 t! s$ C  事务,视图,外键和引用完整性,存储过程和触发器6 g2 u0 I8 E" N6 \
  
) D# B9 L7 y  t1 g  
3 Z$ o" M" S+ }  14、MySQL会使用索引的操作符号+ Y* R3 ~7 n" d
  <,<=,>=,>,=,between,in,不带%或者_开头的like
' T4 P& F6 t1 \) h; w    z6 n+ Y5 F: N! h% I* _
  15、使用索引的缺点
7 L! l3 [- T  m: `  1)减慢增删改数据的速度;
  ^/ |: _6 R9 ?6 c+ D* A  2)占用磁盘空间;9 m% E6 P. |4 {! _6 ^: |5 H$ M1 i2 X
  3)增加查询优化器的负担;
% i# L2 ~" U  R# |  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
6 d, t0 i8 }9 p, I  1 ^$ k4 C/ w9 Y) a
  16、分析索引效率
4 X5 ^5 R: y4 A5 ]6 |  方法:在一般的SQL语句前加上explain;4 G6 ?" @+ ^8 l9 D
  分析结果的含义:8 P! D" F* j- k. C
  1)table:表名;
. L# w( l/ x  Q" T. I0 {+ D0 F% @  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;1 G$ g1 e' G& g- n* _
  3)possible_keys:查询可以利用的索引名;, r# ^5 E. [; [4 U1 n
  4)key:实际使用的索引;
  H8 w  }1 K* f# j( ~' m  5)key_len:索引中被使用部分的长度(字节);
( q, t% b4 I8 \# J6 K. B  6)ref:显示列名字或者"const"(不明白什么意思);
6 {8 Y( Q/ e1 E% D( K, F! _  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;" c! b. h, H+ y9 v" F+ Y; V/ G' [
  8)extra:MySQL的建议;
4 S( [" o0 \9 `! E* d' `  6 _7 U7 _" P5 K7 ^8 t* ~
  17、使用较短的定长列  R' D1 M( l- v$ i9 P
  1)尽可能使用较短的数据类型;
- P  c% Q$ {" F  2)尽可能使用定长数据类型;5 x: f5 _+ w0 A" t0 S
  a)用char代替varchar,固定长度的数据处理比变长的快些;
- e* d9 V* ?" ?& i) W  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;9 A# {" T& i8 l/ M- Y/ r6 y+ e
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;* ?% U* k+ N- X* V2 n. p' P% f
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
, u' d3 C3 |$ j# n% d  
2 K4 x* }5 T5 T5 N6 i/ z7 V  18、使用not null和enum
9 [3 d9 H& D0 ~, O  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;: w8 X* f/ C" b, \9 a  Y4 ?# E
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;8 P3 r" R9 V1 P; w/ L2 d$ h# {
  1 s5 Y: L+ O  O4 K
  19、使用optimize table
; ^1 d' x! ?1 U5 e' o  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;- K# ?; R+ h7 W
  
+ d! C# f. L% z  20、使用procedure analyse()
$ L* D# }% M; q2 ~  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
- k. ^8 B- B5 q  select * from students procedure analyse();5 v! w1 ^9 S6 i& ~. l. A7 ?* b
  select * from students procedure analyse(16,256);
, J; R9 \$ F; @3 z+ U# h  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;) a+ `' d+ L" {$ T
  
5 _& p% S6 W" S& R( g; Q& N  21、使用查询缓存" q/ N$ e: w1 O- `2 p6 j7 M
  1)查询缓存的工作方式:
6 o7 q- m6 d# I3 F" ~  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。7 `% s+ N0 _  p6 O
  2)配置缓存参数:( |2 }; q% t; C! X( h6 i% _" F
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。' C$ p7 O4 I2 ?3 A$ s8 _0 R. v" h0 b
  ; ^2 V: w! X3 W7 m: Y9 L# ~
  22、调整硬件
4 E- i/ j6 X) w  1)在机器上装更多的内存;
5 I  A% G: k% z7 \9 ?  2)增加更快的硬盘以减少I/O等待时间;; J) {/ Y4 ~* M" L
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
: A+ c9 [* u) y# t  i7 M  I* b( B7 L  3)在不同的物理硬盘设备上重新分配磁盘活动;8 o2 z9 q4 O6 ]  ?3 T# j8 v
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。+ g8 O0 q+ p: r5 p7 H0 Z
回复

使用道具 举报

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

本版积分规则

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