MySQL约束

我们先创建一个表结构,这里使用到了很多的约束,我们一一讲解

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
    age int check(age>0 && age<=120) comment'年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
)comment '用户表';

首先id设置为了主键primary key,然后auto_increment表示会自动增加,插入示范如下

insert into user(name,age,status,gender) values('Tom1',19,'1','男'),('Tom2',25,'0','男');
insert into user(name,age,status,gender) values('Tom3',19,'1','男');

表结构变成下面这样

 

剩下的看注释即可

insert into user(name,age,status,gender) values(null,19,'1','男');   -- 错误,name字段设置了not null非空约束
insert into user(name,age,status,gender) values('Tom3',19,'1','男');   -- 错误,name字段设置了unique关键字,唯一约束

insert into user(name,age,status,gender) values('Tom4',80,'1','男');
insert into user(name,age,status,gender) values('Tom5',-1,'1','男');    -- 错误,age字段设置了check(age>0 && age<=120)约束
insert into user(name,age,status,gender) values('Tom5',121,'1','男');   -- 错误,和上面一样

insert into user(name,age,gender) values('Tom5',120,'男');   -- status设置了default '1',不传递值则默认为1

 顺带提一句,如果使用datagrip图形界面,那就更加方便了,可以在创建字段的时候勾选

 外键约束

这个语法稍微要麻烦一些,我们先准备数据,创建两个表,dept与emp2

-- 准备数据
create table dept(
    id  int auto_increment comment'ID' primary key,
    name varchar(50) not null comment '部门名称'
)comment '部门表';
INSERT INTO dept(id,name) VALUES(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');

create table emp2(
    id  int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '姓名',
    age int comment '年龄',
    job varchar(20) comment '职位',
    salary int comment '薪资',
    entrydate date comment '入职时间',
    managerid int comment '直属领导ID',
    dept_id int comment '部门ID'
)comment '员工表';

INSERT INTO emp2(id, name, age, job, salary, entrydate, managerid, dept_id) VALUES
                (1,'金庚',66,'总裁',20000,'2000-01-01',null,5),
                (2,'张无忌',20,'项目经理',12500,'2005-12-05',1,1),
                (3,'杨逍',33,'开发',8400,'2000-11-03',2,1),
                (4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),
                (5,'常遇春',43,'开发',10500,'2004-09-07',3,1);

操作代码如下

-- 添加外键
alter table emp2 add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

-- 删除外键
alter table emp2 drop foreign key fk_emp_dept_id;

-- 外键的删除和更新行为
alter table emp2 add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade  on delete  cascade ;

这都不是重点,我们看点别的,例如,语法?

我们先明确一下,什么是外键?

根据上面的代码,我们用emp2在dept的ID字段创建了对应的外键,dept表是父表

可以通过代码更改约束条件,或者图形界面操作,例如

 强调一点

1、表1可以有一个或者多个外键,也可以没有。(如果表1有多个外键可不可以是这样的情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中)
2、这个外键可以不是表1的主键,但必须是子表的主键。(简单的说就是,如果一个字段是某个表的外键时,那么该字段必须是主键)。

 只能说是个人理解,还望指正,全部代码在仓库内可以自行下载-2022-5-4-/mysql at main · 13870517674/-2022-5-4- · GitHub

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值