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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
8 ]; Y) o7 l, y- D8 i5 `  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
& B7 a# T' B$ ?% g* h" S3 F7 E+ R  列出数据库:show databases;
8 T1 _3 L5 U# w" J  选择数据库:use databaseName;) u9 y4 r4 a% O+ C' Q, `  \' l' y
  列出表格:show tables;
  C( d$ c0 y- @$ C# j1 q7 `  显示表格列的属性:show columns from tableName;
/ F& E) M- a$ W$ c  建立数据库:source fileName.txt;4 z, ?* I9 W! ?) X
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;* z$ e/ z# [3 U  O( R
  增加一个字段:alter table tabelName add column fieldName dateType;
' U2 ~2 a8 ~- j# Z% a: g' p4 s  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;* W0 c! Z6 U; Y0 u7 t
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
8 E) `" u. @) V  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";+ M" s2 Q* o5 a5 w/ d% E; I" _
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;, ^9 l( M: K3 g1 z  ]4 [, s1 V* S
  查询时间:select now();
( b% G0 D# w2 c) [$ C  查询当前用户:select user();, k/ E& E2 w/ `1 {1 E( G
  查询数据库版本:select version();
6 E2 N* q% Y! g& A5 I' \. g4 B6 N% F  查询当前使用的数据库:select database();* T1 Q+ Z! v" ^
  / l7 a0 }- B0 `/ f
  1、删除student_course数据库中的students数据表:
9 u8 c0 F. |7 T6 g  rm -f student_course/students.*# K6 p0 r- T2 k/ e5 h
  " W4 d* U0 @# E% H" o
  2、备份数据库:(将数据库test备份): X  I/ f4 h2 ?7 l# J& H7 j2 l
  mysqldump -u root -p test>c:\test.txt6 }( g# P) f! M' |, r
  备份表格:(备份test数据库下的mytable表格)& e8 R3 K3 F0 v3 W0 k  B4 C# M+ V
  mysqldump -u root -p test mytable>c:\test.txt
7 X; k) c9 B( @6 Z  V  将备份数据导入到数据库:(导回test数据库)3 p5 ^: t( i5 P) J1 M$ Q1 z. Q, S
  mysql -u root -p test<c:\test.txt3 O' {4 ?" ?4 z* N% C
  5 v4 [. v+ S7 g- Q0 F
  3、创建临时表:(建立临时表zengchao)
8 }( ^4 B+ C1 I. Z! r  create temporary table zengchao(name varchar(10));
9 V+ C5 Q0 E: g" ^6 _8 W  
' U5 I! A0 b- r: D& Z# C  4、创建表是先判断表是否存在; \2 B+ P5 J9 L( T( j( z
  create table if not exists students(……);; A% S: f. g+ c* T
  2 R* x7 T/ y4 Q% u3 k
  5、从已经有的表中复制表的结构
+ g2 K6 I" H7 ]! N& O  e# D) T  create table table2 select * from table1 where 1<>1;! [* m  h4 `4 @' w- ?
  
+ q: T4 K) c' r2 y/ @  6、复制表
- o, w; K  m. f5 ^3 k$ y) {  create table table2 select * from table1;
% x' H2 F( Q+ d4 V9 z# u  
2 E! @* P( A" ^  7、对表重新命名) o3 K% d9 m% {! f# N  l
  alter table table1 rename as table2;
7 }# W9 Q4 h+ q1 M2 n9 x& a  
5 {: x' p, B* R9 @* R  i( D! G  8、修改列的类型! m0 o. u, z; T! s- V& V# n; d
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
2 u; A! T/ t* ~  y/ ]0 H$ i, D  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned% d- C: k4 \# X9 T" \+ _4 @8 y
  
" Z. S2 ~/ }/ Y9 o- ?/ l6 e. {4 y' U  9、创建索引) e6 ~8 L3 h1 r& a
  alter table table1 add index ind_id (id);$ M" H% G# a1 x& J/ m+ R" t+ B
  create index ind_id on table1 (id);
8 q: D: d& j  |. x2 \. p! b5 I' a  create unique index ind_id on table1 (id);//建立唯一性索引+ j* T8 r( Q# Y) ?$ @+ b% Y; t& J8 O
  
( O. C6 F3 X# P! }  10、删除索引
1 P1 `6 `4 g9 Q: v( Q% _+ V  drop index idx_id on table1;
' X; @! U( O* H5 w6 P7 o" Y, D7 W% V  alter table table1 drop index ind_id;
  t  {( H. N) Z$ m" L  
. q7 B6 m/ k) h7 {' X( d  11、联合字符或者多个列(将列id与":"和列name和"="连接)+ f* ]: Y& M' o- a
  select concat(id,':',name,'=') from students;$ G% w9 [: U, w+ J) M
  
/ ?) u% G: B7 H7 A  12、limit(选出10到20条)<第一个记录集的编号是0>% N0 M8 j; R! A% m
  select * from students order by id limit 9,10;9 l  Q( A  B! {5 L: h
  ' b- N) J& K$ S; R3 O
  13、MySQL不支持的功能: A; j8 w/ }9 l
  事务,视图,外键和引用完整性,存储过程和触发器
  \; g! |8 A  g  m# p  
9 _$ A  D8 z, [0 R3 k: |  
! o0 X0 L/ Z9 v1 ~  14、MySQL会使用索引的操作符号3 D$ x5 ]! U& F. }
  <,<=,>=,>,=,between,in,不带%或者_开头的like2 t( R) X3 t6 A; M1 k
  , Q. m9 z, F3 t0 O" x. l* ^
  15、使用索引的缺点8 j* k+ Q6 }9 W% C2 n7 Y$ d
  1)减慢增删改数据的速度;
0 ?6 m- x& ]) p3 Z6 M  2)占用磁盘空间;
: Q8 s& h; x8 T# M  3)增加查询优化器的负担;/ v6 S, I% W  V/ N, ^/ g
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
# g8 S% d6 y* y1 y) Z  
+ g3 Q% T6 Q: P  16、分析索引效率
% I7 S4 l/ G/ O3 s. @' G  方法:在一般的SQL语句前加上explain;2 D( g0 i) ~8 U; O- K7 w
  分析结果的含义:6 ?$ z; s: T- @" S
  1)table:表名;6 M) U: W/ Y/ i9 N  n' E7 C; M
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;# M% J& O6 Z- k9 c' I
  3)possible_keys:查询可以利用的索引名;' A- F: B) |; v, D+ N2 j
  4)key:实际使用的索引;2 ~- I4 t5 N& {9 \8 h: G" U
  5)key_len:索引中被使用部分的长度(字节);
' ]4 t, Y& N) D% |: ?/ Q& i  6)ref:显示列名字或者"const"(不明白什么意思);
, b7 T! S8 s& a$ U7 ^/ o  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;* D" A! W# C0 Z4 m  Z% R
  8)extra:MySQL的建议;
+ D, p1 s2 c- w$ k  ]- i  # Z, F' Z$ Y6 L0 S8 a3 {8 _
  17、使用较短的定长列# \# z* b# R& D4 r. ?& A+ c
  1)尽可能使用较短的数据类型;0 o8 R$ i" G5 ~5 n4 _( h' a, ?
  2)尽可能使用定长数据类型;
2 Z. i0 G/ }, Y  a)用char代替varchar,固定长度的数据处理比变长的快些;! ~, w7 n9 b) P5 ?
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
* q; g2 a' E8 r  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;- Q2 O8 c( @, q# r+ H
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;" v5 a  K8 z/ {9 b# t
  
) ?; F2 @- i& ?  18、使用not null和enum
8 M1 p; I- d3 R4 Z. _  i: E  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;! W: {0 Y) z4 @, N% G' @
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;' ]8 \1 O2 ^# D7 f/ i7 ~% s
  
6 M" ^/ [& e/ N8 l  19、使用optimize table
6 q, C) r5 k- l5 ]( y  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;6 x( O: g9 ^6 `  X+ c
  
" N, j+ k3 t& A# V* M  20、使用procedure analyse()
8 a+ J% {6 N' i0 }- n5 D4 P( }  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:( ~( [6 o. ?8 y$ V# i$ T
  select * from students procedure analyse();
3 ]8 P7 B8 w  o6 M$ w  select * from students procedure analyse(16,256);$ J: S6 j9 i6 b% i5 U
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;( n# \) }' J. p( M: v. U4 @# V8 Y: q
  
0 H- y8 Z1 E- j6 D; w) i0 o  21、使用查询缓存
$ ^; q  l. J- z% W0 |6 H  ~  1)查询缓存的工作方式:
1 {; ^! h. R. P8 f* ?: c# D  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
8 a9 [7 Z# K$ z5 }+ h  2)配置缓存参数:: d0 H: |  q" D  }" d0 e
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
3 J1 o9 ~7 k% J2 C3 Q6 `  
4 C# o# J6 u% m8 z! @# A  22、调整硬件
( n' u8 a" |. H2 x: _/ n  1)在机器上装更多的内存;! V2 ?/ P0 H1 g: ?& A
  2)增加更快的硬盘以减少I/O等待时间;
& M' a& Y) }' V# P* S$ R  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
( ]; k0 o3 D4 t! _  3)在不同的物理硬盘设备上重新分配磁盘活动;
- J: S  q; w9 K/ y+ L  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。) W* \/ _* E- O
回复

使用道具 举报

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

本版积分规则

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