如何在MYSQL中添加约束,使列仅保留已经存在于同一表的另一列中的值?

23 浏览
0 Comments

如何在MYSQL中添加约束,使列仅保留已经存在于同一表的另一列中的值?

这是我应该创建的表格:

表格

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

);

可以有人帮我添加必要的语句来完成上述任务吗?

0
0 Comments

问题的原因是想要在MySQL中为一个列添加约束,使该列只能包含已经存在于同一表的另一列中的值。而解决方法是使用外键约束(foreign key constraint)。

在MySQL中,可以通过以下语法来添加外键约束:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (列名) REFERENCES 外键表名(外键列名);

其中,表名是要添加外键约束的表名,约束名是给外键约束起的名称,列名是要添加外键约束的列名,外键表名是被参考的表名,外键列名是被参考表中的列名。

对于这个问题,可以通过以下步骤来解决:

1. 首先,确定需要添加外键约束的表和列名。假设要为表中的manager_id列添加约束,这个列的值必须存在于同一表的candidate_id列中。

2. 使用ALTER TABLE语句来添加外键约束。语句如下:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (manager_id) REFERENCES 表名(candidate_id);

其中,表名是要添加外键约束的表名,约束名是给外键约束起的名称,manager_id是要添加约束的列名,表名(candidate_id)表示参考表的名称和被参考列的名称。

3. 执行以上语句后,MySQL会自动创建外键约束,确保manager_id列中的值只能是candidate_id列中已经存在的值。

通过以上步骤,可以在MySQL中为一个列添加约束,使该列只能包含已经存在于同一表的另一列中的值。

0
0 Comments

问题的原因是作者混淆了CHECK约束和FOREIGN KEY约束。作者在代码中使用了CHECK约束来限制Candidate_Dept列的值必须存在于同一表的另一列中,这是不正确的。正确的方法是使用FOREIGN KEY约束来实现这个限制。

解决方法是将第二个约束改为FOREIGN KEY约束,代码如下:

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

此外,作者在定义Candidate_Dept列时将数据类型设置为FLOAT(2),并将默认值设置为'HR',这是不正确的。'HR'不是一个有效的浮点数值,应该使用字符串类型。另外,主键应该避免使用浮点数值。

最后,作者对于FOREIGN KEY的使用方式表示不了解,对此给出了感谢。

作者在MYSQL中遇到了错误,但没有提供具体的错误信息。

0