发布网友 发布时间:2022-04-07 20:27
共2个回答
懂视网 时间:2022-04-08 00:48
MySQL索引和键
(不同的索引有不同功能 ,不同的约束方式,不同的使用规则)
优点:对一张表来说,索引就像一本书的目录,能够加快查询速度
缺点:占用物理存储空间 (索引信息存储在表对应的文件里)
会降低插入、更新表记录的速度(insert delete update)
1.索引的类型
普通索引:index
唯一索引:unique
全文索引:fulltext
2.各个索引的说明
(1).index 普通索引
一个表中可以有多个INDEX字段
把经常做查询条件的字段设置为INDEX字段
INDEX字段的KEY标志是MUL
对应的字段值允许有重复
样例1:
建表时设置索引字段。(默认索引字与字段名相同)
create table tea(
name char(10) not null,
age int(3) not null,
index(name)
);
样例2:
把已有表里的字段设置为index字段。
create index 索引名 on 表名(字段名);
create index name on stu_info(name);
create index name on stu_info(name,sex);
删除指定表的索引字段
drop index 索引名 on 表名;
drop index name on stu_info;
注:index使用BTREE 算法 (二叉树算法)
查看表的索引信息:show index from stu_info;
(2)unique 唯一索引
字段值不允许有重复,UNIQUE字段的值允许为NULL,【当将其修改为不允许为NULL,则此字段限制与主键相同】
一个表中可以有多个UNIQUE字段
UNIQUE字段的KEY标志是UNI
样例:
create table tea23(
id int(3),
name char(3),
unique(id)
);
create unique index stu_id on stu_info(stu_id);
3.键
主 键:primary key
外 键:foreign key
(1). primary key
一个表中只能有一个PRIMARY字段
字段值不允许有重复,不允许为null
主键字段的KEY标志是PRI
如果有多个字段都作为PRIMARY KEY,称为复合主键,必须在建表时一起创建
通常与 AUTO_INCREMENT 连用 (字段的值自动增长 +)
把能唯一定位一条记录的字段设置为主键字段
样例:
create table baitao(lf int(3),primary key(lf));
alter table stu_info add primary key(id)
alter table 表名 drop primary key;
(2).foreign key * 外 键
字段类型要一致
表的存储引擎必须是innodb
被参考字段必须是索引类型中的一种。
FOREIGN KEY(字段名) References 表B(字段名) ON UPDATE CASCADE
ON DELETE CASCADE
样例:
create table yg_info(yg_id int(3) primary key auto_increment,name varchar(15) not null,index(name))engine=innodb;
create table gz_tab2(
id int(3) primary key auto_increment,
name varchar(15) not null,
gz_id int(3) not null,
gz float(7,2),
FOREIGN KEY(gz_id) References yg_info(yg_id)
on update cascade on delete cascade
)engine=innodb;
insert into yg_info(name)values("jim");
insert into yg_info(name)values("tom");
insert into gz_tab(name,gz_id,gz)values("jim",1,20000);
insert into gz_tab(name,gz_id,gz)values("tom",2,20000);
update yg_info set yg_id=20 where name="tom";
delete from yg_info where yg_id=20;
(3).primary key 复合主键
(主键字段的值 不可以同时相同 )
ip ser_name port status
1.1.1.1 vsftpd 21 deny
1.1.1.1 sshd 22 allow
2.2.2.2 sshd 22 allow
1.1.1.10 sshd 22 deny
create table sertab(
ip varchar(15),
ser_name varchar(15),
port int(3),
status enum("deny","allow") default "deny",
primary key(ip,port)
);
本文出自 “刘福” 博客,请务必保留此出处http://liufu1103.blog.51cto.com/9120722/1656829
五、MySQL索引和键
标签:mysql索引和键
热心网友 时间:2022-04-07 21:56
两者有类似的功能,值都是必须唯一,但是不是主键的字段或者几个字段可以设置为唯一索引。追问索引和唯一键很相似,二者的区别在于作用不同,索引用于提高查询速度,唯一键用于唯一约束。当然如果建立的索引是唯一索引的话,也可以起到唯一约束的作用。在MySQL具体实现上,索引需要建立数据结构,需要额外的磁盘空间来存储索引,而键(主键,外键和唯一键)都是逻辑层面的实现和约束,二者还是有着本质的区别。