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不支持。

posted @ 2024-03-28 15:31  KINGBASE研究院  阅读(24)  评论(0编辑  收藏  举报