如何将约束添加到 MYSQL 中的列仅以保存已存在于同一表的另一列中的值? [复制]

Posted

技术标签:

【中文标题】如何将约束添加到 MYSQL 中的列仅以保存已存在于同一表的另一列中的值? [复制]【英文标题】:How to add constraint to a colum in MYSQL only to hold values which are already present in another column of same table? [duplicate] 【发布时间】:2020-11-02 12:50:20 【问题描述】:

这是我应该创建的表:

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

谁能帮我添加必要的语句来完成上述任务。

【问题讨论】:

【参考方案1】:

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

【讨论】:

我不知道外键是这样工作的....非常感谢。 我在 mysql 中遇到错误【参考方案2】:

不是check,而是foreign key 约束。

我不懂 MySQL 语法;在甲骨文中,那将是

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

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

【讨论】:

以上是关于如何将约束添加到 MYSQL 中的列仅以保存已存在于同一表的另一列中的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 添加字段

mysql-约束

mysql默认值问题(高分!!!)

mysql数据库在已存在表格上增删列,能否用alter table语句实现?

将 Json 文件中的数据加载到 PostgresSql 中会导致:错误“重复键值违反唯一约束 - 已存在。”

如何使用 phpmyadmin 向 mysql 数据库中的列添加自动增量?