约束, 其实就是⼀种限制条件, 让你不能超出这个控制范围。 公路上有速度限制、⻋距限制、鸣笛限制。 ⽽在数据库中的约束,就是指 表中的数据内容 不能胡乱填写,必须按照要求填写,好保证数据的 完整性与安全性 .
-- 准备数据
CREATE TABLE persons (
pid int COMMENT '用户编号',
firstname varchar(255) COMMENT '名字',
lastname varchar(255) COMMENT '姓氏',
address varchar(255) COMMENT '家庭住址'
);
insert into persons values(1, '星驰','周','香港');
insert into persons values(1, '德华','刘','香港');
insert into persons values(2, '德华','刘',null);
insert into persons values(null, '润发','周','香港');
⽅式⼀:创建表时,在字段描述处,声明指定字段为主键:
xxxxxxxxxx
CREATE TABLE persons (
pid int primary key, -- 添加了主键约束
lastname varchar(255),
firstname varchar(255),
address varchar(255)
);
INSERT INTO persons VALUES(1, '星驰','周','香港');
INSERT INTO persons VALUES(1, '德华','刘','香港'); -- 设置主键后, 插入失败, 值重复
INSERT INTO persons VALUES(2, '德华','刘',NULL);
INSERT INTO persons VALUES(NULL, '润发','周','香港'); -- 设置主键后, 插入失败, 值不能为 NULL
⽅式⼆:创建表时,在 constraint 约束区域,声明指定字段为主键:
xCREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
constraint pk_persons primary key (pid) -- 添加主键约束, 单一字段
);
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
CONSTRAINT pk_persons PRIMARY KEY (lastname, firstname) -- 添加主键约束, 多个字段, 我们称为联合主键。
);
INSERT INTO persons VALUES(1, '星驰', '周', '香港');
INSERT INTO persons VALUES(1, '德华', '刘', '香港');
INSERT INTO persons VALUES(2, '德华', '刘', NULL); -- 插入失败,因为刘 德华重复
INSERT INTO persons VALUES(3, '德华', '马', '大陆');
⽅式三:创建表之后,通过修改表结构,声明指定字段为主键:
xxxxxxxxxx
CREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255)
);
alter table persons add constraint pk_persons primary key (lastname, firstname); -- 添加联合主键
格式:
xxxxxxxxxx
ALTER TABLE 表名 DROP PRIMARY KEY
实例:
xxxxxxxxxx
alter table persons drop primary key;