我创建了以下两个表格来映射学生和老师:
CREATE TABLE students(
student_id SERIAL PRIMARY KEY,
first_name NOT NULL VARCHAR(50),
last_name NOT NULL VARCHAR(50),
phone VARCHAR(15) UNIQUE NOT NULL CHECK (phone NOT LIKE '%[^0-9]%'),
email VARCHAR(30) UNIQUE NOT NULL CHECK (email NOT LIKE '%@%'),
graduationYear SMALLINT CHECK (graduationYear > 1900)
);
CREATE TABLE teachers(
teacher_id SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
departament VARCHAR(40) NOT NULL,
email VARCHAR(30) UNIQUE NOT NULL CHECK (email NOT LIKE '%@%'),
phone VARCHAR(15) UNIQUE NOT NULL CHECK (phone NOT LIKE '%[^0-9]%')
);
如您所见,两个表都有一个 phone
和 email
的列。我希望这两个字段对每个人都是 唯一的。
我该如何引入一个约束条件来检查在 students
表中输入的电话号码/电子邮件是否已经存在于 teachers
表中?是否有任何类似于 UNIQUE 但用于多个表的关键字,或者我应采取其他方法?
编辑:正如 @a_horse_with_no_name 指出的,LIKE
不支持正则表达式。我应该使用 SIMILAR TO
。
LIKE
不支持正则表达式。如果您想坚持使用标准 SQL,则需要使用 similar to;或者使用 posix regex。 - user330315