约束是对表中的数据进行限定,从而保证数据的有效性,正确性,完整性。
在MySQL中有四类约束。分别是:主键约束(primary key),非空约束(not null),唯一约束(unique),外键约束(foreign key)。
CREATE TABLE stu(id INT,VARCHAR(100) NOT NULL);
现在,指定name不能为空,下面来试试,插入一个没有名字的记录到表中。
MySQL报错,告诉我们name不能是NULL。
如果你想删除表中的非空约束,那么你可以使用修改表的语句,例如,我们来删除name字段的非空约束。
ALTER TABLE stu MODIFY name VARCHAR(100);
删除该约束以后,我们就可以把一个没有名字的记录插入进去了。
注意,在创建完成表之后,你如果想加入非空约束,那么就必须保证你更改的字段没有NULL值。否则必须先删除含有NULL的记录,才能加入非空约束。加入非空约束的办法依旧是使用修改表的语句(ALTER TABLE)。
唯一约束表示值不能重复。现在我们来创建一张表,来约束某个字段不能重复。
CREATE TABLE phone_number(id BIGINT NOT NULL,number INT(11) NOT NULL UNIQUE);
现在,我们来进行插入操作。
注意,在MySQL里NULL是表示不确定,因此,唯一约束限定的值不包括NULL。也就是说即使你进行了唯一约束,出现多个NULL是合法的。
ALTER TABLE phone_number DROP INDEX number;
下面删除唯一约束之后,插入同样的number是可以的。
ALTER TABLE phone_number MODIFY number INT(11) UNIQUE;
注意,在添加唯一之前,应该删除某个字段中重复的值,否则无法添加唯一约束。
主键约束表示的是非空并且唯一。
一张表只能有一个字段为主键。
主键是表的唯一标识。
下面有一张表,并且设置主键。其中主键是自动增长的。
CREATE TABLE login(
id BIGINT NOT NULL , -- ID
account VARCHAR(100) NOT NULL, -- 账户
password TEXT NOT NULL, -- 密码
type VARCHAR(30), -- 账户类型
PRIMARY KEY(id) -- 设主键
)
ALTER TABLE login DROP PRIMARY KEY;
ALTER TABLE login MODIFY id BIGINT PRIMARY KEY;
如果某一列是自动增长的,可以使用AUTO_INCREMENT来实现自动增长。
现在,我们先删除刚才那张表,然后重新创建它,这次让他的主键来自动增长。
CREATE TABLE login(
id BIGINT NOT NULL AUTO_INCREMENT, -- ID
account VARCHAR(100) NOT NULL UNIQUE, -- 账户
password TEXT NOT NULL, -- 密码
type VARCHAR(30), -- 账户类型
PRIMARY KEY(id) -- 设主键
)
删除自动增长:
ALTER TABLE login MODIFY id INT;
添加自动增长:
ALTER TABLE login MODIFY id BIGINT AUTO_INCREMENT;
一般而言,自动增长只需要一个字段就足够了,因为两个字段的字段增长没有意义。所以,我们在使用的时候几乎都是一个字段的自动增长。另外,MySQL里自动增长的字段必须被设为主键,否则报错。