标题: mysql常用命令 [打印本页] 作者: admin 时间: 2012-9-13 16:32 标题: mysql常用命令 启动:net start mySql; ' Z* M% {4 K/ g% V# e+ w4 y 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; % E! z% N9 p, [! U6 q, W" K6 K3 j 列出数据库:show databases; ( C5 o! A4 H6 n% H7 N. l 选择数据库:use databaseName; ) [6 d! n; T( z0 o6 l* v 列出表格:show tables; % q0 M7 }" f3 Z1 v 显示表格列的属性:show columns from tableName; Z3 M( @$ Q+ W- f 建立数据库:source fileName.txt; 5 o1 Q8 Q+ o' q) j4 m4 Z 匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串; & v% s! e* p, @" n: ` 增加一个字段:alter table tabelName add column fieldName dateType;: w4 D7 D) t& a: M8 m
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;# d. C C7 l$ C d3 t3 V
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中; # a& G/ Z! ~" {; T0 \ 增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";' S' t2 @7 Z& e& A3 F9 }# h# o: R
每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;; u5 [- G# l2 e% k# R
查询时间:select now(); ' {6 N( Y" v3 s7 h8 V 查询当前用户:select user();% [2 i6 f2 b* z( Z1 J, E a
查询数据库版本:select version(); 8 e3 q. ]) _& P4 f# C( z9 c! n8 R 查询当前使用的数据库:select database();5 x$ P: \- x6 A- p* L7 P
* I' j! P+ G- n 1、删除student_course数据库中的students数据表:# X2 L7 X/ C+ ?
rm -f student_course/students.* ; ?7 p( b. k: L; [ 7 q. d0 e! Q8 _ 2、备份数据库:(将数据库test备份) 7 T. L T% v# m+ p, |) Q mysqldump -u root -p test>c:\test.txt ) {' u/ w1 |" ~) V6 ~; K" \. z 备份表格:(备份test数据库下的mytable表格) ' K* h* j" T! H6 s `7 \ mysqldump -u root -p test mytable>c:\test.txt . d8 K+ a" k* X4 }5 B1 I2 [ 将备份数据导入到数据库:(导回test数据库)& L2 z5 f0 M. o: m |
mysql -u root -p test<c:\test.txt ; \: Z* M9 q) i6 B( G # @ b9 U# n0 J% n8 W- G
3、创建临时表:(建立临时表zengchao)2 n5 m; |* J8 ?( c, V. L h
create temporary table zengchao(name varchar(10)); 8 j( r% n0 N$ n7 r- N ! {) Z a% Q. O8 b5 q' J% U: w8 u
4、创建表是先判断表是否存在4 c3 n% K. j7 v
create table if not exists students(……);( B: S1 E( w' j0 ] P
- |4 O( @* g4 c$ q
5、从已经有的表中复制表的结构 * u7 b$ f* u* f1 @ ~; g, |& I create table table2 select * from table1 where 1<>1;9 E. E/ {5 P6 `9 M- l8 R
7 V4 d z- c9 E. v2 w( c 6、复制表! Z8 W8 n% K& {1 Y) L
create table table2 select * from table1; % w# Z7 V9 g) q' {: K3 @ 8 X, T, y4 C; } 7、对表重新命名 $ K. o ~4 s4 n+ Y; c. [& J7 b alter table table1 rename as table2; 6 ]' \0 _. O" s7 ?# D ' F* h2 a5 M% Q$ V( `! s 8、修改列的类型. ?( s8 O+ @8 F9 ?+ d& k
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned 6 K" y# a- @3 K a- o alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned - Y0 t9 V8 U8 S( Q ' F' A0 N/ O3 G# F6 `
9、创建索引: b! Y8 p7 [+ e# p
alter table table1 add index ind_id (id); 7 k) l* J; k' K- Q9 f6 F, R create index ind_id on table1 (id); ; D8 M0 s% g3 L5 I G3 p create unique index ind_id on table1 (id);//建立唯一性索引/ r0 S1 j2 r2 a+ e' L" L$ s' F
! ^; i# O- s+ L( w3 t 10、删除索引! d, I) Q. A4 u
drop index idx_id on table1;6 A+ H5 f' h9 L! t8 L$ k
alter table table1 drop index ind_id;$ C, m+ Q( j" F2 a7 L
( B. g8 G) K2 s! p" A6 w8 O; w U
11、联合字符或者多个列(将列id与":"和列name和"="连接)- a' s% t/ i3 c' }3 M: l# P
select concat(id,':',name,'=') from students; ; F& p7 e, J4 }3 ?- y * d, F9 N% B* i1 ]
12、limit(选出10到20条)<第一个记录集的编号是0> . S9 h! S1 e; a' c) W# w select * from students order by id limit 9,10; " o8 N! h: g( t5 I- S/ g6 d . F- ]0 H1 T, v3 S 13、MySQL不支持的功能 , k* A8 _+ ?* O5 ~" X# ~7 w+ @ 事务,视图,外键和引用完整性,存储过程和触发器 / z3 |, F8 C5 @3 R/ }; e" W5 M $ ~2 [+ d3 K3 ] ' h3 V+ u2 o1 n8 H8 ?" G
14、MySQL会使用索引的操作符号8 v0 [! X, X- }# ?
<,<=,>=,>,=,between,in,不带%或者_开头的like1 R) z; W. r% x5 h+ t$ l
/ U- [; O5 S/ ~6 Q 15、使用索引的缺点% B8 w- Q* K2 z
1)减慢增删改数据的速度;6 a" L* }+ t( U4 l+ R; U
2)占用磁盘空间; ) K4 w$ q8 K5 M; f 3)增加查询优化器的负担; 6 Y" K+ {5 o, u 当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案; ; W/ E1 b3 W& U* Y3 k ( T' B! I L \0 w2 s8 O! L) Q 16、分析索引效率 2 l- I' r7 \, f; O4 F6 R( y 方法:在一般的SQL语句前加上explain;% [4 x) c b# s2 `# {, l
分析结果的含义:* G1 [' ?1 w* g# A# @; A
1)table:表名;2 N } w8 x& g( f* t( K
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;8 `$ |+ N7 R- y8 g6 f
3)possible_keys:查询可以利用的索引名;) y3 j V& `3 q' I
4)key:实际使用的索引;, r$ e2 ^, W0 a' [
5)key_len:索引中被使用部分的长度(字节);8 Y3 j: x4 U) ^9 ^4 W# x4 p" {7 v
6)ref:显示列名字或者"const"(不明白什么意思);) ~4 y" @2 P1 P2 f
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数; . t; ? }4 A: E2 k% J0 z: c 8)extra:MySQL的建议;$ K" c( I; l. f
9 M' U/ J0 G1 I 17、使用较短的定长列" u* s9 \5 H1 t& y: p; ]) e
1)尽可能使用较短的数据类型; & F' B8 ^ c5 n. b, |# E S% } 2)尽可能使用定长数据类型;# B+ n" @7 N7 `
a)用char代替varchar,固定长度的数据处理比变长的快些; , _/ Y! A1 D8 ?( x- A" R: d; M b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能; : J' c; [$ n' e- ?) M; A% [$ X c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了; * W, g0 G0 A+ R: A" e; \ ]! K d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;. M$ ]- `# n& R/ I! e
/ u4 e9 J v7 q3 i
18、使用not null和enum 7 p# D3 T5 ?+ N9 d. q0 I9 Z 尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询; . o4 I! ^( |. h. Q 如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的; 6 X7 L: F; c+ v- T. z1 m1 v! K& B 5 w) O$ w4 s1 B& b% I# F+ M9 I: H
19、使用optimize table3 f" I" i7 G: m; D* y6 y; V0 e
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表; - ?5 L Y, {9 ?6 f# J, K; a, d ) n0 Z, F3 {4 k
20、使用procedure analyse() $ _. F4 K; r: y 可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:8 d0 y, K2 i4 j* F; g
select * from students procedure analyse(); ) D' f* A, ]3 S! D. F" M1 T Z select * from students procedure analyse(16,256); 2 i; t- W1 r' C8 O4 E7 D) O 第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;, h: m$ r4 |' y1 r