首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 学习笔记(三):完整性和触发器设计

    cascade on update cascade, foreign key (Cno) references Course(Cno) on delete cascade /*定义(Sno..... on delete cascade on update cascade, /*定义Cno为外键参考course表的主键Cno,并且实现级联删除SC表中相应的元组 */ );  2....外键约束 + 级联(删除/更新) alter table 从表 add constraint 约束名 foreign key(属性名) references 主表(属性名)  ON DELETE CASCADE...on delete cascade on update cascade; alter table SC add constraint SC_Courses foreign key(cno) references...这里我创建外键的时候 sno 中有些表有主键约束,有些却没有,所以当我删除主键约束的时候它会提示外键被错误建立起来了。但我不明白为什么建立外键的时候没有报错。

    2.2K40

    MYSQL-外键(Foreign Key)

    MySQL(本章节) PostgreSQL MongoDB Redis Etcd 我们来深入探讨 MySQL 中的外键(Foreign Key)。...外键约束可以自动防止上述情况发生。 三、外键约束的规则与引用操作 当你定义外键时,可以指定当主表中的数据被更新(UPDATE)或删除(DELETE)时,对从表中的数据应该执行什么操作。...CASCADE(级联操作) 含义:同步操作。对主表的主键进行操作时,会自动同步到从表的外键上。 ON DELETE CASCADE:删除主表中的记录时,自动删除从表中所有相关联的记录。...ON UPDATE CASCADE:更新主表主键的值时,自动更新从表中所有相关外键的值。 示例:ON DELETE CASCADE 设定后,删除一个部门,该部门下的所有员工记录也会被自动删除。...(department_id):指定外键引用哪个表的哪个字段 ON DELETE SET NULL:当被引用的部门被删除时,将此字段设为 NULL ON UPDATE CASCADE:当被引用的部门ID

    13.7K10

    MySQL实战七:你不知道的外键与约束使用!

    2.2 外键 2.2.1 创建外键 (1)不带别名的外键,数据库自动生成 首先创建department表: CREATE TABLE department ( dept_name varchar...学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表(子表)中也更新,主键表(父表)中的记录被删除,外键表(子表)中改行也相应删除。...CASCADE) 不管有没有on delete cascade都会出现这个问题。...上述on delete cascade换成on update cascade,可以发现只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效!...cascade 不能更新父表主键或子表外键,删除父表主键数据会将子表联同删除,删除子表外键数据不影响父表。

    5.1K20

    POSTGRESQL 性能优化 数据的DML 需要进行优化吗? 当然

    实际上POSTGRESQL 的DML 只分为两类 1 INSERT 2 SELECT INSERT = UPDATE OR DELETE 数据插入和找到需要进行修改的数据,并在次将新的数据进行插入的操作...INDEX 的数量和质量问题 2 数据表中的FACTOR的状态和设置 3 UPDATE 的频率问题 4 Autovacuum 频率调整的问题 5 定期需要进行pg_repack 的工作 6 外键与约束的影响...2 Factor 因子,大部分数据表操作中都很少触及这个项目,但POSTGRESQL 在频繁的UPDATE 中尽量还是考虑这个问题,因为UPDATE = DELETE OLD + INSERT NEW...6 外键与约束,约束本身并不会对表的数据的插入产生过多的影响,而一些设计不好的外键并且带有级联性质的设计,才是对表DML操作带来性能问题的一个因素,减少外键级联的设计,有助于提高POSTGRESQL 的数据的...实际上除了这些,还有trigger的操作,如果 trigger 本身并不是频繁触发,并且里面并不带有大了的UPDATE 语句,那么trigger 还是可以被接受的,但如果trigger 本身里面就带有大了的

    1.4K41

    MySQL系列:(3)MySQL加强

    FROM T_Persons; -- 不能影响自增长约束 TRUNCATE TABLE T_Persons;-- 可以影响自增长约束 2.7、外键 作用:约束两种表的数据 语法:CONSTRAINT...外键名 FOREIGN KEY(副表的外键字段) REFERENCES 主表(主表的主键) -- 部门表(主表) CREATE TABLE T_Department( Id INT PRIMARY KEY...DELETE CASCADE 注意: 级联操作必须在外键基础上使用 CREATE TABLE T_Employee( Id INT PRIMARY KEY AUTO_INCREMENT, NAME... ON DELETE CASCADE ) 3、数据库三大范式和MySQL变量 3.1、三大范式 设计原则: 建议设计的表尽量遵守三大范式。...语法: DELIMITER $ CREATE TRIGGER 触发器的名字 AFTER INSERT/UPDATE/DELETE ON 表名 FOR EACH ROW BEGIN -- SQL语句 END

    1.2K10

    MySQL触发器

    触发器的创建  创建触发器语法 CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 触发器执行的语句块...INSERT | UPDATE | DELETE :表示触发的事件。 INSERT 表示插入记录时触发; UPDATE 表示更新记录时触发; DELETE 表示删除记录时触发。...注意点 注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...,此时基于子表的UPDATE和DELETE语句定义的触发器并不会被激活。...例如:基于子表员工表(t_employee)的DELETE语句定义了触发器t1,而子表的部门编号(did)字段定义了外键约束引用了父表部门表(t_department)的主键列部门编号(did),并且该外键加了

    5.4K20

    为什么数据库不应该使用外键

    图 2 - 无状态服务与数据库 不使用外键的原因其实很简单,MySQL、PostgreSQL 等关系型数据库很难水平扩容,但是无状态的服务往往都可以很容易地扩容。...根据更新和删除时的行为不同,我们可以将外键分成 RESTRICT、CASCADE 和 SET NULL 等几种[^4],当我们为关系表中的字段增加外键约束时,需要指定外键的类型,最常见的也就是 RESTRICT...和 CASCADE 两种,其中 RESTRICT 为外键的默认类型,不同类型的外键会带来不同的额外开销,而这些额外开销就是我们不使用外键的理由: 使用 RESTRICT 会在更新或者删除记录时对外键对应的记录是否存在进行一致性检查...posts ADD CONSTRAINT FOREIGN KEY (author_id) REFERENCES authors(id) ON UPDATE CASCADE ON DELETE CASCADE...DELETE FROM authors WHERE id = 1; 与数据库外键的 CASCADE 相比,这种方式会带来更大的额外开销,只是我们能降低对数据库性能的瞬时影响。

    4.2K10

    第17章_触发器

    触发器的创建 # 2.1 创建触发器语法 创建触发器的语法结构是: CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名...INSERT|UPDATE|DELETE :表示触发的事件。 INSERT 表示插入记录时触发; UPDATE 表示更新记录时触发; DELETE 表示删除记录时触发。...# 4.3 注意点 注意,如果在子表中定义了外键约束,并且外键指定了 ON UPDATE/DELETE CASCADE/SET NULL 子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...例如:基于子表员工表(t_employee)的 DELETE 语句定义了触发器 t1,而子表的部门编号(did)字段定义了外键约束引用了父表部门表(t_department)的主键列部门编号(did),...并且该外键加了 “ON DELETE SET NULL” 子句,那么如果此时删除父表部门表(t_department)在子表员工表(t_employee)有匹配记录的部门记录时,会引起子表员工表(t_employee

    87320
    领券