MySQL中约束

约束

概念&分类

  1. 约束的概念:

    • 约束是作用表中列的规则,来限制输入到表中的数据。
    • 约束保证了数据库中数据的正确性、有效性和完整性。
  2. 约束的分类

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

非空约束

  • 创建一个员工表
drop table if exists emp;

#非空not null,唯一unique,主键primary key,检查check,默认default,外键foreign key.

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
);
-- 演示非空约束
insert into emp(id,ename,joindate,salary,bonus) values(4,null,'2011-01-01',5200,500);
insert into emp(id,ename,joindate,salary,bonus) values(5,'李六','2011-01-01',5200,500);

唯一约束

-- 演示唯一约束
insert into emp(id,ename,joindate,salary,bonus) values(6,'张三','2011-01-01',5200,500);
insert into emp(id,ename,joindate,salary,bonus) values(6,'黄七','2011-01-01',5200,500);

主键约束

--  演示主键约束,主键非空且唯一
insert into emp(id,ename,joindate,salary,bonus) values(null,'张三','2011-01-01',5200,500);
insert into emp(id,ename,joindate,salary,bonus) values(2,'张三','2011-01-01',5200,500);
insert into emp(id,ename,joindate,salary,bonus) values(3,'王五','2011-01-01',5200,500);
  • 演示自动增长
-- 演示自动增长:auto_increment 当列时数字类型并且唯一约束
insert into emp(ename,joindate,salary) values('原九','2011-01-01',5200);
insert into emp(ename,joindate,salary) values('原九2','2011-01-01',5200);
insert into emp(id,ename,joindate,salary) values(null,'原九3','2011-01-01',5200);

默认约束

-- 演示默认约束
insert into emp(id,ename,joindate,salary,bonus) values(7,'张八','2011-01-01',5200,null);
#实现默认约束时,不给变量名和值才算是默认约束,给null也算值不会显示默认值
insert into emp(id,ename,joindate,salary) values(8,'原九','2011-01-01',5200);

检查约束

  • MySQL中不支持使用,故此处不演示。

外键约束

  • 目的:让两个表之间建立物理联系而非逻辑联系。
  1. 在创建表时就建立好外键约束

    格式:constraint 外键名称(fk _ 外键所在的表名 _ 主键所在的表名) foreign key(外键列名) references 主表名称(列名);

    create table dept(
    		id int primary key auto_increment,
    		dep_name varchar(20) not null unique,
    		addr varchar(20) not null 
    );
    
    create table emp(
    	id int primary key auto_increment,
    	name varchar(20) not null unique,
    	age int not null,
    	dep_id int not null ,
    	
    -- 	添加外键dep_id 关联 dept表中的id主键
    constraint fk_emp_dept foreign key(dep_id) references dept(id);
    );
    -- 添加部门的数据
    INSERT INTO dept(dep_name, addr) VALUES
    ('研发部','广州'),('销售部','深圳');
    
    -- 添加员工的数据
    INSERT INTO emp(name, age, dep_id) VALUES
    ('张三',21,1),
    ('李四',20,1),
    ('王五',22,1),
    ('赵六',21,2),
    ('孙七',22,2),
    ('周八',21,2);
    
    SELECT * FROM dept;
    SELECT * FROM emp; 
    
    • 删除外键
    ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;
    
    • 建完表后再添加外键

    格式:alter table 外键所在表名 constraint 外键名称 foreign key(外键名称) references 主键表(主键);

    ALTER TABLE emp CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值