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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;$ E' A( ]2 D( h0 v7 O* y5 N
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;1 {) k9 g9 f8 k9 l  i
  列出数据库:show databases;
3 T5 ?. _" E/ p2 g% K3 q; c  选择数据库:use databaseName;
- q1 W* m' e' b1 y/ x6 M  列出表格:show tables;+ m) w- e7 o/ _+ @
  显示表格列的属性:show columns from tableName;4 Y2 p5 P, V6 D% s1 X4 R
  建立数据库:source fileName.txt;* `8 c2 _; ^$ Q( M/ s
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;  V$ [! B0 H' V+ k. b
  增加一个字段:alter table tabelName add column fieldName dateType;6 ~" B  G7 m4 U3 B: l& u
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
( T% r: y& X/ T1 d8 Z- Z5 Q  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;; X' N2 U$ G# ^
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
1 C* U+ W# P& M  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
* I) @" m# a: @+ J$ M/ N; l* x9 Q  查询时间:select now();) J$ K) C$ U: d' j8 u+ r! a
  查询当前用户:select user();
& Q" N) v4 f% e; [0 m6 }2 y  查询数据库版本:select version();
! X4 O9 W$ n2 O  查询当前使用的数据库:select database();! j& v# B/ w, h/ ?8 {4 n
  7 B- U4 a( D$ ]0 |* L2 ~
  1、删除student_course数据库中的students数据表:
: I6 u+ S! u1 k5 M- g" H  rm -f student_course/students.*. a4 L3 t: ~1 M$ L5 s4 D
  5 o4 X. y( q9 W
  2、备份数据库:(将数据库test备份)9 l# \* V" d4 A! V3 z( h8 E
  mysqldump -u root -p test>c:\test.txt6 O+ L, ^& J2 i9 @- n7 G5 Q
  备份表格:(备份test数据库下的mytable表格)3 ^( S7 k) n4 {" S
  mysqldump -u root -p test mytable>c:\test.txt8 [4 n" g5 b& i1 l4 o9 K
  将备份数据导入到数据库:(导回test数据库)! q+ O, e1 q4 E3 |! h7 ~
  mysql -u root -p test<c:\test.txt" y0 N% N0 H. L/ m* o5 \
  ; ^" Y5 O' ~+ v& A7 x. {. f3 E, d
  3、创建临时表:(建立临时表zengchao). B, O7 g) I' m+ X
  create temporary table zengchao(name varchar(10));5 Q0 y" x6 P2 ?0 m. c
  / G+ U8 d, F1 f# z2 j# _2 L
  4、创建表是先判断表是否存在7 o; p7 y- [0 S! L9 i; k* T
  create table if not exists students(……);6 Z# a9 t! ^4 d  }4 q2 X
  # A+ R% x+ L+ k0 _$ R+ c4 e" h
  5、从已经有的表中复制表的结构
# O, a9 q2 ]- a0 W, |' m6 ^  create table table2 select * from table1 where 1<>1;
) m: }( m$ I4 i- e6 ~  
. _. U7 ~! q" K# c. R% T- l* U  6、复制表! O7 [# C$ {8 j6 ]4 W# c# \
  create table table2 select * from table1;9 U0 R- }. a: N9 A& J
  1 k6 b" [% M2 ~1 t4 C! U6 H# C
  7、对表重新命名
5 z7 b8 a5 C! h' ~6 K7 s# d  alter table table1 rename as table2;* S' c2 x( [1 K5 U7 x9 P9 f3 c
  
4 p5 ]8 e+ y: i8 n3 T1 v' b! o  8、修改列的类型$ h7 F, }) Q) q3 H  z/ F7 D) V
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned5 r. ^4 {* ]" ^/ a: {( e) |' g
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned! q2 g  e4 H' \4 \1 c- ~2 u; v
  % |& ^: \/ q1 M' I
  9、创建索引. W5 d2 s. ^7 e+ e. _  t! ^
  alter table table1 add index ind_id (id);
* a' m/ x, ]# v2 m3 l9 D: ~  create index ind_id on table1 (id);
, w$ G! M7 v% k8 T, g! \' B  create unique index ind_id on table1 (id);//建立唯一性索引; S  v8 \& y( R% i8 A! }
  
4 ~. ^% l$ ?9 C7 w1 I1 |  10、删除索引
) e: J/ T5 m1 e7 J: T  drop index idx_id on table1;/ ]2 k9 d. T/ u5 {
  alter table table1 drop index ind_id;$ B, C8 U! [1 y! p  i* {0 j
  . l0 o; n& [# M2 P% A
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
* Z5 n; Y: X) {  select concat(id,':',name,'=') from students;
7 ]- G8 i6 q" c; ]9 S# i+ B: J  
# N! d# K$ p" I; R* O  12、limit(选出10到20条)<第一个记录集的编号是0>% M/ A2 @/ N! G
  select * from students order by id limit 9,10;& ^& w0 ~5 i! v1 v
  
$ {/ w  [! {0 }0 S3 W6 ~7 C* Q  13、MySQL不支持的功能
& Y9 A2 c3 s  B  ]) C& x  事务,视图,外键和引用完整性,存储过程和触发器2 \: {. c& q5 H* _" o* k* h' E
  
  V+ L( V% u0 H5 O- @& D6 O/ f  
0 P7 u% ^" N! z% G7 }! G  14、MySQL会使用索引的操作符号( n- H& s: J; S- ]
  <,<=,>=,>,=,between,in,不带%或者_开头的like
; P( x5 X* h( `4 k9 Z+ i& y* ~  
& N  x  E' ?  r% u  15、使用索引的缺点
% \$ w0 Y/ p! T5 v) D; y$ i# c  1)减慢增删改数据的速度;3 X. c1 E4 Z6 E9 R+ M2 N6 ~
  2)占用磁盘空间;
$ Q6 [- Z4 h/ t% t$ }1 ?  3)增加查询优化器的负担;
. L4 F, L3 L" U7 R9 g  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;$ ~0 t( }* d5 A2 g+ g0 T! L
  
/ o4 A! ~' ?3 o2 [: ^  16、分析索引效率0 U0 @$ K7 R/ {0 ]1 e5 e
  方法:在一般的SQL语句前加上explain;7 W7 a) o( I, g" D% V
  分析结果的含义:
9 O, J' M8 ^# c# Y' h. g! h7 H  1)table:表名;
- B2 u1 O: d4 Q  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;3 X0 \* k1 Y8 H( c
  3)possible_keys:查询可以利用的索引名;5 p$ w2 \8 `, q) D, _$ ~; C
  4)key:实际使用的索引;  a( R5 ^8 w% Q1 c
  5)key_len:索引中被使用部分的长度(字节);
. C$ K5 R+ i) A1 d. X3 Q  6)ref:显示列名字或者"const"(不明白什么意思);0 z# n4 B% d' S+ c  ?% g& h
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;* S4 g0 K5 |/ }
  8)extra:MySQL的建议;
3 m. x- I  f: \% C  w" L' R  
& x1 M0 H; _9 m3 B. `  17、使用较短的定长列, M% w& r) g; ?) x9 U, }+ E5 Y
  1)尽可能使用较短的数据类型;
# a, [: Q4 I- o- h# I6 d# m  2)尽可能使用定长数据类型;6 O  O! C/ _) w: m6 i: w
  a)用char代替varchar,固定长度的数据处理比变长的快些;- x, f6 Z& Y5 E1 f! G' k. n1 }
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
, U+ E8 B1 a( ~, ^  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
! H& [0 T% K" v, S3 S; b% H: p  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
$ J+ |8 P* L9 X$ D1 ?. U8 |  - D0 d" n' N6 K
  18、使用not null和enum0 K$ J) t% N7 N- Z8 _- |  t
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
( K/ b1 ?3 f- L8 r5 m' T7 i  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;* ^, f2 J$ a5 ]- ]2 W
  
) n" s0 f% f) T8 k2 ?( @$ R0 H  19、使用optimize table  k5 W3 M$ ], i4 E! D
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;3 R+ J; J3 Z# K% S
  
$ Y! o5 h# ~- \, ^  20、使用procedure analyse()( E- Z/ C  z* \9 c4 a) D
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
' N0 E" w8 G+ Q% o  select * from students procedure analyse();- {" y6 U4 h1 x. J% f: T
  select * from students procedure analyse(16,256);0 f) y: g3 o0 P- l3 d1 \
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;- n0 h9 o, ?# r( u* P" a! `
  
) {" ?$ G: d3 y! X  21、使用查询缓存
9 H0 \8 ~3 I, o5 k  1)查询缓存的工作方式:
8 Z: B) u% G2 O; u  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。5 B3 c5 [) }* L' r7 M' {% l
  2)配置缓存参数:
  \7 w. O& f( ~/ k, a, |4 Y  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
7 k; H0 w1 H- H% x5 ~  
; t' j9 v7 R( c6 R7 D6 @  22、调整硬件8 ^7 n+ z0 e8 h5 N
  1)在机器上装更多的内存;
! N1 t5 e" Z4 m0 o9 i  2)增加更快的硬盘以减少I/O等待时间;3 y, k& y8 J1 u
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;* P, C2 a2 X' B' @. l, I# R
  3)在不同的物理硬盘设备上重新分配磁盘活动;
! \% X+ h, q# q, B0 y0 o4 h% G0 [  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
0 Q" q0 t* I& t- s7 N, Q  F  N: ]
回复

使用道具 举报

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

本版积分规则

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