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
这条命令是做级联删除,意思是删除参考值时,约束值自动删除
网友评论