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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;$ B+ t1 ?( K8 L- p9 Q, q
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
! p. q; X1 c/ J6 k( {( {6 w' N  列出数据库:show databases;  X7 ^2 ]8 B' Z+ Q% W& r$ M+ l& d0 S
  选择数据库:use databaseName;9 L1 t. B. Q! W. m7 p" y# A6 g
  列出表格:show tables;
3 d2 Y# b: E+ J* g0 ?) u! s  显示表格列的属性:show columns from tableName;
6 T  ^6 Y" a; j# d" B' P  建立数据库:source fileName.txt;
7 N8 D( ?" b* ^0 g# ^- F9 U  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;6 o) l8 l! A1 _! ?- i4 z3 g- S' t
  增加一个字段:alter table tabelName add column fieldName dateType;# i4 s* d: w/ k
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
3 M" ^+ y8 q6 @' o  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;' m3 Q$ j9 f$ k$ l, g  N
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";% Y3 S1 x6 `% v1 w4 Q0 c1 \1 `) x
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
7 N  @+ }* A/ A. o  查询时间:select now();  l% p+ Q. p6 Y6 ^& i
  查询当前用户:select user();% e( F- E, Z5 g% o: D2 h) y
  查询数据库版本:select version();' P5 E9 y) f" l. |9 V1 R& v
  查询当前使用的数据库:select database();) Q+ F; Y- d: T4 I
  
$ S0 F8 O$ A) J  }+ W5 r  1、删除student_course数据库中的students数据表:! v% V9 u" j7 n: I% G; e; |
  rm -f student_course/students.*
0 ?+ S" G- m% \9 R4 [7 t  : d: t8 D: ^% w5 `7 |. @" \, E
  2、备份数据库:(将数据库test备份)
, w  p  v4 ?# |. }- m! t3 P9 z  mysqldump -u root -p test>c:\test.txt
0 T" Z6 x2 i7 Q; f" c8 C  备份表格:(备份test数据库下的mytable表格)
0 W2 E( W: V& @* g" d  mysqldump -u root -p test mytable>c:\test.txt
& i/ D* R3 u" z, A  将备份数据导入到数据库:(导回test数据库)/ a% [! x6 P! S! X2 y
  mysql -u root -p test<c:\test.txt7 s* t( e; _4 ?7 |! [; y
  5 f9 ^) R" C9 X5 p
  3、创建临时表:(建立临时表zengchao)
% B1 A) `& B& K  `' r& z: |' T2 R& l  create temporary table zengchao(name varchar(10));
; K# P5 Y1 b( K' w$ x% \7 [$ h2 k  4 o4 ?' }& J: C; w
  4、创建表是先判断表是否存在5 ]- H, c- n+ \3 g$ w2 O5 b' p
  create table if not exists students(……);3 E6 j" H9 o* |- P
  
! }2 l' U' A3 ?- Q) v& A! S  5、从已经有的表中复制表的结构
+ h! N7 ]1 w3 v/ \7 |: B/ j0 ^  create table table2 select * from table1 where 1<>1;
3 B$ D0 C' |/ L# Y4 @1 z5 E  # i; K" \# D5 z' L# k1 X5 M
  6、复制表3 J3 ~9 A/ q  w* |, a
  create table table2 select * from table1;, d% _9 N4 i5 |0 o
  ) |" k& y2 K5 h' k, e  _
  7、对表重新命名
5 i; y' ~) y3 a/ w/ E2 ?  alter table table1 rename as table2;
9 q9 c# n1 ~$ w4 _5 _5 W  3 w  c5 p0 N* s
  8、修改列的类型
: m( g" [) f+ Z: {5 M- {  ~7 c  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
& u# H0 @# h  H6 B8 _  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
( `' K5 F6 [! [$ A" Z1 e  & a1 h% A  n% c- F+ Z/ E
  9、创建索引
1 l0 N6 L$ m; _6 ^1 f5 K  alter table table1 add index ind_id (id);5 r% ^$ D9 C. g; p; }
  create index ind_id on table1 (id);
$ x9 I7 a) ?( q' u* O9 S4 \( Z  create unique index ind_id on table1 (id);//建立唯一性索引- |4 g( Q3 i6 k! {2 C
  
/ _! ?& l' p# ^7 }  10、删除索引
: D  ~7 {' a  R8 Y5 n  drop index idx_id on table1;$ Y. w/ N* F! C7 H
  alter table table1 drop index ind_id;+ ?# P1 g" {3 S6 N1 a2 K5 n
  
6 V( m* x+ |( Z2 L9 f* z  11、联合字符或者多个列(将列id与":"和列name和"="连接)* l& s6 b$ C4 R
  select concat(id,':',name,'=') from students;
9 S) \$ p9 j6 N; Y4 x  6 J% s- f7 K' s
  12、limit(选出10到20条)<第一个记录集的编号是0>
& y5 a- y) Y* s2 P0 s& z* x  select * from students order by id limit 9,10;0 X% `" P2 }6 X; D7 n
  ; P: J" G5 |: X, ]: R! r
  13、MySQL不支持的功能
7 ?8 Q5 q" D$ ^. S8 a6 x  事务,视图,外键和引用完整性,存储过程和触发器
7 w6 Z: y3 Q6 [# B5 h: O  7 ?! Y! }2 {0 e5 j  k" M6 q6 u
  / |+ e6 L$ Q6 B8 A4 B" f5 }& q+ u3 J
  14、MySQL会使用索引的操作符号
; y% z, q# s' N" ?: S  <,<=,>=,>,=,between,in,不带%或者_开头的like" y$ a" }0 C  j
  6 w; V/ q# P9 q/ z' H9 e
  15、使用索引的缺点
$ X5 ^  r5 G& D1 f  1)减慢增删改数据的速度;) r' ~" J  k  d; e. S
  2)占用磁盘空间;5 D9 ?3 n" c1 P
  3)增加查询优化器的负担;
8 ~0 o0 `1 \' I8 |8 f6 F4 m  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
( _7 O: C, s" x( P% \  + |. Z/ n+ J) M6 q* j
  16、分析索引效率
* B1 o0 t$ v2 C3 q. K  方法:在一般的SQL语句前加上explain;( H, r& b0 [3 T
  分析结果的含义:
( f7 A) b0 h8 u# o  1)table:表名;
5 J+ \/ \/ t, n/ @& S4 }0 l9 }  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
+ F/ S: D  a% w+ Y: X& T2 E' I  3)possible_keys:查询可以利用的索引名;
/ L% V1 r8 I9 O  X  4)key:实际使用的索引;. b. R) d8 V( Q, l: v! S* U2 N2 \
  5)key_len:索引中被使用部分的长度(字节);3 {- q& i! n0 G! l0 B
  6)ref:显示列名字或者"const"(不明白什么意思);1 U5 l& d) z7 d" ?9 r# c7 ^
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
: n7 I( ]/ W: m! D' B  8)extra:MySQL的建议;8 n8 h) ?7 y8 n) l# ], h  @
  - T& _* f" Z! x1 j2 r
  17、使用较短的定长列' I  Z/ g6 ^8 F, ?4 k
  1)尽可能使用较短的数据类型;( ^8 z' n& w  c$ N( n* b
  2)尽可能使用定长数据类型;
: Y& g; k; F6 ?/ g9 x$ T4 F  a)用char代替varchar,固定长度的数据处理比变长的快些;* U# C2 n: [5 f0 }7 }
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
  k& ^/ n& d/ G4 E: \: }. ~  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
+ h4 S% r6 y; B: R% P0 ~  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
' R) o. @, c% S6 f( ~, T  % Y  ^& l/ l- w: _) E0 g
  18、使用not null和enum  g5 z' H) j* R) l2 w
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! S0 `( [4 j  t* c  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;7 b. C; Q9 L7 `; g; m
  
. e, c, _$ i7 U4 S1 c  19、使用optimize table
# B; E& W% |4 T- v! J2 v& C! m  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
' q) p( z* S9 t& ]+ h9 C, a  / K- a4 |1 }9 L( o4 }9 P3 t0 s: @* O
  20、使用procedure analyse()
3 @& j9 b( G8 e' n4 r+ h2 D  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:" B0 _6 z! {# }3 P
  select * from students procedure analyse();
) p$ ^! v: x' m: p. X7 \/ ?  H. c  select * from students procedure analyse(16,256);8 v; ?5 @0 B7 [
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
7 p4 v5 J- F/ N( V' ]7 P  0 g6 }+ b% [' Q
  21、使用查询缓存
9 A2 ]+ \4 w7 s8 d& @; Q) f  1)查询缓存的工作方式:+ i& x$ P7 I- R. P* f* Q) h
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
$ C5 H  l9 r5 x' ^, d  2)配置缓存参数:
2 H4 R" s; u; d( d  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。. E- B! }2 [" a5 x$ A+ w* M
  ( k) y. c1 I) `& g) \
  22、调整硬件
! E. U, ^9 p; J0 g0 ]. K  1)在机器上装更多的内存;
" Y. X# Q0 }) t1 {" D2 o  2)增加更快的硬盘以减少I/O等待时间;
: u" l4 w# m- A' |  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;+ [$ V/ Q$ L8 O- Y  \5 r' o' M7 g
  3)在不同的物理硬盘设备上重新分配磁盘活动;- M6 e( s+ z7 g) X4 C2 A
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
8 R9 k8 {: m; g2 {3 E" g8 M# q
回复

使用道具 举报

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

本版积分规则

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