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

mysql常用命令

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-13 16:32:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动:net start mySql;
, n0 o* ^7 F- ~  进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
8 s6 E" Q0 {& r2 u; d  列出数据库:show databases;1 K3 G) S8 l* J+ g2 Y
  选择数据库:use databaseName;' g( I) d# V* T# A
  列出表格:show tables;
! s5 Q% p1 O& t6 A/ t2 M  显示表格列的属性:show columns from tableName;: E! ?" F; @* c/ s' w5 k
  建立数据库:source fileName.txt;' e$ L, V$ _) o# z6 C2 O  u, D
  匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;4 f7 Y1 j) B3 ^/ F" |5 I
  增加一个字段:alter table tabelName add column fieldName dateType;  r3 `1 K7 w% u+ n  G
  增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
, |* e: F) h2 L! L  多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
- O* [' C0 i! R. u4 e  增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
7 C9 \$ V$ c0 O; w% M! Y  每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;( M1 K7 j0 `& C
  查询时间:select now();! R$ h, h. _9 n6 q6 u
  查询当前用户:select user();
% \& X  c2 T  f$ n* L  查询数据库版本:select version();1 ]8 T/ M6 c" G4 Y. P) y! z9 R. L! `0 z
  查询当前使用的数据库:select database();
, Y0 p6 s/ u" C6 A. `* o  6 Z$ G2 k- E, h+ [6 c6 n7 @
  1、删除student_course数据库中的students数据表:
: U2 o0 p1 J& p+ e+ P/ o  rm -f student_course/students.*; K; D" _* ^* p, A
  
7 D7 ?- q6 h# u( \4 Z  2、备份数据库:(将数据库test备份)
$ F0 Z8 s" x- U9 B6 T* o  mysqldump -u root -p test>c:\test.txt5 a, y1 h" |9 y; m# F2 X: t
  备份表格:(备份test数据库下的mytable表格)
7 G) A3 y2 s) h) I  mysqldump -u root -p test mytable>c:\test.txt( @. B1 K2 W: W  \
  将备份数据导入到数据库:(导回test数据库)
6 F, F0 z. _6 A2 W! p' e+ g# \  mysql -u root -p test<c:\test.txt
& \) F; [& T3 G  i4 H+ j' O0 M$ t  
7 q$ _. }# k; Q; A( ?& I  3、创建临时表:(建立临时表zengchao)# ^7 q* @' X7 A- B' h7 g+ M
  create temporary table zengchao(name varchar(10));
1 s1 }5 w5 _. }, ]- m9 V2 {, Z( Y  9 I0 g4 R3 L; e/ @) [& t
  4、创建表是先判断表是否存在  g9 ~5 ^0 n+ |+ U8 f% ^, J
  create table if not exists students(……);! C& Q9 Q* Y/ N# {1 o
  . h5 N  I; q; n/ H  k2 Q& G
  5、从已经有的表中复制表的结构
. R# Q" q8 z  M4 m& W  create table table2 select * from table1 where 1<>1;
) G* b. N# J9 J' g1 {% X  " |2 h0 b4 {) D
  6、复制表
3 F2 t1 b6 o& y4 B6 }  Y  create table table2 select * from table1;$ ~% @) s. {! s; I
  * e" c- T* }, f; J: _
  7、对表重新命名
8 B4 B! }( x& Z) I- h  alter table table1 rename as table2;
; Q# W9 L# y: _% N  ! v1 m  a# _  M+ h! T* t
  8、修改列的类型% @$ N" E3 _0 l
  alter table table1 modify id int unsigned;//修改列id的类型为int unsigned2 H  v# R) l$ Z/ f$ y
  alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
$ y: w5 M* G0 y- y. [4 q7 c* V; \  , W  j4 I" K3 _  B/ r$ J+ C2 L0 g
  9、创建索引+ ]" l1 A: H1 a& _5 n1 S% l7 p
  alter table table1 add index ind_id (id);* r( \4 P( o) R9 C0 Z, n
  create index ind_id on table1 (id);
; F" Q/ W# z! [( j* Z7 w  create unique index ind_id on table1 (id);//建立唯一性索引) j( p9 r, g4 Q2 d: n" _" b  U
  
1 t3 i, m% n, y2 C! l  10、删除索引) }* M3 m; ~% ~4 Z; k
  drop index idx_id on table1;) [' W4 s# _- H: w* p$ B) o
  alter table table1 drop index ind_id;0 R3 ^1 [8 E, V6 H1 R: ~9 w6 l8 N, j! j
  ; a' G0 `7 p6 E
  11、联合字符或者多个列(将列id与":"和列name和"="连接)
+ j2 }3 n0 R# t" E2 e% [  select concat(id,':',name,'=') from students;5 M' N; D( e' b2 W1 `1 r
  ; o+ A* O( k# G$ }- x2 a$ p* r
  12、limit(选出10到20条)<第一个记录集的编号是0>) X* Y. l" N8 x( f* ^
  select * from students order by id limit 9,10;% M" f6 K" }4 U) J
  9 Y/ P% i3 p, U& A4 Q
  13、MySQL不支持的功能9 N0 J) V8 g( ]
  事务,视图,外键和引用完整性,存储过程和触发器0 O/ u7 E, ]" U* l: t$ j; e* {
  
1 S& M9 }4 g! }  a( o  
! q9 D2 g  P8 g+ ~  14、MySQL会使用索引的操作符号
0 T. ?/ |; g9 Q) L+ K& j  <,<=,>=,>,=,between,in,不带%或者_开头的like( M+ f; M3 _; p6 A/ y
  
4 [/ K8 r; N' o: m9 A# P$ x  15、使用索引的缺点
; I) J7 k# G) O$ |$ e9 d  1)减慢增删改数据的速度;
4 d) g: p* |8 {; m6 d8 [7 P7 e  2)占用磁盘空间;) B4 S$ J5 T5 x8 X# R! n/ P
  3)增加查询优化器的负担;
" B+ X/ J1 Q+ n  N) _' m- u  当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
! p7 I& M0 o# B9 Q# k  / h- {) J8 g0 l+ H
  16、分析索引效率9 q4 y7 ?. k; C6 G4 M, C! j# F: j# ?
  方法:在一般的SQL语句前加上explain;9 F- a+ ^5 [7 y& {0 V4 u
  分析结果的含义:$ ~9 P0 w# y( |2 x/ n0 A
  1)table:表名;2 G( @. H( x  U. q4 s
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
: i" \( R' {3 K6 R  3)possible_keys:查询可以利用的索引名;
. Z7 B, B. c" G4 J, c  4)key:实际使用的索引;
7 a: N% [, V# {# l  5)key_len:索引中被使用部分的长度(字节);3 C2 e: n0 @9 S' l1 C
  6)ref:显示列名字或者"const"(不明白什么意思);2 v. `2 m4 s/ J+ t; b
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;: n! K7 k3 j! Y+ N6 [
  8)extra:MySQL的建议;
) G0 Z( _' Y; ~4 Y4 n, R  
0 n+ F* i  U4 @  17、使用较短的定长列
3 u; V4 i: x' L; _- k: u  1)尽可能使用较短的数据类型;2 n0 z7 A9 Y: X, K) E- t
  2)尽可能使用定长数据类型;: o, i0 Y7 \+ s- X4 B* V8 E/ [
  a)用char代替varchar,固定长度的数据处理比变长的快些;
$ F' Q6 H0 i/ l; a8 N# e  b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;7 \3 S0 r4 f8 I# a: Q
  c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
! f0 Z7 k) A- n- ~) D/ |  d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
- @6 S2 y* K2 ]' i/ b9 K  
& X; ^: \! O( o# `1 ?  18、使用not null和enum
1 B$ D1 M5 W: @/ Q. c8 l+ b  尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
! g7 K- d# E. J  如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;' V" F! Y6 }: L3 G( q
  ' S+ ~3 G1 i# ~8 I; o6 I/ ?
  19、使用optimize table9 H4 G6 k, Y7 a: D: V) z" u
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
5 _# S+ E) ~! J  
% m4 K- ^$ a# K1 |/ X) q  20、使用procedure analyse()  d, \7 A6 z% h3 I. p/ R3 ~; |- ^
  可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
4 U/ ^  p4 b2 C* N# Z  select * from students procedure analyse();9 T0 i( l  `( V, j
  select * from students procedure analyse(16,256);" l" v: o& p, j" E, ^  e
  第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;; A: f. g+ d- v: `) I, c& `
  
0 Z9 n. ]& R8 \' u" r  21、使用查询缓存  O; ^1 Q% x/ T! D1 w9 y3 V% U
  1)查询缓存的工作方式:2 A* v; @+ @3 s, z
  第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。4 E1 \. W# n+ l& q
  2)配置缓存参数:
6 X$ q, j! A8 v* P  变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
3 S' S7 `. O) {; s6 x: _  
5 g5 d: O$ b. Y% j/ `' c  22、调整硬件
5 Z+ Z* m, L* b; }  1)在机器上装更多的内存;3 I' l. d+ @) e' M0 W% v
  2)增加更快的硬盘以减少I/O等待时间;, }8 c  z9 |. C+ n! m) {" `
  寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
9 u+ s9 D' b- e: {3 F+ f  3)在不同的物理硬盘设备上重新分配磁盘活动;
- U+ M( ^; N9 m: `) `7 f  如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。
2 m' u! I2 n" @7 u( ]
回复

使用道具 举报

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

本版积分规则

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