我有一个学生名册,主表是这个,我只是想确保不会有重复姓名、电子邮件等的学生。ID 是主键,所以我不需要使用PK.
CREATE TABLE student(
id INT UNSIGNED NOT NULL,
campus_id SMALLINT UNSIGNED NOT NULL,
first_career_id SMALLINT UNSIGNED NOT NULL,
second_career_id SMALLINT UNSIGNED NULL,
name VARCHAR(70) NOT NULL,
password CHAR(60) NOT NULL,
email VARCHAR(100) NOT NULL,
phone TINYINT UNSIGNED NULL,
UNIQUE(id),
UNIQUE(name),
UNIQUE(email),
UNIQUE(phone),
FOREIGN KEY(first_career_id)
REFERENCES career(id)
ON DELETE CASCADE,
FOREIGN KEY(second_career_id)
REFERENCES career(id)
ON DELETE CASCADE
) ENGINE=INNODB;
我可以在通过应用程序插入这些字段时验证它们,哪种方式更好?
最佳答案
如果唯一性是域约束(在您的示例中),则在列上创建 UNIQUE 约束(为您创建唯一索引)。
ALTER TABLE student
ADD CONSTRAINT ux_student_email
UNIQUE (email)
如果您可以 100% 确定(和 future 证明)没有其他应用程序会插入数据,那么确保应用程序的唯一性就很好。如果您重视正确性,除了检查应用程序之外,还要在数据库级别添加约束。
关于mysql - 使用 UNIQUE 索引好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49951886/