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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;4 v; Y! M  W" J# B1 s
  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
* B9 f7 m4 o9 F2 u4 H' j  列出数据库:show databases;
0 g4 V  ~  E* f/ T) {% B2 w  选择数据库:use databaseName;. @2 `8 W0 r1 ~1 f6 L
  列出表格:show tables;
6 ]2 y/ }5 q2 ^0 g  显示表格列的属性:show columns from tableName;, a% h. ~9 [& S
  建立数据库:source fileName.txt;  _0 H; R5 p" J% s
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;4 |: Q6 n& [; a4 T3 m3 B# `9 S3 ?
  增加一个字段:alter table tabelName add column fieldName dateType;9 l6 j3 m; ^) H" ^8 r
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;& m- z9 e% G2 Q4 b0 R4 n6 r
  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
2 |* b1 }: [1 T& \  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
7 q% {- |4 F1 {* f9 y, q& q  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;) ~6 z- A% t: u7 ^& }
  查询时间:select now();
" s  ^8 G/ |/ ^  查询当前用户:select user();
8 n' ^5 t* J4 H8 I+ |- \  查询数据库版本:select version();
9 B7 y* O7 l5 W' H9 v3 U  查询当前使用的数据库:select database();
9 P1 V$ n$ d# x* N; L6 D- G; P  4 Z7 s& C/ m1 @
  1、删除student_course数据库中的students数据表:* T6 M  o4 P0 w2 O
  rm -f student_course/students.*" V: t6 Z9 Z$ q+ I& \# l
  , \; c9 V  E! z9 t! A8 E0 H3 v
  2、备份数据库:(将数据库test备份)' N1 O' P/ r: \$ X& o$ K
  mysqldump -u root -p test>c:\test.txt& e( W& v' ]4 d) g  r
  备份表格:(备份test数据库下的mytable表格)
5 R) r6 m: m1 z9 V' Y$ ]  mysqldump -u root -p test mytable>c:\test.txt
% F6 a/ h6 x" F  G% o6 H  将备份数据导入到数据库:(导回test数据库)
% r  e8 B+ H/ Z( X! i8 m  mysql -u root -p test<c:\test.txt
0 q" R6 m  _1 S+ Z  
" d! r. l! W+ W/ a! Q+ P  3、创建临时表:(建立临时表zengchao)
% D2 p3 ~0 Y1 ~9 b  create temporary table zengchao(name varchar(10));
3 b5 l6 T; D3 V# }4 C. B6 G  5 C% b) k, n3 f; b8 C; e9 g
  4、创建表是先判断表是否存在. @! p& }4 J& x1 I8 b- Z: ?7 f4 j
  create table if not exists students(……);7 Q2 S1 B# ^# f
  ; t  ^$ k1 \% A( V3 {' f+ r0 O6 M
  5、从已经有的表中复制表的结构, h9 d9 o& F+ q* ^* V
  create table table2 select * from table1 where 1<>1;
8 C3 C9 e$ P0 P% B; W; X  
! m6 K% K# K+ y# C* n  6、复制表! y' M! Y" l, C
  create table table2 select * from table1;
: H+ q- ]; Q( d7 y  5 n$ x) p- y; U! S4 G- |( O
  7、对表重新命名. \3 z; e0 j% c6 I3 R5 X( L
  alter table table1 rename as table2;. c5 e/ g) B, h  n& y/ {, E
  8 Z& v" I7 H9 g' P
  8、修改列的类型
. K% n1 X$ J8 Z+ w; @( M3 I9 U. L% l  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned* R1 @: A$ t. Y' p$ u
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
. |9 x- }; C: f$ C- L( ?2 Q  
1 v; E+ T9 U7 t5 o' o2 C" M: y  9、创建索引4 g0 T: L0 ?3 J' O1 [
  alter table table1 add index ind_id (id);
  c7 c% w1 u8 c0 z) N! G  create index ind_id on table1 (id);, `! b+ x; f, }# u
  create unique index ind_id on table1 (id);//建立唯一性索引: ~$ l7 y8 L2 L4 C; |
  4 a9 L/ }6 w" }
  10、删除索引
7 L7 L, E9 [2 K# @  drop index idx_id on table1;6 \7 B3 R7 n" ~) X
  alter table table1 drop index ind_id;
' i2 X3 q# w  L3 T" P+ m' j  8 k- A- K1 r0 w5 E# T" z
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
  d5 D9 j1 _( w: {! k% G' b2 I  select concat(id,':',name,'=') from students;% f# N7 K& @, _8 i
  
+ v7 R' }; H) u* h. H  12、limit(选出10到20条)<第一个记录集的编号是0>
- K0 d  h3 {5 F% x/ c9 B  select * from students order by id limit 9,10;* x3 ^$ l3 ^8 }; t
  - k6 \8 q, Y& `, v+ f6 F# ^
  13、MySQL不支持的功能
# S/ V. }9 `9 C$ _' Z  事务,视图,外键和引用完整性,存储过程和触发器
/ P, @( q: t3 Q5 n! d3 o  7 f1 ]) U, b7 k, k
  
& @; [3 t1 F) t* r3 @  14、MySQL会使用索引的操作符号/ V8 j' {' T$ P% ~- o2 o. I
  <,<=,>=,>,=,between,in,不带%或者_开头的like
! ?. ]6 [+ b# G; f: `0 A0 z  
9 D8 ~# [& R+ D& J) _5 Y  15、使用索引的缺点
9 `/ D! [: Q# n. @8 \# _; B  1)减慢增删改数据的速度;
* m/ a% N! X6 V: t. }  x5 j  2)占用磁盘空间;
- ^9 m) }5 r+ R  3)增加查询优化器的负担;$ `* b3 @. {3 y) m7 i0 l6 z+ J8 ^4 ^
  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;4 u  V( p, C4 W+ I7 u8 y' b
  
% {8 d! }* w: i* M) t5 v  16、分析索引效率0 f7 p4 x3 a, `) v/ }
  方法:在一般的SQL语句前加上explain;
/ H4 Q+ F' N: g7 s: K  分析结果的含义:3 m7 F8 z2 P: @* n) H( w* w5 d
  1)table:表名;$ i: {5 Q" P5 w/ ?$ c
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;9 e7 V) @2 A& U6 ~  d2 \3 @
  3)possible_keys:查询可以利用的索引名;+ Z; J! s" \% ?
  4)key:实际使用的索引;
: ]7 L/ {8 I: P: X- C  5)key_len:索引中被使用部分的长度(字节);7 ]3 X: a, z# u
  6)ref:显示列名字或者"const"(不明白什么意思);
3 A, p! v1 ^/ I  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;$ [8 W5 Z' m0 ^8 J# f6 w
  8)extra:MySQL的建议;
- v) O7 d; Q; z/ K6 l- U& }+ s  
6 n% P7 ^! r3 J* h' q8 r& s  17、使用较短的定长列
# ^( O# e) Q6 Q6 F  1)尽可能使用较短的数据类型;9 g5 M$ |' N( v6 H" S
  2)尽可能使用定长数据类型;
' e: m+ v* @+ Q$ @  a)用char代替varchar,固定长度的数据处理比变长的快些;4 T& O' ^  [! r6 Q+ P
  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
5 ^& k% n; k. ~! M  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
- P( T0 r7 \/ I) g0 A% x  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;7 p- i8 q1 S/ J1 q5 m" A
  
5 I! z" j' C7 i. I2 w; ]3 H. m  18、使用not null和enum
5 Q  t; a8 H2 K+ y! A# a6 c  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;7 u' P% H* `' y- F: b. P  B2 [& v
  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;
& E; Z2 H' e) l& x$ C5 t  # [9 T5 o- C1 H! i9 x# w2 p3 Q
  19、使用optimize table
7 f3 f9 t$ i. y% S8 `; C  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
7 _  t6 L* N, Q( E0 ~6 V* H  
( E: g$ \* b$ n  20、使用procedure analyse()
- Y* \. c! [" A+ f! W0 v  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:2 I+ K; O" I4 B! q- ~
  select * from students procedure analyse();
3 n' e( B0 a& C9 S  select * from students procedure analyse(16,256);( e5 t9 o; E% d0 f% N8 Q
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
; m% z7 X& w2 W: V# r  2 J& R' w  a0 Z( J$ s0 W
  21、使用查询缓存
- k$ E0 c; V9 m+ t) @! o5 l  1)查询缓存的工作方式:
! a6 i7 u. R! x* k& W  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。% ?# v( B% d! v! K3 W+ [
  2)配置缓存参数:
$ s1 r) m4 i5 ^2 w  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
! |$ W. P  v# ^& v) m) r. t  . F- T, }3 a, Y2 N9 c
  22、调整硬件
9 Q) Y& f% [7 J: k  1)在机器上装更多的内存;3 q. d. J( L5 @$ g/ _
  2)增加更快的硬盘以减少I/O等待时间;+ \" i. R0 h# H* B' Q
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
- @  y# g# |4 ~) O4 J+ T$ h7 M2 ~  3)在不同的物理硬盘设备上重新分配磁盘活动;/ X$ D4 R7 l& A9 w! ?. F0 y
  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。/ C$ Q1 f1 {1 n8 y0 ?: V/ f+ W
回复

使用道具 举报

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

本版积分规则

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