如何将约束添加到 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数据库在已存在表格上增删列,能否用alter table语句实现?