约束, 其实就是⼀种限制条件, 让你不能超出这个控制范围.
⽽在数据库中的约束, 就是指表中的数据内容不能胡乱填写, 必须按照要求填写. 好保证数据的完整性与安全性
-- 准备数据
CREATE TABLE persons (
pid int,
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, '润发','周','⾹港');
PRIMARY KEY 约束:
添加主键约束
字段名 数据类型[⻓度] PRIMARY KEY
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 名称] primary key (字段列表)
CREATE 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); -- 插⼊失败
ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
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); -- 添加联合主键
如需删除 PRIMARY KEY 约束,请使⽤下⾯的 SQL:
格式: ALTER TABLE 表名 DROP PRIMARY KEY
alter table persons drop primary key;
我们通常希望在每次插⼊新记录时,数据库⾃动⽣成字段的值。
我们可以在表中使⽤ auto_increment(自动增长列)关键字,自动增长列类型必须是整型,自动增长列必须为键(通常是⽤于主键)。
字段名 整数类型[⻓度][约束] auto_increment
CREATE TABLE persons (
pid INT PRIMARY KEY AUTO_INCREMENT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255)
);
insert into persons(lastname, firstname, address) values('富成','郭','⾹港');
insert into persons(pid,lastname, firstname, address)
values(null,'⻰','成','⾹港');
alter table persons auto_increment=100; -- 我这里设置的100,可按需求更改
NOT NULL 约束:
下面的 SQL 语句要求 “lastname” 列和 “firstname” 列不接受 NULL 值:
格式: 字段名 数据类型[⻓度] NOT NULL
CREATE TABLE persons (
pid INT PRIMARY KEY AUTO_INCREMENT,
lastname VARCHAR(255) not null,
firstname VARCHAR(255) not null,
address VARCHAR(255)
);
格式: ALTER TABLE 表名 MODIFY 字段名 数据类型[⻓度]
alter table persons modify lastname varchar(255);
alter table persons modify firstname varchar(255);
UNIQUE 约束:
注意:
与主键添加方式相同,共有3种
字段名 数据类型[⻓度] UNIQUE
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255) UNIQUE -- 添加唯⼀约束
);
INSERT INTO persons(pid,lastname, firstname, address) VALUES(1,'富
成','郭','⾹港');
INSERT INTO persons(pid,lastname, firstname, address) VALUES(2,'润
发','周','⾹港');-- 插⼊失败,值重复
[constraint 名称] UNIQUE (字段)
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
CONSTRAINT uni_address UNIQUE (address) -- 添加唯⼀约束
);
ALTER TABLE 表名 ADD [CONSTRAINT 名称] UNIQUE (字段)
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255)
);
ALTER TABLE persons ADD CONSTRAINT uni_address UNIQUE (address) -- 添加唯⼀约
束
格式: ALTER TABLE 表名 DROP INDEX 名称
alter table persons drop index uni_persons_address; -- 有唯⼀约束名称, 使⽤约束
名称删除
哦
alter table persons drop index address; -- 没有唯⼀约束名称, 使⽤字段名删除
default 约束:
用于指定字段默认值。
当向表中插⼊记录时,如果没有明确的为字段赋值,则⾃动赋予默认值。
字段名 数据类型[⻓度] DEFAULT 默认值
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255) DEFAULT '⾹港' -- 添加默认约束
);
INSERT INTO persons(pid,lastname, firstname, address) VALUES(1,'富
成','郭','北京');
INSERT INTO persons(pid,lastname, firstname) VALUES(2,'⻰','成'); -- 使⽤
address的默认值
INSERT INTO persons(pid,lastname, firstname, address) VALUES(3,'润发','周',
NULL);
格式: ALTER TABLE 表名 MODIFY 字段名 数据类型[⻓度]
ALTER TABLE persons MODIFY address VARCHAR(255);