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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;4 u# q& m0 b' r" t4 Z, a7 J
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
) I: r7 S( Z5 K& U4 y  列出数据库:show databases;$ N  U" V! O# Z% W7 `8 O( _2 V
  选择数据库:use databaseName;
0 P& K) Y" ^" ^+ ?. @2 C  列出表格:show tables;
$ j  ^3 g9 L9 X$ w3 ]. n, b  显示表格列的属性:show columns from tableName;
7 K- b/ t3 J; V' v. b* @  建立数据库:source fileName.txt;0 D% J, H$ T2 p# a5 W  r
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
  `  S( s7 a$ g& {  增加一个字段:alter table tabelName add column fieldName dateType;
! R% U0 q3 G, u* Q7 G5 p: }* c" b3 T- v  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;: Z& I$ c; U4 o( u1 h  J
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;9 A* S5 s; B( B. n
  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";; @  |7 N5 d" W
  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;
2 e+ j% n! e( y; U; J4 m" N) J  查询时间:select now();# `  o6 \- Q7 z
  查询当前用户:select user();
2 q, b+ h  G. W: g% `  查询数据库版本:select version();$ x2 I" p( ~; g3 I+ C
  查询当前使用的数据库:select database();! }3 `; K+ L  H, Q5 r
  
1 [3 D: S! l4 f5 `5 T, b  1、删除student_course数据库中的students数据表:
6 t; s7 v! n. k+ U5 ~! h  rm -f student_course/students.*
) O) b, {2 d) w  
6 y3 X! l) b4 e# ]/ ?& x  2、备份数据库:(将数据库test备份)
( \7 X- I2 p. F3 u  mysqldump -u root -p test>c:\test.txt
8 X- q" U7 P4 r+ Q3 [' [7 _5 K" }  备份表格:(备份test数据库下的mytable表格)
4 O4 v( I! z) X# c  mysqldump -u root -p test mytable>c:\test.txt
6 t6 b6 ]8 Z& @2 R/ r  将备份数据导入到数据库:(导回test数据库)
4 R' ]( k8 ^0 d9 j& ]1 k  mysql -u root -p test<c:\test.txt. ~$ M4 l6 D& s3 y
  : m5 P. b+ J3 P& l9 E1 I
  3、创建临时表:(建立临时表zengchao), P' q+ t- @1 \1 t
  create temporary table zengchao(name varchar(10));* \1 _/ }' l% e  C+ p6 X/ k; Y6 B& p! X
  
3 n) y# R8 F% v; N' ?8 m  4、创建表是先判断表是否存在
, F  b% D5 _# h0 a. s  create table if not exists students(……);7 c; [5 }" K- Y/ v6 n
  
" K' ~* o1 ^1 q0 W  5、从已经有的表中复制表的结构8 c0 H- N3 L& J
  create table table2 select * from table1 where 1<>1;: |: [. x& J/ T. ]- i
  
1 M4 `8 g' [8 j. t  d+ R; M' ~  6、复制表# G6 h* O: h# w  A+ Y
  create table table2 select * from table1;
) h; D9 N9 [+ m' D6 O1 ]  7 \7 A" S6 v9 ~! P; a$ G
  7、对表重新命名- T0 ^7 v- G. Q7 I9 Z
  alter table table1 rename as table2;
8 n3 l- H7 O, E  3 E' R( `5 ^. |6 ]( {$ k/ O7 l
  8、修改列的类型
0 ?* }; L+ V- R8 a3 w; t/ k% b  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
/ }! s3 }3 R* i  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
/ i0 g) a9 f( R  A/ h$ C6 k  \  
5 o* K) M" m0 o  R* f3 K  9、创建索引
9 r% Y7 e& S+ P4 h  alter table table1 add index ind_id (id);0 l2 A( t8 A$ l& b- u- y) }4 o6 a
  create index ind_id on table1 (id);7 Y  k2 q5 a( c3 M: M
  create unique index ind_id on table1 (id);//建立唯一性索引
5 {& _; u, k- E* T% p# y$ C  + ~. f& O5 R0 b& k: I- n
  10、删除索引
1 E3 e* w* g& E2 I( i  drop index idx_id on table1;
4 M+ a: V/ Y# N! h7 y; V2 A) Z  alter table table1 drop index ind_id;# @; {$ {% i# d+ b9 Y8 K
  
: S' a/ Y+ w8 |6 V8 q1 k  11、联合字符或者多个列(将列id与":"和列name和"="连接)
5 Z) `' ^5 N# m+ t* S  select concat(id,':',name,'=') from students;
) W% I& E& X' X/ p  * A7 X% M. z3 }& x  R* w# o
  12、limit(选出10到20条)<第一个记录集的编号是0>' V, \# a4 h; {9 L- `
  select * from students order by id limit 9,10;& F4 _3 h' O9 _" k* ^
  7 F- w9 [8 u8 N6 ~4 H( J8 |0 p
  13、MySQL不支持的功能
; }- f# @4 p; Q2 [* S7 P( d  事务,视图,外键和引用完整性,存储过程和触发器9 F) w' C1 ?4 o/ k' U
  
5 @5 w1 d1 G7 I  I6 Z  
1 P" V3 w2 L: n  14、MySQL会使用索引的操作符号8 k! w8 n1 X' _
  <,<=,>=,>,=,between,in,不带%或者_开头的like6 t- F5 h2 E+ B/ f3 U
  - S1 ^4 G. M$ J& J: D
  15、使用索引的缺点
# x* Q; J) I9 ]6 \& R, j7 Y5 v- k  1)减慢增删改数据的速度;
- _5 u+ s  M5 B( C  2)占用磁盘空间;+ t, ]9 m: N. ^9 P" \7 q0 Z: e
  3)增加查询优化器的负担;) ]+ K3 s( `0 i3 N
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
; W4 W! q+ l3 N; l9 ~  ' Y2 X4 r2 p! E& ^1 i/ J
  16、分析索引效率
' q+ O& R: Y/ g) r  方法:在一般的SQL语句前加上explain;
, h& T4 D! @" ]/ \2 g) _' \  分析结果的含义:
, t  k8 c) E' j5 p0 W/ G2 V  1)table:表名;
9 ?2 |0 R# o( Y1 G  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;+ P/ E9 A+ V1 I( ]
  3)possible_keys:查询可以利用的索引名;
  U' H. G5 W8 ~) Q* \4 n2 G  4)key:实际使用的索引;
; z+ I3 T6 c# O* g  G% t  5)key_len:索引中被使用部分的长度(字节);1 m$ i2 u! @- V
  6)ref:显示列名字或者"const"(不明白什么意思);. }8 _$ P: j& V
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
$ Y+ {7 l  X, E& ?9 Q2 P0 V  8)extra:MySQL的建议;2 a; s$ b: H  h9 A  I+ v" O
  2 g: Z* O6 c5 ~) n' A
  17、使用较短的定长列5 Y8 Q& r4 u+ N, G
  1)尽可能使用较短的数据类型;" [  m) F2 Z6 l/ X
  2)尽可能使用定长数据类型;
7 J" V5 V4 ^) a6 m: b: Q5 |1 O  a)用char代替varchar,固定长度的数据处理比变长的快些;+ c4 J! w2 a: q! D1 L& g
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;& s+ l( m! F# b6 `. ~) r2 h- c
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;/ z) P! x- Z! O7 o1 X" G
  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;2 y) [1 o- r( {* Y: T6 O3 N
  6 N; e: R0 W' j' i0 s
  18、使用not null和enum
3 B4 f6 a+ N! q4 @3 ]4 K  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;5 g: y7 m5 \! a4 j. C3 I) b
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;6 `/ ?! j" m4 ?8 j+ M
  " Z9 g! R( y, n4 _; ?! P8 e: Q# I
  19、使用optimize table5 P. S- g: r. h" Z( Y2 A
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
) \  u: d$ g) v+ I: @/ R  
5 S$ K! |, I+ ~+ s6 h  20、使用procedure analyse()
+ h1 m2 E: J; Y* R  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
+ X% m. n: g! _: N4 Z: t/ |  select * from students procedure analyse();
( B* \0 n0 g5 f: F$ e5 a; h( H  select * from students procedure analyse(16,256);
1 I3 ]8 e) ?" q0 l; x  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
. h( d- Y5 ?- t4 Q+ x. {  
' e7 P: |+ U$ F4 q7 ~  21、使用查询缓存! s7 u# k( \8 y8 n* i$ N
  1)查询缓存的工作方式:$ E! Z$ A* G8 ?5 |* V8 R# x: c
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
# i. w/ o' O, @! _; d& H  2)配置缓存参数:
6 Y. b4 S: r2 v( W# B8 B5 a  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
5 J( g% s0 ~4 E. T# L0 }6 s% n  
! l0 v% F4 D) e2 }3 C. P  22、调整硬件
( F. X( N: S1 g( R* X  1)在机器上装更多的内存;) [6 v2 p3 r( W: ^1 `, \& b. h9 L
  2)增加更快的硬盘以减少I/O等待时间;
2 M- w0 @4 D& ?8 v2 C2 y& _5 l  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;% M5 [/ h( {5 s9 G$ X# o
  3)在不同的物理硬盘设备上重新分配磁盘活动;3 R% s5 ]' v1 e" f1 n
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。% H& V* K2 s2 r+ R1 d- ?
回复

使用道具 举报

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

本版积分规则

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