MySQL主键、外键、索引
来源:互联网 发布:什么是知天命 编辑:程序博客网 时间:2024/05/16 12:50
一、主键:
键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
关系数据库依赖于主键—它是数据库物理模式的基石。主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARY KEY”,主键不能重复,一个表只能有一个主键。
主键的声明方法:
可以在创建表的时候就为表加上主键,如:CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));也可以更新表结构时为表加上主键,如:ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);在Hibernate中用
@Id@GeneratedValue
标识。
二、外键
外键是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。
外键的使用条件:
1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;
添加外键的方法:
1.在创建表的时候进行添加
[CONSTRAINT symbol] FOREIGN KEY [id] (从表的字段1) REFERENCES tbl_name (主表的字段2) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}][ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}CONSTRAINT symbol:可以给这个外键约束起一个名字,有了名字,以后找到它就很方便了。
如果不加此参数的话,系统会自动分配一个名字。
FOREIGN KEY:将从表中的字段1作为外键的字段。
REFERENCES:映射到主表的字段2。
ON DELETE后面的四个参数:代表的是当删除主表的记录时,所做的约定。
RESTRICT(限制):如果你想删除的那个主表,它的下面有对应从表的记录,此主表将无法删除。
CASCADE(级联):如果主表的记录删掉,则从表中相关联的记录都将被删掉。
SET NULL:将外键设置为空。
NO ACTION:什么都不做。
注:一般是RESTRICT和CASCADE用的最多。
2.表已经创建好了,继续修改表的结构来添加外键。
ALTER TABLE employee ADD FOREIGN KEY(dept_id) REFERENCES department(id);ALTER TABLE employee:在从表employee中进行操作;
ADD FOREIGN KEY(dept_id):将从表的字段dept_id添加为外键;
REFERENCES department(id):映射到主表department当中为id的字段。
关于外键的使用,可以参考 其在Hibernate中的使用:
/** * 合同检测机构*/ @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="cto_id") //这里设置JoinColum设置了外键的名字 private To cto;
三、索引
索引是数据库中用来提高查询性能的最常用工具。
在使用以下操作符时,都会用到相关列上的索引:
>、<、>=、<=、<>、IN、 BETWEEN
LIKE 'pattern'(pattern不能以通配符开始,即通配符不能放前面,即使放在了前面,索引也无效)
注:索引的值因为不断改变,所以是它需要维护的。如果数据量较少,建议不用索引。
创建索引:
1.直接创建索引
2.修改标识添加索引
3.创建表的时候指定索引
主要是用 index 标识列名。
需要注意的是:主键、外键也是索引的一种,在创建主键的时候,数据库会直接创建其索引,创建外键时,早起的
数据库版本需要先创建索引。
- mysql主键,外键,索引
- mysql主键 外键 索引
- MySQL主键、外键、索引
- MYSQL 索引 主键 外键
- mysql建表-主键-索引-外键
- mysql建表-主键-索引-外键
- MySQL之主键、外键、索引
- 【Mysql】主键,外键,索引,唯一索引
- MySQL主键,外键,索引,唯一索引
- mysql学习-主键,外键,约束,索引
- 【MySQL】数据类型&时间戳&主键&外键&索引
- MySQL数据库(主键、索引、外键、触发器...)
- mysql 主键 索引
- MySQL:联合主键、索引
- MySQL索引之主键索引
- MySQL的几个概念:主键,外键,索引,唯一索引
- MySQL的几个概念:主键,外键,索引,唯一索引
- MySQL的几个概念:主键,外键,索引,唯一索引
- 操作系统思考 第零章 前言
- 微信登录问题
- fatal error C1083: 无法打开包括文件: “jni.h”: No such file or directory
- Python实现windows下模拟按键和鼠标点击的方法
- ros导航资源
- MySQL主键、外键、索引
- 关于maven
- helloworld Snap例程
- iPad Pro 9.7/12.9寸对比测评
- 转常用shell命令
- 发现个不错的OJ题目分类网站
- SSD:Single Shot MultiBox Detector 心得 之神经网路(持续更新中。。。)
- OAuth授权的java实现详解
- Hibernate学习笔记----hibernate的helloworld