CREATE TABLE my_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) UNIQUE, email VARCHAR(50) UNIQUE );
上述语句创建了一个名为my_table的表,其中含有三个列,分别是id、name和email。其中,id列是主键,使用了AUTO_INCREMENT关键字,以实现自动编号。而name和email列则分别使用了UNIQUE关键字,以实现唯一性约束。这样,在插入数据时,如果出现了重复的name或email值,系统就会报错,插入失败。
除了在创建表时指定唯一性约束外,大家还可以在表已经创建好之后,通过ALTER TABLE语句来添加唯一性约束。下面是一个示例:
ALTER TABLE my_table ADD CONSTRAINT uc_name UNIQUE (name);
上述语句在my_table表上添加了一个名为uc_name的唯一性约束,它针对的是name列。这样,在该表中,name列的取值就不能重复了。
需要注意的是,唯一性约束并不是强制性的,也就是说,大家可以在某些情况下允许重复值的出现。比如,在一个用户表中,大家可能允许email地址出现相同的情况。这时,大家可以通过添加一个条件来限制唯一性约束的作用范围。下面是一个示例:
CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL, UNIQUE (email) WHERE (name'admin') );
上述语句创建了一个名为user的表,其中含有三个列,分别是id、name和email。其中,id列是主键,使用了AUTO_INCREMENT关键字,以实现自动编号。而name和email列则分别约束为非空。在email列上,大家使用了UNIQUE关键字,并在后面添加了一个WHERE子句,以确定唯一性约束的作用范围。在这个例子中,大家限制了只有name不等于’admin’的记录才会受到唯一性约束的限制。这意味着,大家可以允许’admin’这个用户在系统中拥有多个email地址。这种方法可以在某些情况下解决唯一性约束带来的限制问题。