sql—如何在mysql中向列添加约束,以便只保存已存在于同一表的另一列中的值?

ctehm74n  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(315)

这个问题在这里已经有答案了

向现有表添加外键(13个答案)
10个月前关门了。
这是我要创建的表:
table
Manager_ID 列我应该添加一个约束,但我不知道怎么做
这是我的密码:

CREATE TABLE CANDIDATE
(
    Candidate_ID FLOAT(6) PRIMARY KEY,
    Candidate_Name VARCHAR(20) NOT NULL,
    Candidate_Email VARCHAR(30) UNIQUE,
    Candidate_Dept CHAR(2) DEFAULT 'HR',
    Manager_ID VARCHAR(30),
    CONSTRAINT CHECK (Candidate_Email LIKE '%@%.%'),
    CONSTRAINT CHECK (Manager_ID IN (SELECT DISTINCT Candidate_ID FROM CANDIDATE))
);

有人能帮我增加必要的工作来完成上述任务吗。

093gszye

093gszye1#

您将检查约束与外键约束混淆。第二个约束应该是外键:

CREATE TABLE CANDIDATE (
    Candidate_ID FLOAT(6) PRIMARY KEY,
    Candidate_Name VARCHAR(20) NOT NULL,
    Candidate_Email VARCHAR(30) UNIQUE,
    Candidate_Dept FLOAT(2) DEFAULT 'HR',
    Manager_ID VARCHAR(30),
    CONSTRAINT CHECK (Candidate_Email LIKE '%@%.%'),
    CONSTRAINT fk_candidate_manager_id FOREIGN KEY (Manager_ID) REFERENCES CANDIDATE(Candidate_ID)
);

我不明白这个定义:

Candidate_Dept FLOAT(2) DEFAULT 'HR',
``` `'HR'` 不是有效的浮点值。大概,您打算为该列指定一个字符串。而且绝对不能对主键使用浮点值!
下面是一个实际工作的create table语句,它是合理的:

CREATE TABLE CANDIDATE (
Candidate_ID INT PRIMARY KEY,
Candidate_Name VARCHAR(20) NOT NULL,
Candidate_Email VARCHAR(30) UNIQUE,
Candidate_Dept VARCHAR(20) DEFAULT 'HR',
Manager_ID INT,
CONSTRAINT CHECK (Candidate_Email LIKE '%@%.%'),
CONSTRAINT fk_candidate_manager_id FOREIGN KEY (Manager_ID) REFERENCES CANDIDATE(Candidate_ID)
);

2vuwiymt

2vuwiymt2#

不是一个 check ,但是 foreign key 约束。
我不知道mysql语法;在甲骨文里,那就是

constraint fk_mgr_cand foreign key (manager_id) references candidate (candidate_id)

我希望你能应用类似mysql的东西。

相关问题