约束

风陵南·2022-09-06 20:43·435 次阅读

约束

 约束的概念和分类

  1、 约束的概念

    * 约束是作用于表中列上的规则,用于限制加入的数据

    * 约束的存在保证了数据库中数据的正确性、有效性和完整性

  2、 约束的分类(MySQL不支持检查约束)(数据大小的校验通常在java代码中进行)

约束名称 描述 关键字
非空约束 保证列中所有的数据不能有 null 值 NOT NULL
唯一约束 保证列中所有数据各不相同 UNIQUE
主键约束 主键是一行数据的唯一标识,要求非空且唯一 PRIMARY KEY 
检查约束 保证列中的值满足某一条件 CHECK
默认约束 保存数据时,未指定值则采用默认值 DEFAULT
外键约束 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 FOREIGN KEY

 

 

 

 

 

 

 

 

  3、 约束案例(非空、唯一、主键)

    例:根据需求为表添加合适的约束

-- 员工表
create table emp (
    id int, -- 员工 id ,主键且自增长
     ename varchar(50),  -- 员工姓名,非空且唯一
    joindate date, -- 入职日期, 非空
    salary double(7,2), -- 工资,非空
    bonus double(7,2) -- 奖金,如果没有默认为0
);

    答:(自增长:auto_increament : 当列是数字类型 且 唯一约束时,可以使用自增长)

create table emp (
    id int PRIMARY KEY auto_increment, -- 员工 id ,主键且自增长
     ename varchar(50) not null unique,  -- 员工姓名,非空且唯一
    joindate date not null, -- 入职日期, 非空
    salary double(7,2) not null, -- 工资,非空
    bonus double(7,2)  default 0-- 奖金,如果没有默认为0
);

 

  附属代码:

复制代码
create database if not EXISTS db_0906;

use db_0906;
drop TABLE if EXISTS emp;
-- 员工表
create table emp (
    id int PRIMARY KEY auto_increment, -- 员工 id ,主键且自增长
     ename varchar(50) not null unique,  -- 员工姓名,非空且唯一
    joindate date not null, -- 入职日期, 非空
    salary double(7,2) not null, -- 工资,非空
    bonus double(7,2)  default 0-- 奖金,如果没有默认为0
);

select * from emp;

INSERT into emp (id, ename, joindate, salary, bonus) values (1,'张三','1999-11-11',8800,5000);

INSERT into emp (id, ename, joindate, salary, bonus) values (null,'张三','1999-11-11',8800,5000); -- 报错  主键为空

INSERT into emp (id, ename, joindate, salary, bonus) values (1,'李四','1999-11-11',8800,5000); -- 报错  主键唯一

-- 演示非空约束
INSERT into emp (id, ename, joindate, salary, bonus) values (2,NULL,'1999-11-11',8800,5000); -- 报错

-- 演示默认约束
INSERT into emp (id, ename, joindate, salary) values (3,'王五','1999-11-11',8800); --  bonus 默认为 0  但如果赋值为 null 值不会默认为0  仍为null
INSERT into emp (id, ename, joindate, salary,bonus) values (3,'王五','1999-11-11',8800,NULL);   -- bonus 为 null


-- 演示自动增长:auto_increament: 当列是数字类型 且 唯一约束时,可以使用自增长
INSERT into emp (ename, joindate, salary, bonus) values ('赵六1','1999-11-11',8800,5000);
INSERT into emp (id, ename, joindate, salary, bonus) values (NULL, '赵六2','1999-11-11',8900,5000);
复制代码

 

 

  4、 外键约束

    (1)概念

      外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

      

 

 

 

 

    (2)语法

      ① 创建表时添加外键约束

 

create table 表名(
    列名 数据类型,
    ......
    [CONSTRAINT] [外键名称] FOREIGN KEY (外键列名) REFERENCES 主表(主表列名)
);

 

 

 

      ② 建完表后添加外键约束(表名为从表的表名   )

 

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

 

 

      ③删除外键

 

ALTER TABLE 表名 drop FOREIGN KEY 外键名称;

 

    

   (3)外键可视化

    

 

 

 

 

    附属代码:

复制代码
-- ===============演示外键约束===============
drop table if EXISTS dept;
drop table if EXISTS emp;


-- 部门表
create table dept (
    id int primary key auto_increment,
    dep_name varchar(20),
    addr varchar(10)
);

-- 注意: 要先创建主表!才能创建关联
-- 员工表
create table emp(
    id int PRIMARY KEY auto_increment,
    name varchar(10),
    age int,
    dep_id int,
    -- 添加外键 dep_id 关联 dept 表的id主键
    CONSTRAINT fk_emp_dept foreign key (dep_id) REFERENCES dept(id)
);


-- 添加数据时也要先添加主表的数据!
-- 添加 2 个部门
insert into dept (dep_name,addr) VALUES ('研发部', '广州'), ('销售部', '深圳');


-- 添加员工
INSERT into emp (name, age, dep_id) values 
('张三', 20, 1),
('李四', 20, 1),
('王五', 20, 1),
('赵六', 20, 2),
('孙七', 20, 2),
('周八', 20, 2);

-- =======
select * from emp;
select * from dept;

-- 删除外键
alter table emp DROP foreign key fk_emp_dept ; 

-- 添加外键(创建完表之后)
alter table emp add constraint fk_emp_dept FOREIGN KEY (dep_id) references dept(id); 
复制代码

 

posted @   风陵南  阅读(435)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示