如何仅向 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)
);
这是我应该创建的 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)
);