如何仅向 MYSQL 中的列添加约束以保留已存在于相同 table 的另一列中的值?

How to add constraint to a colum in MYSQL only to hold values which are already present in another column of same table?

这是我应该创建的 table:

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))
);

谁能帮我添加必要的声明以完成上述任务。

不是 check,而是 foreign key 约束。

我不知道 MySQL 语法;在 Oracle 中,这将是

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

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

您混淆了 CHECK 约束和 FOREIGN KEY 约束。你的第二个约束应该是一个外键:

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)
);