约束的概念和分类(包含外键约束)

约束的概念

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

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

约束的分类

非空约束: 保证列中所有的数据不能有null值   关键字  NOT null

唯一约束: 保证列中所有数据各不相同     关键字 Unique

主键约束:主键是一行数据的唯一标识,要求非空且唯一  关键字  Primary Key

检查约束: 保证列中的值满足某一条件   关键字 Check

默认约束: 保存数据时,未指定值采用默认值   关键字Default

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

注意:mysql中是没有检查约束的 

案例

-- 员工表
CREATE table `emp11`(
	`id` int PRIMARY KEY auto_increment, -- 员工id,主键且自增
	`ename` VARCHAR(50)  UNIQUE  NOT NULL, -- 员工姓名  非空且唯一
	`joindate` DATE not NULL, -- 入职日期,非空
	`salary` DOUBLE(7,2) NOT null,-- 工资非空
	`bonus` DOUBLE(7,2)  DEFAULT 0 -- 如果没有奖金默认为0
);
INSERT into emp11 (id ,ename,joindate,salary,bonus)VALUES (1,'张三','1999-11-11',3000,222);
INSERT into emp11 (ename,joindate,salary)VALUES ('李四','1999-11-11',3000);
SELECT * FROM emp11;

自增字段的要求为:当前列是数字类型,并且是唯一约束修饰的

补充一下

-- 删除约束非空约束    ALTER table 表名 MODIFY 字段名 数据类型 ;
ALTER table emp11 MODIFY salary DOUBLE;
-- 建完表后添加非空约束   ALTER TABLE 表名 modify 字段名 数据类型  NOT NULL;
ALTER TABLE  emp11 modify salary DOUBLE NOT null;


-- 删除约束唯一约束    ALTER table 表名 MODIFY 字段名 数据类型 ;
-- 建完表后添加唯一约束   ALTER TABLE 表名 modify 字段名 数据类型  UNIQUE;

-- 建完表添加默认约束  ALTER TABLE 表名 	ALTER 字段名 SET DEFAULT 默认值;
-- 删除默认约束  ALTER TABLE 表名 ALTER 字段名 DEFAULT;

-- 建完表添加主键约束   ALTER table 表名 ADD PRIMARY KEY(字段名);
-- 删除主键  ALTER table 表名  DROP PRIMARY key;

外键约束:

概念:外键是用来让两个表的数据建立连接,保证数据的一致性和完整性

添加外键约束

要先创建好主表,才能创建外键   。

添加数据的时候也要先添加主表,才能添加字表

要想删除主表数据,必须先把与主表相关联的数据先删除,或者直接删除外键

在Navicat中,可以选择表-> 选择有关联的表->右击->逆向表到模型就可以查看表的关系

-- 部门表(主表)
CREATE TABLE dept(
	id int PRIMARY key auto_increment,
	dep_name varchar(20),
	addr VARCHAR(20)
);

-- 员工表(从表)
CREATE TABLE emp3(
	id int PRIMARY key auto_increment,
	`name` VARCHAR(20),
	age int,
	dep_id int,
	-- 添加外键  dep_id,关联dept 表的主键    CONSTRAINT 外键名 FOREIGN key(本(子)表字段) REFERENCES 主表(字段)
	CONSTRAINT fk_emp3_dept FOREIGN key(dep_id) REFERENCES dept(id)
);

-- 给部门表添加数据
INSERT into dept(dep_name,addr) VALUES('研发部','北京'),('销售部','上海');

-- 给员工表添加数据
INSERT into emp3(name,age,dep_id) VALUES
('张三','20',1),
('李四','22',2),
('王五','20',2),
('赵六','20',1);

SELECT * FROM dept;

SELECT * FROM emp3;


--   删除外键  ALTER table 表名(在哪个表创建的外键就写哪个表的表名)  DROP  FOREIGN key 外键名称;
	ALTER TABLE emp3 DROP FOREIGN key fk_emp3_dept;
	
--  建完表后添加外键ALTER table 表名  ADD CONSTRAINT 外键名称 FOREIGN key (外键字段名称,本表的) REFERENCES 主表名称(主表列名称);
ALTER table emp3  ADD CONSTRAINT fk_emp3_dept FOREIGN key(dep_id)  REFERENCES dept(id);
	
	

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值