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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;$ q$ w8 C# d7 O/ B( w
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
4 c0 E+ B" T' a- h9 ]2 \: e% n  列出数据库:show databases;  P& t- t( L# c" Y6 U; s& ~0 T
  选择数据库:use databaseName;! [6 X+ H: Z: @' R! i- g4 ^, w7 d
  列出表格:show tables;5 _0 q1 j8 s: Z9 w
  显示表格列的属性:show columns from tableName;
; C* s" b; D  x" }9 F$ x  建立数据库:source fileName.txt;
% i( n5 g. m' D6 t  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
8 E+ v$ Y) y# J+ L. I& P; u8 f* o  增加一个字段:alter table tabelName add column fieldName dateType;# G0 \4 `- o. a7 c$ i0 \0 @/ M
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;) X7 L' R! I& ]- E$ l0 Q
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
5 a; a" N- K( S; c& w  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
  s9 L- o( e; m" Q# y! P/ M/ U# q  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
6 L; W& ^; M8 O8 o  查询时间:select now();, c$ U! R0 _! `& I5 y
  查询当前用户:select user();% V% I# U% ~# e
  查询数据库版本:select version();  h2 V( |6 ~- c7 P' Z. s
  查询当前使用的数据库:select database();
. T0 i+ k$ \4 X; u! r/ }+ J# l' y  
" u1 V2 H; P7 r3 F) q/ X  1、删除student_course数据库中的students数据表:) s& m" S& R, D0 h  d: H" m
  rm -f student_course/students.*- `& }0 [8 {& Q. _0 ?- Q9 y% a
  # c. `" [* N9 u4 ?, @$ t
  2、备份数据库:(将数据库test备份)
1 b+ }5 ?1 G7 m( a$ P0 m  mysqldump -u root -p test>c:\test.txt8 {1 E: d" A9 i4 m
  备份表格:(备份test数据库下的mytable表格): A5 ]$ h4 a, w  i# R
  mysqldump -u root -p test mytable>c:\test.txt' I, ]$ ]. u6 t: H
  将备份数据导入到数据库:(导回test数据库)
4 f3 b" `! w0 d  mysql -u root -p test<c:\test.txt( y/ m! q. a; b
  
$ e  g! ]; u: Z  3、创建临时表:(建立临时表zengchao)
0 B/ C9 Q& x# ?  create temporary table zengchao(name varchar(10));% C0 ?% X4 h7 @5 P. _$ s
  6 L# x$ Z$ j4 A5 b5 ^
  4、创建表是先判断表是否存在
) f- s) w) x% Y# R. q; k& ?  create table if not exists students(……);
5 ~8 A1 U4 l' `  
  M4 ~! L2 H8 h' O$ G  5、从已经有的表中复制表的结构. t) Z8 ~& D. g% A
  create table table2 select * from table1 where 1<>1;5 u5 X9 W! D4 M* P
  + X; A$ E$ U" L& C  n
  6、复制表2 Q" G" w8 Z' L% b/ d  o0 e) [
  create table table2 select * from table1;
: T6 r- @% d! R# L' K% Y  0 u6 ?5 O. P# W0 ^1 X/ W
  7、对表重新命名
2 j) J! X4 y: ]- m/ S! Y3 u  alter table table1 rename as table2;
' `# W/ k1 d& ~, y0 M+ |  2 `/ X1 |: A" a( m- j4 y1 |. M% D
  8、修改列的类型4 C% G& W+ g+ M3 M
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
% j2 x7 o0 A$ M4 ^+ K/ C8 \) A  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
3 g. M# X0 Y, y# Q% m) S. v* v  
' z. |' D+ }& j7 }  9、创建索引
. X0 q7 S2 z- a* Y% n  alter table table1 add index ind_id (id);
  b9 i; Q' X  M! x  create index ind_id on table1 (id);
' t! Q, l! e' M  k1 Y8 h  create unique index ind_id on table1 (id);//建立唯一性索引
, {/ h, k/ N4 h5 M6 t  / j4 q2 x% b$ y( A! m4 ]% f3 d& R
  10、删除索引
' K: I+ W& g4 l2 [" g- \  drop index idx_id on table1;/ H9 n0 ?6 `5 |6 _5 o
  alter table table1 drop index ind_id;  [; S" P) N" t: Q2 i
  $ _" T) N6 K; ~; g
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
  _' N, }# r' v  select concat(id,':',name,'=') from students;
& X8 S0 [# Q3 W" s6 I( r4 s& Z  ) [* `9 m8 G6 B8 W/ {, L
  12、limit(选出10到20条)<第一个记录集的编号是0>6 [" I, Q2 P: t/ f4 i8 d
  select * from students order by id limit 9,10;; h' |/ M" E, b2 @5 E. O9 h6 s; S0 y
  2 q; n1 H# c) j
  13、MySQL不支持的功能; h  G  d) p( a/ _' b2 G5 u
  事务,视图,外键和引用完整性,存储过程和触发器. C5 n* y, j2 ^3 s" c! Q
  
( l5 }" T/ v& @  
* I% P: J% B- h- e5 F+ J. T4 @  14、MySQL会使用索引的操作符号4 n2 o% ]; v! a
  <,<=,>=,>,=,between,in,不带%或者_开头的like2 s5 G' p7 Y1 B8 l, {( F+ c
  * t+ J: E% n7 m5 Z, M4 ~5 M
  15、使用索引的缺点
3 T9 V: s" I: D- }  1)减慢增删改数据的速度;4 u; K4 C+ ^4 {) r8 }
  2)占用磁盘空间;
5 [: {0 j1 X3 R7 a' y$ T7 R2 p7 w  3)增加查询优化器的负担;4 W( t& t7 w8 I- H" ^( Q, c( \" E
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;2 K; J2 L# h  }" J2 `  j
  % O' f- M! m# f# M. J, \  R
  16、分析索引效率
" Z0 h5 ^- \4 A  j! P% ~2 ~  方法:在一般的SQL语句前加上explain;
) t2 U) J, x6 r: m  分析结果的含义:
! t- Q9 l9 P7 m7 {. p  J/ a7 ?  1)table:表名;/ b- X( ]/ l$ F* s" G6 a
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;- }1 n+ Q" C; `* j( x2 L* R0 \
  3)possible_keys:查询可以利用的索引名;
* {' ^5 {6 ^# X* ~) }$ J  4)key:实际使用的索引;& N8 S. l. w0 U$ _- B
  5)key_len:索引中被使用部分的长度(字节);
: z' q: w4 D" X/ g& q* E6 @  6)ref:显示列名字或者"const"(不明白什么意思);) f% E3 z. p; y! c4 s
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;7 l2 Y0 }9 ~' h& q7 k4 Y: m
  8)extra:MySQL的建议;
7 ^, j. [( z! e& N# {, I  
) l# s* j  H& u. V  h$ u0 v' m  17、使用较短的定长列
3 u. n) i# b0 l7 l& x  1)尽可能使用较短的数据类型;- B4 T2 ]. ?' Y* z# D! E" h+ M
  2)尽可能使用定长数据类型;
: x" t8 ?3 i) t# q  a)用char代替varchar,固定长度的数据处理比变长的快些;% o* n- m9 B9 B6 g% Q( C  f
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;8 s* O! Y' N, f% Z, C! @' v
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;* \% p5 k8 j& G( p
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
! L: a$ _" E4 W) W; o$ S- F  
5 u3 \7 n1 ~8 M8 v& ~; G  18、使用not null和enum
2 I* R' u. P4 j4 H  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
& G, E! Q, E( D  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;2 H+ S" j7 J7 [% L
  8 i- b9 _! ~0 s+ h) b' r% O
  19、使用optimize table3 a( k' e& }2 s7 _/ Z, a
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
5 m4 a+ r1 g6 k  
0 Y/ W1 K% Z& T4 n( N% x- x& y  20、使用procedure analyse()
9 j0 f) ^0 P; L0 m7 G  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
$ _  p. w& e$ F! d6 \! s& p- n  select * from students procedure analyse();8 e7 e: N% `* c4 [6 a0 i
  select * from students procedure analyse(16,256);' `' F( _. F5 w* \7 c6 [
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
5 t, A  r  \9 a/ ^  
, h; v! J# y2 |6 H" U+ F0 I/ V  21、使用查询缓存  X3 E) K) M  G* J
  1)查询缓存的工作方式:. \: M$ J1 r; j) I3 _" n
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。0 C7 Q8 h9 J  ?& M' ]  P
  2)配置缓存参数:
" z2 Q# ?6 M0 H  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。9 a. {# q% Q5 T
  
. G- I3 }2 o; T. c' }  22、调整硬件
1 I* A& h* A* l  1)在机器上装更多的内存;( e3 T: W) D7 l
  2)增加更快的硬盘以减少I/O等待时间;
8 ?8 X6 X# l% _7 `: `! _, S$ {  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
$ j" A* ~8 a$ ~" f- w2 U  3)在不同的物理硬盘设备上重新分配磁盘活动;
- x5 |) q+ y: x; }3 v/ O; N  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
& t$ }2 O8 V2 r9 c
回复

使用道具 举报

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

本版积分规则

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