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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
  L$ ]; _; ~/ T( M- H. Z" ~1 i; T; _  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
1 C( q  m: u, [2 \* n  列出数据库:show databases;
8 e1 Z0 k& S, ^2 e# s$ C  选择数据库:use databaseName;  a( a; U0 A3 J8 G
  列出表格:show tables;
9 A$ w9 i5 ]* Y+ @6 O! `, m  显示表格列的属性:show columns from tableName;
: A2 R9 ?6 o7 |4 m; t6 ?; t  建立数据库:source fileName.txt;) ^" s0 [0 {$ f! d, a0 j" u
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
" `0 a: s3 a! f1 t) i  增加一个字段:alter table tabelName add column fieldName dateType;: J4 `) C! H) |2 @0 s
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;6 ?+ l: x+ M& |8 U, g. Y" D
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
1 k/ X) d" I* {7 L8 K  ]4 j* j  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";! _; R) b4 `- [" D3 y8 O. B' j
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;' J2 I) Y( }# V  C) ?' J7 a. O
  查询时间:select now();5 W! G; S$ x, z: a* P+ E
  查询当前用户:select user();  e/ k) a9 ?. t8 A: k: i% t3 t* l
  查询数据库版本:select version();
# `* N- V6 X" i9 F: f1 H  查询当前使用的数据库:select database();
4 V7 g8 s5 F& A4 P7 Y( P6 Q( A' z  
2 A) G- y4 R& ]3 M  c5 ^  1、删除student_course数据库中的students数据表:% w$ n# y7 j" E3 l  q1 x5 [
  rm -f student_course/students.*
% A- h7 N% f! r# `: b7 V  ; [/ o, q6 g3 C
  2、备份数据库:(将数据库test备份)
/ I2 ?0 R" P( n' k2 K( H% l  mysqldump -u root -p test>c:\test.txt; ^# N) P3 i! l2 d' i5 |2 F
  备份表格:(备份test数据库下的mytable表格)/ T( b( F8 u6 t  S
  mysqldump -u root -p test mytable>c:\test.txt
( a+ k" d2 b: U, g4 @  将备份数据导入到数据库:(导回test数据库)
. M* |, H# c  E: x  mysql -u root -p test<c:\test.txt
  g1 E8 v" n. J8 ^7 b+ N  
5 X6 b% o8 S) V9 t% F3 w  3、创建临时表:(建立临时表zengchao)* H0 ?0 R; J+ }0 y
  create temporary table zengchao(name varchar(10));! {$ `7 ~3 i* ]5 u4 _
  
$ [' A! E1 p: R, F/ J% J  R; d4 f  4、创建表是先判断表是否存在7 n# S2 w7 B- r
  create table if not exists students(……);
7 B7 ]0 @# `3 v. I& M  
. v2 k, L& @# F  P; c  x7 g) z  5、从已经有的表中复制表的结构
; Y7 E; g4 W/ k  create table table2 select * from table1 where 1<>1;
" |$ ]$ n/ ~& s1 B. Z  
1 ?$ Z: ~  _( ^  6、复制表, U6 K6 [* k; c6 S" g
  create table table2 select * from table1;0 u9 z! w! T, C/ ], Z; R$ {
  
  {4 o2 F8 Q% u* |9 E  7、对表重新命名8 I2 r0 x) x5 n+ s$ g$ ^$ ?
  alter table table1 rename as table2;: H; o* Q/ \8 F3 K, d0 P9 }
  
2 r+ `& r  j# g5 _! U! S2 `  8、修改列的类型
% e7 i5 H4 i9 f/ B& p  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
1 c* q) F2 L2 J& U0 [  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
' c' A4 |" S- E9 N* K+ I) Z0 P  ) K7 Y, A7 H" V; K- \
  9、创建索引
4 P# V" d" U' P5 L. K2 n  alter table table1 add index ind_id (id);# U1 G( Q7 ]  g* z( B
  create index ind_id on table1 (id);- o$ O* C* ~) F* u  t, w0 f, {) Q
  create unique index ind_id on table1 (id);//建立唯一性索引+ \$ i, {$ L$ I( b& [& q
  
' Z% [; S# F8 b. U2 J& z) B  10、删除索引, F0 q  q1 y( _' q  B1 B
  drop index idx_id on table1;2 J- @3 s  `2 y& k8 X' E& |
  alter table table1 drop index ind_id;
1 S% q3 w! K. C2 ~  # g# v+ ^; n* D' b: C  b
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
: W+ Z% y% ?3 O8 X: g  select concat(id,':',name,'=') from students;
7 P* N& c- K( |8 _' j- y6 L  # x* n' b( {. d, N1 s" V& A  A
  12、limit(选出10到20条)<第一个记录集的编号是0>
  D# A  n6 F( X. T; D" ^, m  select * from students order by id limit 9,10;0 h5 {! Z. V, z  O. X, k
  , T, e3 V. N' s& W4 p3 E+ T
  13、MySQL不支持的功能
5 ~" j$ b  I: ]# E; Y5 `  事务,视图,外键和引用完整性,存储过程和触发器/ Z9 K+ ^& M: _/ d( t
  7 J* s& F. ^8 o* G
  ' E% R2 H# A+ Y6 f4 E
  14、MySQL会使用索引的操作符号9 Z! ^* l! c! W) L  O
  <,<=,>=,>,=,between,in,不带%或者_开头的like9 r# {8 F$ Q% f$ b4 I$ E) V
  
9 q9 u( B" G5 A& k  15、使用索引的缺点
9 X6 H* c8 y9 Q9 \/ R% T* Z- ]  1)减慢增删改数据的速度;
* F% |( s" S$ q  T6 q  2)占用磁盘空间;
# }% Z; ]7 B2 M1 w6 e) b+ q  3)增加查询优化器的负担;
4 z8 g' K2 `  Q+ p' r  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
4 O: O4 N# U. r8 D1 W0 `( b, \" K% C  ! ^9 {& \0 E$ t% Z
  16、分析索引效率
5 d$ X/ \6 u, M+ g1 w/ h+ A  方法:在一般的SQL语句前加上explain;
! \) B+ P/ m  u, ?( S  分析结果的含义:  S1 ^: J' s( s
  1)table:表名;$ n/ w/ y) t/ E
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;( e( H: p" s% r
  3)possible_keys:查询可以利用的索引名;, K) X2 N( p0 [1 n/ Q0 U1 Q
  4)key:实际使用的索引;6 O0 R0 Q/ c. ^4 b: W6 O
  5)key_len:索引中被使用部分的长度(字节);! C5 g& z1 T7 m/ {- l, K4 K0 u
  6)ref:显示列名字或者"const"(不明白什么意思);) Q2 ~" y3 W. i& m* t. E7 ]
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
4 ]9 `- _$ `/ h: @, p8 `  8)extra:MySQL的建议;9 G9 N$ {) H' T$ D' {
  
* r, N5 ^2 m; r# \  17、使用较短的定长列
- ?1 F' S, W1 w1 }( N  1)尽可能使用较短的数据类型;
+ b" k3 r2 T% a6 I+ I! i+ w0 T  2)尽可能使用定长数据类型;3 n, J" H+ E  q4 _; R# G
  a)用char代替varchar,固定长度的数据处理比变长的快些;
" d- Z( V( H# n8 ?  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* t% |: L) c! l# r2 }: c- `7 E  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
1 N6 H! _# [$ C, ?7 N  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
: c$ O# j" |/ c! r  5 Z6 v$ N; T0 @1 K2 j; ~) B
  18、使用not null和enum
- l# z3 f5 |* i  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
, _: \1 j" r$ }% d  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;& {" f+ V5 |- r- }
  8 d' h; y6 j0 _' `& H9 f: q
  19、使用optimize table
# {& w: V0 i9 M& P! r  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
1 W* U$ w# o6 i" G  
& P$ E* T- ^+ V5 a0 O  20、使用procedure analyse()7 P- o" X! x; v
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
& @# M) h/ s8 c9 p' m  select * from students procedure analyse();
7 {8 A: X% `6 B* ^( I  select * from students procedure analyse(16,256);
. b: }  q- @, @" x" L  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
5 a, F, r. v+ O, p' L+ D2 A, \6 }  
% K4 j7 u7 ?& F5 [  21、使用查询缓存
2 j/ b1 H" w+ s# Z( y" ]0 ?  1)查询缓存的工作方式:% k% [3 w9 k( L( u; D9 x
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
7 a" p& J% x5 I' D9 Q2 |. V  2)配置缓存参数:) Q6 l  [- t7 k( c! ?: k. y
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。5 P" W0 n7 |  ^4 G% ^/ `- ^3 m
  
7 S& c) C$ R; a# l- T2 T  22、调整硬件+ {7 A: i, c4 {+ r$ p. U) m, L3 |
  1)在机器上装更多的内存;) y' V5 v/ p, y" \3 E# N6 t
  2)增加更快的硬盘以减少I/O等待时间;
' B3 a4 C5 _% u; S; i5 O# O1 R  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;4 h% s1 l. T' C" ^4 `. r: P, {
  3)在不同的物理硬盘设备上重新分配磁盘活动;  H9 @/ N# J3 }4 W& [
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。; E& Q! J. E0 v+ {& Q9 m" e/ g7 M2 b
回复

使用道具 举报

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

本版积分规则

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