外键约束

2019-12-06  本文已影响0人  简单可靠才可信

FOREIGN KEY(将要设置为外键的字段) REFERENCES 表名(要依赖的主键)

这里是创建一张家族表
CREATE TABLE `family` (
      `name` VARCHAR(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名字',
      `exp` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '经验',
      `notice` VARCHAR(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '公告',
      `board` VARCHAR(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '黑板',
      PRIMARY KEY (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- name:名称,varchar类型表示,长度限制32位,这里说明一下varchar没有占位符,
-- char定义是固定长度的,即使不足也会使用空格填充
-- utf8mb4_unicode_ci是指字符编码形式,此编码是基于标准的Unicode来排序和比较,
-- 能够在各种语言之间精确排序
-- COMMENT是添加说明的关键字
-- INT UNSIGNED是指使用无符号int类型,不能出现负数
-- PRIMARY KEY设置主键,这里可以设置多个主键,以逗号分隔

ENGINE=InnoDB这里的这个代码意思指使用InnoDB数据库引擎(InnoDB用于事务处理)

DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci这里的代码含义指使用默认的字符集和默认的字符编码形式

这里是创建一张家族历史表
CREATE TABLE `familyhistory` (
      `hid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '历史id',
      `name` VARCHAR(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '家族名字',
      `msg` VARCHAR(256) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作信息',
      PRIMARY KEY (`hid`, `name`),
      CONSTRAINT `familyhistory_ibfk_1` FOREIGN KEY (`name`) REFERENCES `family` (`name`) ON DELETE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CONSTRAINT:约束关键字
CONSTRAINT `familyhistory_ibfk_1`含义是创建约束名为familyhistory_ibfk_1
FOREIGN KEY (`name`)含义是创建外键name
REFERENCES `family` (`name`)意思是参考family表中的主键name
ON DELETE CASCADE这条命令是做级联删除,意思是删除参考值时,约束值自动删除

上一篇下一篇

猜你喜欢

热点阅读