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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;; e, s& o  |& \
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;3 ?  z( w1 [8 J2 |/ F
  列出数据库:show databases;* s. K$ b; x' a. v+ D
  选择数据库:use databaseName;, A0 a0 c0 ~. _6 V% b9 ?" p
  列出表格:show tables;
7 L0 X8 F  c" y7 r0 _  显示表格列的属性:show columns from tableName;( w- G- \' v* d* B
  建立数据库:source fileName.txt;
* i! G) r3 c4 i4 @$ I9 g: s! {  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;4 F1 S& v% K, _
  增加一个字段:alter table tabelName add column fieldName dateType;- [2 x4 \  a. w- h, T
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
+ w: T8 l4 i0 m8 l6 p9 O  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;/ ~" K. v1 Q. S( V' w& R* J5 V
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
  g3 ?& a: O7 @& C4 H- g, F  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
- H% p! ^: g% ~8 O2 x1 g5 j  查询时间:select now();
9 a9 T  K( C* M1 F+ K! U  查询当前用户:select user();
$ B$ n0 w% D# u* R  查询数据库版本:select version();
: J# g; e0 E6 |  查询当前使用的数据库:select database();
: I1 `3 f' b  e6 ~) r  4 q1 [6 a8 F' {
  1、删除student_course数据库中的students数据表:
8 |  `4 H8 ]: L/ X7 q5 p  rm -f student_course/students.*
2 z+ k8 R8 n2 ^  a  
, L8 q3 w; n+ Y( ?5 v  2、备份数据库:(将数据库test备份)" b6 S3 b2 d& t5 s
  mysqldump -u root -p test>c:\test.txt/ J5 p( m0 x8 [5 L) ^
  备份表格:(备份test数据库下的mytable表格)7 C$ k! I6 G: b6 E& t& p, v
  mysqldump -u root -p test mytable>c:\test.txt
4 _7 _, \( q7 z  将备份数据导入到数据库:(导回test数据库)
5 _7 n9 M! g' Z  mysql -u root -p test<c:\test.txt! |8 |0 s# T1 U, \" p) Y4 s4 T; G; R
  
( b, ^4 e9 b  ~5 Z+ b  3、创建临时表:(建立临时表zengchao)- P2 u) ]1 J' E) w1 `6 N9 D
  create temporary table zengchao(name varchar(10));2 `. M. c' O2 ~% j% w
  ( J& W* [+ x2 S' `$ h
  4、创建表是先判断表是否存在
* Q* E1 C( |3 h  create table if not exists students(……);
9 j  n+ J- U! h& h: u  , C! y6 X4 R' ~; ^
  5、从已经有的表中复制表的结构9 O  l, _5 E- l* e  u" j' D/ _8 T
  create table table2 select * from table1 where 1<>1;8 {! a1 j9 S! m6 o% l- i  h; X
  
# U6 p* y5 ~% x6 O  6、复制表
. z4 T% q. Q* K  create table table2 select * from table1;
9 W2 V% ^/ K/ {* \  
, \2 }5 p5 m6 f4 w6 ?4 i  7、对表重新命名
. a  g9 L5 ~  F2 I9 K: t  alter table table1 rename as table2;( x; K* Y' }1 e* x$ d# f* Y2 g/ _
  , R" l; |7 I7 B8 l8 T+ J: ^) h" |
  8、修改列的类型
5 B* U. `7 S" ?. ?  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned% \( i( R  B2 Y7 V" P  c* G8 J: u
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
- Z* n2 i+ E  X4 j  
0 W4 o% K/ }; ^. Z  9、创建索引0 t7 [! m" S3 X7 M$ |
  alter table table1 add index ind_id (id);
7 f2 @% E" T5 P6 u+ A7 ]  create index ind_id on table1 (id);/ t* I% m/ x) |* Z5 E; c$ j
  create unique index ind_id on table1 (id);//建立唯一性索引
4 p( V5 t7 |. N  6 {0 I2 i/ Q$ g
  10、删除索引
& f- g; }) ^( }8 [/ K" B: y  drop index idx_id on table1;
. L- V% a: N4 H, b1 @+ e8 m  alter table table1 drop index ind_id;' U+ y, U' s$ M" s
  / d8 N/ P1 a* |5 [2 u: }4 i4 F+ I( C- {: x
  11、联合字符或者多个列(将列id与":"和列name和"="连接)/ I6 ]! |5 G; f
  select concat(id,':',name,'=') from students;0 u) x& L/ n5 g$ R& j3 y
  0 s4 N& y: _( J/ o, n& K
  12、limit(选出10到20条)<第一个记录集的编号是0>
2 D  @; W/ _  n  v  select * from students order by id limit 9,10;
; L+ D$ |, H. j3 K" z1 i6 H! T. U  % @- f7 X7 g+ e- R) ^
  13、MySQL不支持的功能
4 _5 Z6 g- L& z9 I8 _, i9 l  事务,视图,外键和引用完整性,存储过程和触发器
2 ?3 h0 M: R& z! q& Y  ; l; T. B. ?1 l8 I
  
1 b3 V& x% l% s# W/ {  14、MySQL会使用索引的操作符号
0 |' ^6 v* z' L; p; y  e  <,<=,>=,>,=,between,in,不带%或者_开头的like
; G! r4 f1 ]6 K5 \3 f3 s4 r# w, w  5 G5 @- r* t) O* K
  15、使用索引的缺点+ o/ s" |8 z) d# }5 _5 S
  1)减慢增删改数据的速度;
8 G, v6 U+ }' N$ S1 ?/ O% L  2)占用磁盘空间;1 I$ u1 g; C7 m' L% |/ ^$ c
  3)增加查询优化器的负担;
  p) J6 Y; [# Z6 n  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;  W# D; c. Q& Q. y, {6 M7 r
  
5 ~' {4 b; y3 I* ^* n; n  16、分析索引效率
4 T4 \2 K/ F2 m5 _  方法:在一般的SQL语句前加上explain;8 n5 @  D4 e8 B% p3 j( d
  分析结果的含义:6 Y2 X4 c# E% B5 a8 O8 |. a
  1)table:表名;
9 _) T1 {# z/ S' U  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
5 r9 R7 L+ _7 Y& f: M- J  3)possible_keys:查询可以利用的索引名;5 y+ |- l8 W) e/ I2 `
  4)key:实际使用的索引;
! p- S) c5 i* f' a2 _  5)key_len:索引中被使用部分的长度(字节);
  a7 H4 _# U2 I9 u* I6 K3 W  6)ref:显示列名字或者"const"(不明白什么意思);
# H4 k/ Z( o; b2 ?" ^& X) m' ^  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
) p# H  u; o  ^3 W3 d3 z  8)extra:MySQL的建议;1 w1 R, o" p8 D* R  Y/ p
  8 g1 Q* F3 A5 O8 s4 {) N
  17、使用较短的定长列
* u  [- X, e. d6 Q0 B9 I) t* t# ^  1)尽可能使用较短的数据类型;1 D. c; s( R  p- t3 d
  2)尽可能使用定长数据类型;% r0 w5 |/ u" P$ a! f
  a)用char代替varchar,固定长度的数据处理比变长的快些;
6 @; Z7 g# P/ c; p  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
4 \- H2 {6 \) v6 k! |9 `  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
+ O6 ~' D) K3 W5 R4 N. [7 q+ }  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
+ R8 S; L( ^+ T  6 v) n1 S2 C& ?* [
  18、使用not null和enum2 W* S' t7 S9 h$ V
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
% V1 t' f: ~# K" ?( l; G6 F2 |2 T" t  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
" Z* i" Z2 A4 q9 \- c$ A  
& V/ ^8 L6 S7 e, R; ]  ~  19、使用optimize table1 Z* T: L9 t; u7 U, `
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
' v4 G) v; ^% X9 `$ d# H  
3 z: s: O4 J0 O# P5 s* _3 ~$ }# J  20、使用procedure analyse()
2 K3 b/ |& \- s, d& E% C( E4 n  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:- I6 ]+ j# r! U7 D5 M3 w1 `/ G
  select * from students procedure analyse();
7 x4 W" a/ b; ^9 P3 Q7 v5 |  select * from students procedure analyse(16,256);
. A' {; l. i' e- K" o  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;' z' d/ n, M% F. I* `) j
  
2 Y/ T% F& a9 _  i  21、使用查询缓存/ `9 X: {1 x2 Y$ p# ^' F
  1)查询缓存的工作方式:
# ~1 r. j  w; n5 N- @2 k) v! P' u& V  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
3 y; g/ I4 y! b4 U4 b# W9 N  2)配置缓存参数:% c: n. D6 a0 D( ?2 r
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。/ a4 Z: \! U: P5 x
  / d, w# k) I7 M8 L# t! ]8 v4 o
  22、调整硬件
! X9 \. N3 `  V1 F$ G  1)在机器上装更多的内存;+ z  v  y- U* y, f( ~: b! ~+ s
  2)增加更快的硬盘以减少I/O等待时间;
4 `  f4 F! \8 N' j& Z  Y% G9 i/ p  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;- I- A# {0 {- b/ h# C$ _* l* d
  3)在不同的物理硬盘设备上重新分配磁盘活动;- l# Q/ O" c" g
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。1 K0 v* o0 l% M9 o
回复

使用道具 举报

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

本版积分规则

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