MySQL外键约束(FOREIGN KEY)

MySQL外键约束(FOREIGN KEY)

MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

定义外键时,需要遵守下列规则:

    主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

    必须为主表定义主键。

    主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

    在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

    外键中列的数目必须和主表的主键中列的数目相同。

    外键中列的数据类型必须和主表主键中对应列的数据类型相同。

实例:

--创建用户表并将UID设为主键

DROP TABLE IF EXISTS tbl_user;

CREATE TABLE tbl_user (

  uId INT NOT NULL AUTO_INCREMENT COMMENT '用户编号',

  uName VARCHAR(50) NOT NULL COMMENT '用户名',

  uPass VARCHAR(10) NOT NULL COMMENT '密码',

  head VARCHAR(50) NOT NULL COMMENT '头像',

  regTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',

  gender smallint(6) NOT NULL COMMENT '性别',

  PRIMARY KEY (uId) /*设置用户编号为主键*/

) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

--创建版块表,并将版块编号设为主键

DROP TABLE IF EXISTS tbl_board;

CREATE TABLE tbl_board (

  boardid INT NOT NULL AUTO_INCREMENT COMMENT '版块编号',

  boardName VARCHAR(50) NOT NULL COMMENT '版块标题',

  parentId INT NOT NULL COMMENT '父版块编号',

  PRIMARY KEY (boardid) /*设置版块编号为主键*/

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--创建帖子表,并将帖子编号设为主键,同时建立与用户表和版块表的关联关系

DROP TABLE IF EXISTS tbl_topic;

CREATE TABLE tbl_topic (

  topicId INT NOT NULL AUTO_INCREMENT COMMENT '帖子编号',

  title VARCHAR(50) NOT NULL COMMENT '帖子标题',

  content VARCHAR(1000) NOT NULL COMMENT '帖子内容',

  publishTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发帖时间',

  modifyTime TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间',

  uId INT NOT NULL COMMENT '用户编号',

  boardId INT NOT NULL COMMENT '版块编号',

  PRIMARY KEY (topicId), /*设置主键*/

FOREIGN KEY FK_UID (uId) REFERENCES tbl_user(uId),/*设置外键*/

FOREIGN KEY FK_BID (boardId) REFERENCES tbl_board(boardId) /*设置外键*/ 

) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

你可能感兴趣的:(MySQL外键约束(FOREIGN KEY))