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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
启动:net start mySql;# f1 k& T$ V: w6 _+ O; L
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
5 C3 R. N2 s. W& s$ H  列出数据库:show databases;: A6 E( b) u9 B; {! C  y: `
  选择数据库:use databaseName;! |% J+ @8 r5 ^/ A
  列出表格:show tables;% }! R& J: O4 W1 f& |# R. d: r6 w
  显示表格列的属性:show columns from tableName;
; {+ w3 C* d# u- Q, K$ v+ S, h: n  建立数据库:source fileName.txt;# ]# X  P& a1 Q) H. e2 v
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;# U; q% \1 t6 X: \* u4 d1 ^
  增加一个字段:alter table tabelName add column fieldName dateType;8 c0 |. p' k% Z: K( o) O( _% ?" |
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;9 A/ b/ Z6 q( R! R" V* S  [/ I0 {& S9 s
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;/ n- @0 |" q+ @6 h& O! n" M
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
6 `6 D( v  e8 n1 t) K. t. S7 v  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
2 M7 X5 D2 u/ j: j% t7 G  查询时间:select now();
9 H) }' w. Q) O  查询当前用户:select user();; P2 C# D4 f( }! n
  查询数据库版本:select version();9 i& V/ l4 K5 L: Q# b
  查询当前使用的数据库:select database();% ~0 \; b/ W9 v( X! w8 T, s
  
6 Z/ {& m( J# i" `. C/ o# K7 h  1、删除student_course数据库中的students数据表:  c+ E  ~* w+ G' u& t! c
  rm -f student_course/students.*/ u  S' ?  P% }2 P; _3 T' V" R& b
  . k" H* j: Q( l- _# J, p
  2、备份数据库:(将数据库test备份)# [* j. C. o1 P. @/ b8 {
  mysqldump -u root -p test>c:\test.txt
, G6 M# E0 F' r  备份表格:(备份test数据库下的mytable表格)- b  v% e2 n+ u6 f# w3 O
  mysqldump -u root -p test mytable>c:\test.txt
6 W4 ^# n) i2 B  将备份数据导入到数据库:(导回test数据库)
& k9 J2 }( c& C( ?  mysql -u root -p test<c:\test.txt" O! K2 E8 M5 b( P# K- r. @
  1 o  m! \7 ]2 z
  3、创建临时表:(建立临时表zengchao)
1 l* n9 `& c3 G/ ]$ F  Y  create temporary table zengchao(name varchar(10));, Z6 y3 M6 R. G) t0 ^
  
/ I+ _, x+ y2 Q% x2 n  4、创建表是先判断表是否存在
- T& H5 P( A* [. D  create table if not exists students(……);$ P) ]" q" j5 A" `# B" J9 v
  
2 h6 `" M. _4 V" S0 o  5、从已经有的表中复制表的结构& O+ R) d: a, U
  create table table2 select * from table1 where 1<>1;8 g2 Z! r. E* X/ P2 Y, O
  ( u, j" B7 |+ q: l
  6、复制表  N$ t' t2 l1 T5 Y9 a8 H- j  D
  create table table2 select * from table1;1 i, r) [& N- i  G+ N3 a
  
' `! O$ O* Z  {- `9 B- B  7、对表重新命名% |+ u+ b% _& K# M2 b5 f
  alter table table1 rename as table2;
# T) K0 l7 g8 T$ f8 ^7 w  z  ' W$ A3 F) G6 u% {) Y5 e, ^
  8、修改列的类型+ A! F3 F0 Z) U! n1 T
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
  j& i5 D* ^" a* q9 T  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned2 @2 e  p* \" B: Q: g) P: z
  
: I% Q, ?9 T) j9 B/ T/ H% s) ~0 ~  9、创建索引! B* B; ~8 V8 s
  alter table table1 add index ind_id (id);
2 R" ^$ t  f# H+ Z  create index ind_id on table1 (id);
  E: A9 X9 D" @" J  create unique index ind_id on table1 (id);//建立唯一性索引
+ K( C9 @/ U4 i! b  - _, _# e+ X+ D* t8 v
  10、删除索引. S* e7 Z1 x' L( `( u& n
  drop index idx_id on table1;
# G) T4 q  p2 P6 d  alter table table1 drop index ind_id;. D- x+ V$ G% S2 X5 u& r
  
2 n4 t6 n4 v, c  11、联合字符或者多个列(将列id与":"和列name和"="连接)- l* |5 e- t9 y7 f6 o" u6 Y; ]
  select concat(id,':',name,'=') from students;
( j* E5 y# F: y7 B; w' h, ]* a  7 a% L( G/ V( j& I" m' ?; u
  12、limit(选出10到20条)<第一个记录集的编号是0>
  F& o. u! p1 f: S7 O1 S$ u  select * from students order by id limit 9,10;5 e3 _+ G% ~# h( f8 y3 c# U
  
! M; i1 P' x# G3 S' g* n  13、MySQL不支持的功能
( E/ f$ q  }+ {. ?/ ~  事务,视图,外键和引用完整性,存储过程和触发器
' n' J3 V% q9 i8 h  
; G6 N- w9 P1 @# B  
' l3 w2 M) |8 k6 y  14、MySQL会使用索引的操作符号* D- e1 U; p( s# Z4 m" p# n. Q' U# j
  <,<=,>=,>,=,between,in,不带%或者_开头的like1 H1 b  R; Y$ z% S
  
) C- n& U( ^3 T) R( `5 O) Y, F  15、使用索引的缺点
$ L( E8 ~2 b. X5 }  1)减慢增删改数据的速度;* k+ E7 s; e: [% i/ B: y6 n! P, |9 z
  2)占用磁盘空间;9 f, _/ u9 t. \( A( o6 ^+ A4 A- ~
  3)增加查询优化器的负担;. Q8 T- U9 p1 G) X5 d8 {; W) x
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;- m# L3 R" ~# |5 \2 H9 Z) J& L
  ) y# Q, B$ J" b
  16、分析索引效率' t; R* X6 @1 q) b$ V8 [5 w
  方法:在一般的SQL语句前加上explain;
: p+ P: q0 D4 _6 u- d  分析结果的含义:
" [! L: `- x: N  1)table:表名;
3 L6 {3 H0 T/ \* B  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
( C8 o/ f7 R6 q7 e6 W0 ~  3)possible_keys:查询可以利用的索引名;
  E1 Q1 a' M8 P$ F  Z1 S  4)key:实际使用的索引;
  j* D7 {0 ^& {" R3 b' E* P  5)key_len:索引中被使用部分的长度(字节);
/ a/ T$ S* c2 A8 W2 y& U  6)ref:显示列名字或者"const"(不明白什么意思);
) Z/ ^- [% o+ I! L7 j  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;! w$ M) E7 S7 P; ?# K. h8 n
  8)extra:MySQL的建议;
6 B: e: z6 c6 L$ m  1 O5 |2 _' g7 V# a8 ]
  17、使用较短的定长列% @2 \2 d' w. y  u/ Z; M' v) t; D
  1)尽可能使用较短的数据类型;
/ L" `, ?- }* e! I6 ]5 `7 _  2)尽可能使用定长数据类型;
2 \+ ~: O% N! {1 }7 T- [! |  a)用char代替varchar,固定长度的数据处理比变长的快些;
$ a' [) }* {- b2 y  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
& I0 H/ h( z+ o: Q' T1 o; f  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
# a$ t' |1 q5 R% N8 f8 m  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
1 _! p0 {$ x5 j! j. z/ q: e  7 O: n; G& d, P! B. p
  18、使用not null和enum) f! ^! n# }  y! y) q( R3 z
  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
% n0 L) C, n4 y4 F: f! O% L) [  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;% ^  p9 f/ S' ~1 C/ G; _; w
  ) ]+ ?' F' s: T/ r9 H9 U' V
  19、使用optimize table1 B3 I' ?$ a. D6 U9 f2 }
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;* P9 m' _9 c& E* E0 X/ w
  8 n3 \. [* Q  X/ I- V9 y0 v/ A
  20、使用procedure analyse()
$ g3 _9 [' T. o& z3 H: c6 y  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:$ Z7 e: b$ `6 u& u6 [
  select * from students procedure analyse();# v# s: I5 U" ]8 `2 f5 r2 T" b
  select * from students procedure analyse(16,256);7 q2 f, N5 a1 B* i: L& ]  X
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;4 C+ ]% M2 i% n$ s9 z" S
  
( O8 B- H( w' E& h3 ~, Z" l  f. \  21、使用查询缓存) _' L1 H9 r( W  K0 Q7 N# z3 r. X) ^1 `9 l
  1)查询缓存的工作方式:
  ^" T, X9 f0 P' s7 o. I) A  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。; z. ?. D& U! b2 X- t6 ~" q
  2)配置缓存参数:3 y9 J9 o: W) R6 j; D
  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。/ v  i" g/ k/ [, I
  2 |/ @: ?: U) {, K4 y5 p4 a1 X$ n
  22、调整硬件
' [. N* j) w2 a8 T$ P) c" t$ L2 G  E  1)在机器上装更多的内存;
9 z, H% {  O$ A- R; |0 ]# Y  2)增加更快的硬盘以减少I/O等待时间;2 N: B; e. r& d% ]( `; ^' _0 c
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;) S2 u% e  S4 y2 f9 L9 s) f0 h) M
  3)在不同的物理硬盘设备上重新分配磁盘活动;
6 O7 M' t" w" o* i5 d: @5 s  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
6 ], P) Y# \  P' c) M
回复

使用道具 举报

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

本版积分规则

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