您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
17_多表关系_案例(创建外键的两种方式及联合主键)
发布时间:2022-07-12 23:12:12编辑:雪饮阅读()
创建外键的两种方式
CREATE TABLE goods2 (
id INT,
foreign1 INT,
foreign2 INT,
FOREIGN KEY(foreign1) REFERENCES category(id),
CONSTRAINT foreign2_name FOREIGN KEY(foreign1) REFERENCES category(id)
) ENGINE=INNODB;
这里foreign key和constraint 自定义外键名 foreign key的方式都可以,第一种是简写,简写情况下则默认生成的外键名(个人理解为外键索引名)由系统mysql自身决定。
另外就是这innodb引擎是必须的,外键是必须依赖这个的,参考表和被参考表都需要是innodb引擎。
否则会出现架构设计器中不出现参考表和被参考表直接的连线。
联合主键(复合主键)
很早之前听sql黄讲一个表里面只有一个主键。
但今天了解了一个表中可以有“多个主键”
这里所谓的多个主键实质上是这样的:
CREATE TABLE goods3(
id INT,
goods_name VARCHAR(100),
PRIMARY KEY(id,goods_name)
);
看起来是多个主键,其实这里只是联合主键
就是说这里通过goods_name和id共同称为主键,主键唯一性由两个字段共同维护
如下示例:
mysql> insert into goods3 values(1,"kasumi");
Query OK, 1 row affected (0.00 sec)
mysql> insert into goods3 values(2,"moniji");
Query OK, 1 row affected (0.00 sec)
mysql> select * from goods3;
+----+------------+
| id | goods_name |
+----+------------+
| 1 | kasumi |
| 2 | moniji |
+----+------------+
2 rows in set (0.00 sec)
mysql> insert into goods3 values(1,"moniji");
Query OK, 1 row affected (0.00 sec)
mysql> insert into goods3 values(1,"kasumi");
ERROR 1062 (23000): Duplicate entry '1-kasumi' for key 'PRIMARY'
可以看到当id+goods_name的组合在这个goods3中不出现重复时候,则是可以添加成功的,若出现了重复则报错如:
mysql> insert into goods3 values(1,"kasumi");
ERROR 1062 (23000): Duplicate entry '1-kasumi' for key 'PRIMARY'
关键字词:外键,简写,联合主键,复合主键
上一篇:12_约束_外键约束_级联操作
下一篇:19_DCL_管理权限