首页 > 数据库 >MYSQl学习笔记19: 外键约束

MYSQl学习笔记19: 外键约束

时间:2024-03-09 09:45:29浏览次数:41  
标签:comment 19 外键 dept emp MYSQl null id

外键约束

用来让两张表的数据之间建立连接, 从而保证数据的一致性和完整性

具有外键的表(emp)称为子表

外键关联的表(dept)称为父表


外键约束

创建表时添加

create table 表名(
    字段名 数据类型,
    [constrain] [外键名称] foreign key(外键字段名) references 主表(主表列名)
);

修改表字段

alter table 表名 add constraint 外键名称 foreign key(外键字段名) reference 主表(主表列名);

创建部门表
create table dept
(
    id   int auto_increment comment 'ID',
    name varchar(50) not null comment '部门名称',
    constraint dept_pk
        primary key (id)
)    comment '部门表';

插入数据

insert  into dept (id,name) values
    (1,'研发部'),
    (2,'市场部'),
    (3,'财务部'),
    (4,'销售部'),
    (5,'总经办');

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

插入数据

insert into emp (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),
    (6,'小昭',19,'程序员鼓励师',6600,'2005-12-05',2,1);


为emp表添加外键约束

父表为dept,关联字段id

子表为emp,关联字段dept_id

alter table emp add constraint
    fk_emp_dept_id
    foreign key (dept_id)
        references dept (id);
尝试删除dept表id为1的记录,报错

保证了数据的一致性和完整性

delete from dept where id = 1;


删除emp表的外键
alter table emp drop foreign key fk_emp_dept_id;
再次尝试删除dept表id为1的记录
delete from dept where id = 1;

删除成功

标签:comment,19,外键,dept,emp,MYSQl,null,id
From: https://www.cnblogs.com/HIK4RU44/p/18062274

相关文章

  • MYSQL学习笔记20: 外键约束(删除/更新行为)
    外键约束删除/更新行为setdefault在mysql的默认引擎innodb中不支持CASCADEaltertable表名addconstraint外键名称foreignkey(外键字段)references主表名(主表字段名)onupdatecascadeondeletecascade;建立外键约束#如果父表和子表建立外键的字段有不同的......
  • MYSQL学习笔记17: 流程控制函数(IF, CASE)
    流程控制函数(IF,CASE)ifselectif(true,'ok','error');selectif(false,'ok','error');/*相当于iftrue:ok;else:error;*/ifnullselectifnull('ok','default');selectifnull(......
  • MYSQL学习笔记18: 约束
    约束约束是作用于表中字段上的规则,用于限制存储在表中的数据.保证表中的正确性,有效性和完整性约束作用于表中字段上,可以在建表和修改表时为表添加约束按照需求创建表,并创建约束createtableusers(idintprimarykeyauto_incrementcomment'主键',n......
  • MYSQL学习笔记15: 数值函数
    数值函数ceil向上取整(并不是四舍五入)selectceil(1.5);selectceil(2.1);floor向下取整selectfloor(3.9);selectfloor(2.0);mod取模(余数)selectmod(7,4);rand0-1的随机小数,不包括0和1selectrand();round四舍五入#参数2:保留的......
  • MYSQL学习笔记16: 日期函数
    日期函数返回当前日期selectcurdate();返回当前时间(24小时制)selectcurtime();返回当前日期+时间selectnow();YEAR,MONTH,DAY获取当前时间对应的年月日selectyear(now());selectmonth(now());selectday(now());在制定日期上增加时间后的日期......
  • MYSQL学习笔记9: DQL排序查询(升降序)
    DQL排序查询select字段列表from表名orderby字段1排序方式1,字段2排序方式2;排序方式ASC升序(默认)DESC降序如果是多字段排序,第一个字段值相同,会根据第二个字段的值进行排序,以此类推按年龄降序排序select*fromworkersorderbyagedesc;......
  • MYSQL学习笔记10: DQL分页查询(利用limit)
    DQL分页查询(利用limit)select字段列表from表名limit起始索引,查询记录数;起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数分页查询是数据库的方言,不同数据库有不同的实现,MYSQL中是LIMIT如果查询的是第一页的数据,起始索引可以省略,直接简写为l......
  • MYSQL练习1: DQL查询练习
    MYSQL练习1DQL查询练习查询年龄为20,21,22,23岁的员工信息select*fromworkerswhereagein(20,21,22,23);查询性别为男,年龄在20-40岁间,姓名长度为3的员工select*fromworkers    where    gender='男'    and    agebetwe......
  • MYSQL学习笔记12: DCL数据控制语言(用户操作)
    DCL数据控制语言查询用户#用户信息保存在数据库mysql的user表中usemysql;select*fromuser;创建用户createuser'用户名'@'主机名'identifiedby'密码';在主机localhost创建一个新用户createuser'hikari39'@'localhost'identifiedby'123456......
  • MYSQL学习笔记13: DCL权限控制(用户权限操作)
    DCL权限控制查询权限showgrantsfor'用户名'@'主机名';查询某个用户的权限showgrantsfor'hikaru39'@'localhost';授予权限grant权限列表on数据库名.表名to'用户名'@'主机名';授予某个用户权限#all,给予数据库itcast中所有表的权限grantallonitcast......