MySQL主键、外键、索引

一、主键:

键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
关系数据库依赖于主键—它是数据库物理模式的基石。主键在物理层面上只有两个用途:
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 标识列名。

需要注意的是:主键、外键也是索引的一种,在创建主键的时候,数据库会直接创建其索引,创建外键时,早起的

数据库版本需要先创建索引。







  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值