KingbaseES创建外键与Mysql的差异
Mysql
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.23 |
+-----------+
1 row in set (0.00 sec)
mysql> create table dept (deptno int ,dname varchar(10),loc varchar(100));
Query OK, 0 rows affected (2.00 sec)
mysql> alter table dept add constraint pk_dept primary key(deptno,dname);
Query OK, 0 rows affected (0.22 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> create table emp (id int, ename varchar(10),sal int ,deptno int);
Query OK, 0 rows affected (0.23 sec)
mysql> alter table emp add constraint pk_emp primary key (id,ename);
Query OK, 0 rows affected (0.26 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno);
Query OK, 0 rows affected (0.71 sec)
Records: 0 Duplicates: 0 Warnings: 0
KingbaseES mysql模式
test=# show database_mode;
database_mode
---------------
mysql
(1 行记录)
test=# create table dept(deptno int,dname varchar(10),location varchar(20));
CREATE TABLE
test=# create table emp (empno int,ename varchar(10),deptno int );
CREATE TABLE
test=# alter table dept add constraint pk_dept primary key(deptno,dname);
ALTER TABLE
test=# alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno);
错误: 没有 unique constraint 匹配引用的表 “dept” 的给定键
test=# create unique index dept_uq_deptno on dept(deptno);
CREATE INDEX
test=# alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno);
错误: 没有 unique constraint 匹配引用的表 “dept” 的给定键
test=# drop table dept;
DROP TABLE
test=# create table dept(deptno int,dname varchar(10),location varchar(20));
CREATE TABLE
test=# alter table dept add constraint pk_dept primary key(deptno);
ALTER TABLE
test=# alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno);
ALTER TABLE
当父表主键是复合键时,mysql子表创建外键约束支持在父表主键中的一个字段作为外键参考,KingbaseES不支持。
KINGBASE研究院