约束: 主键约束、非空约束、唯一约束、外键约束

本贴最后更新于 1708 天前,其中的信息可能已经时移世易

概念:

对表中的数据进行限定,保证数据的正确性、有效性和完整性。

分类:

主键约束:primary key

  • 作用:
    • 用来唯一标识数据库中的每一条记录
  • 特点:
    • 非空 not null
    • 唯一
    • 一张表只能有一个字段为主键
    • 主键就是表中记录的唯一标识
  • 创建主键方式:
    • 在创建表的时候给字段添加主键
      • 字段名 字段类型 PRIMARY KEY
    • 在已有表中添加主键
      • ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
-- 创建表学生表st5, 包含字段(id, name, age)将id做为主键
create table st5 (
	id int primary key,  -- id为主键
	name varchar(20),
	age int
);

 desc st5;

20200312183409977.png

  • 删除主键
-- 删除st5表的主键
alter table st5 drop primary key;
  • 添加主键
alter table st5 add primary key(id);
  • 创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
  • 自动增长:
    • 如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
-- 在创建表时,添加主键约束,并且完成主键自增长
create table stu(
	id int primary key auto_increment,-- 给id添加主键约束
	name varchar(20)
);
  • 删除自动增长
ALTER TABLE stu MODIFY id INT;
  • 添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

非空约束:not null,值不能为 null

  • 创建表时添加约束
CREATE TABLE stu(
	id INT,
	NAME VARCHAR(20) NOT NULL -- name为非空
);
  • 创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
  • 删除 name 的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);

唯一约束:unique,值不能重复

  • 创建表时,添加唯一约束
CREATE TABLE stu(
	id INT,
	phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
);

注意 mysql 中,唯一约束限定的列的值可以有多个 null

  • 删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;
  • 在创建表后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。

  • 在创建表时,可以添加外键
格式如下:
create table 表名(
	....
	外键列
	constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
举例:
-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
create table department(
	id int primary key auto_increment,
	dep_name varchar(20),
	dep_location varchar(20)
);

create table employee(
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int,  -- 外键对应主表的主键
	-- 创建外键约束
	constraint emp_depid_fk foreign key (dep_id) references department(id) )

insert into department values(null, '研发部','广州'),(null, '销售部', '深圳');

-- 正常添加数据
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);

INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);

20200312185949190.png

  • 删除外键

ALTER TABLE 从表 drop foreign key 外键名称;

-- 删除employee表的emp_depid_fk外键
alter table employee drop foreign key emp_depid_fk;
  • 创建表之后,添加外键

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

-- 在employee表情存在的情况下添加外键
alter table employee add constraint emp_depid_fk foreign key (dep_id) references department(id);
  • 级联操作
  • 在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
-- 添加级联操作
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
-- 分类:

级联更新:ON UPDATE CASCADE -- 只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键 列也自动同步更新

级联删除:ON DELETE CASCADE
  • SQL
    127 引用 • 386 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...