,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。...学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表(子表)中也更新,主键表(父表)中的记录被删除,外键表(子表)中改行也相应删除。...如果没有使用`on delete/update cascade`,不能删除或更新父表数据,当删除父表的数据时候报错!...而on update只能删除子表外键数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效。...如果没有使用on delete/update cascade,不能删除或更新父表数据。
视图表:由基表或其他视图表导出的表,本身不独立存储,数据库只存放它的定义,常称为虚表。 数据库模式 数据库视图:它一个虚拟表(逻辑上的表),其内容由查询定义(仅保存SQL查询语句)。...同时当原始表中的数据更新时,物化视图也会更新。 分布式数据库 数据独立性。除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明性)。 集中与自治共享结合的控制结构。...全局控制分散的DDBMS 全局控制部分分散的DDBMS 分布透明性 分片透明:是指用户不必关心数据是如何分片的,它们对数据的操作在全局关系上进行,即如何分片对用户是透明的。...规范化理论-基本概念 设R(U,F)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称...简单属性和复合属性、单值属性和多值属性、NULL属性、派生属性 第二范式 第二范式(2NF) :当且仅当实体E是第一范式_(1NF).
在InnoDB存储引擎中,用户可以通过定义Primary Key或Unique Key约束来保证实体的完整性,用户还可以编写一个触发器来保证数据完整性、 (2)域完整性保证数据每列的值满足特定的条件。...对错误数据的约束 在某些默认设置下,MySql数据库允许非法或不正确的数据的插入或更新,又或者可以在数据库内部将其转化为一个合法的值,如向not null的字段插入一个null值,MySql数据库会将其更改为...,此外如果before触发器或语句本身失败,MySql将不执行after触发器(如果有的话) 3.1.2 触发器的删除 DROP TRIGGER trigger_name; 注:触发器不能更新或覆盖...和update操作时,相应的子表中的数据被更新为NULL值,但是子表中对应的列必须允许为NULL值 (3)NO ACTION 表示父表发生delete或update操作时,抛出错误,不允许这类操作发生...(4)RESTRICT 表示父表发生delete或update操作时,抛出错误,不允许这类操作发生,如果定义外键时没有指定on delete或on update,RESTRICT就是默认的外键设置
如果自server安装sys 系统库以来,该行配置从未被更改过,则该列值为NULL 为了减少对sys_config表直接读取的次数,sys 系统库中的视图、存储过程在需要使用到这些配置选项时,会优先检查这些配置选项对应的用户自定义配置选项变量...否则,该sys 系统库函数和存储过程将使用sys_config表中的配置选项值(从表中读取配置选项值之后,会将sys_config表中的配置选项时同时更新到用户自定义配置选项变量中,以便在同一会话后续对该值的引用时使用变量值...,然后再更新了sys_config表中相同名称的配置选项,则对于当前会话,sys_config表中的配置选项值不生效(除非设置自定义配置选项变量值为NULL),只对于新的会话且不存在自定义配置选项变量或者自定义配置选项值为...例如:如果存在debug配置选项且不为null值,则diagnostics()和execute_prepared_stmt()存储过程调用时会执行检查并做相应的判断,但默认情况下,此选项在sys_config...表中 mysql> INSERT INTO sys_config (variable, value) VALUES('debug', 'ON'); # 要更改表中的调试配置选项值,可以使用update语句更新该配置选项值
在绑定连接会话中truncate父表 10095 ER_NO_SUCH_AUTH_ALGO...10102 ER_NO_PRIMARY_OR_UNIQUE_KEY 表中不存在主键或唯一键...10104 ER_NO_ROUTE_TO_NULL 未配置NULL值路由...自动修改分片规则中表未定义 10132 ER_RESHARD_PARENT_TABLE_UNSUPPORT 自动修改分片规则中不支持父表...ER_RESHARD_EXIST_TRIGGER_OR_FOREIGN_KEY 自动修改分片规则中检测到触发器或外键 10136 ER_NOT_SHARD_TABLE
在具体设置外键约束时,设置外键约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为空(NULL)。...---- 并且,外键是可以为空的,不为空一定要受父类表主键的约束。(父类表一定要有主键,否则不能为子类表创建外键。)...输出结果: key: 实际使用的索引。如果为NULL,则没有使用索引。 possible_keys:显示可能应用在这张表中的索引,一个或多个。...---- 查询时慎用NULL 在具体使用关键字IN时,查询的集合中如果存在NULL,NULL对应的数据查不出来,其它字段对应的数据可以正常查询出来; 但如果使用关键字NOT IN,查询的集合中如果存在...在插入值时,如果自动增长列不输入值,那么插入的值为自动增长后的值;如果输入的值为0或空(NULL),那么插入的值也为自动增长后的值;如果插入某个确定的值,且该值在前面没有出现过,那么可以直接插入。
2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。...同样的,如果可以的话, 我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。...2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值...0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!...28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。
或 CASCADE: 默认是 RESTRICT,表示如果此列作为其他表的约束或视图引用到此列时,将无法删除; 而 CASCADE 会强制连带引用此列的约束、视图一起删除。...(一条记录): INSERT INTO 表名 VALUES(值1, 值2, 值3) 如果插入的数据与列一一对应,那么可以省略列名,但是如果希望向指定列上插入数据,就需要给出列名: INSERT INTO...LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录,即返回两个表满足条件的交集部分,也会返回左边表中的全部数据,而在右表中缺失的数据会使用 NULL 来代替。...RIGHT JOIN(右连接):与 LEFT JOIN 相反,即返回两个表满足条件的交集部分,也会返回右边边表中的全部数据,而在左表中缺失的数据会使用 NULL 来代替。...触发器所依附的表称为基本表,当触发器表上发生 SELECT/UPDATE/DELETE 等操作时,会自动生成两个临时的表( NEW 表和 OLD 表,只能由触发器使用) 例如: 在 INSERT 操作时
如果表中已包含数据,不能再添加一个具有NOT NULL约束的列,除非对应列还带有DEFAULT值定义。# 唯一约束唯一约束规定了在指定列或列集中的每个值都是唯一的。...外键的值,要么匹配被引用主键或唯一键的值,要么为空。如果复合外键中存在空值列,该键的非空列不再强制要求匹配父项中的对应列。被引用键被外键所引用的表中的唯一键或主键。...依赖表又称“子表”,外键约束所在的表。被引用表又称“父表”,被子表的外键引用的表。该表中的被引用值决定了在子表中特定的插入或更新是否可被允许。...DELETE SET NULL 删除置空(DELETE SET NULL)是指当父表被删除时,对应被引用键值在子表中的所有行的外键被设置成NULL。...UPDATE SET NULL 更新置空(UPDATE SET NULL)是指当父表更新时,对应被引用键值在子表中的所有行的外键被设置成NULL。
当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来 实现。...为了解决这个问题,我们就可以使用触发器,规定每当进货单明细表有数据插入、修改和删除的操作 时,自动触发 2 步操作: 1)重新计算进货单明细表中的数量合计和金额合计; 2)用第一步中计算出来的值更新进货单头表中的合计数量与合计金额...如果触发器中的操作出了问题,会导致会员储值金额更新失败。我用下面的代码演示一下 结果显示,系统提示错误,字段“aa”不存在。 这是因为,触发器中的数据插入操作多了一个字段,系统提示错误。...注意点 注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...“ONDELETE SET NULL”子句,那么如果此时删除父表部门表(t_department)在子表员工表(t_employee)
D、自定义完整性:用户自己定义的业务规则,比如使用触发器实现自定义业务规则。 ? 2、数据完整性实现方式 ? MySQL不支持Check约束,虽然可以在列上添加check约束,但不起作用。...not NULL; 删除自增列,仍然时主键,但是没有自增长功能 4、复合主键 使用表的两列或多列创建主键。...NULL; 2、创建非空约束 非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。...如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。 引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。...级联动作设置为NO ACTION,如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作。
2 应尽量避免在 where 子句中对字段进行 null 值判断,创建表时 NULL 是默认值,但大多数时候应该使用 NOT NULL,或者使用一个特殊的值,如0,-1 作为默认值。...的效率,因为 insert 或 update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。...,用批量插入或批量更新,绝不会一条条记录的去更新!...45 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。 2....比如,创建触发器用于修改会员储值操作。如果触发器中的操作出了问题,会导致会员储值金额更新失败。...这是因为,触发器中的数据插入操作多了一个字段,系统提示错误。可是,如果你不了解这个触发器,很可能会认为是更新语句本身的问题,或者是会员信息表的结构出了问题。...4.3 注意点 注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...“ONDELETE SET NULL”子句,那么如果此时删除父表部门表(t_department)在子表员工表(t_employee)有匹配记录的部门记录时,会引起子表员工表(t_employee)匹配记录的部门编号
应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。...,用批量插入或批量更新,绝不会一条条记录的去更新!...最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源的过程;如果能够使用约束实现的,尽量不要使用触发器;不要为不同的触发事件(Insert,Update和Delete)使用相同的触发器...在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...同样的,如果可以的话, 我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
2、应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,创建表时 NULL 是默认值,但大多数时候应该使用 NOT NULL,或者使用一个特殊的值,如 0,-1 作为默认值。...因为 INSERT 或 UPDATE 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过 6 个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。...45、在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON,在结束时设置 SET NOCOUNT OFF。...因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如:在定义邮政编码这个字段时,如果将其设置为 CHAR(255),显然给数据库增加了不必要的空间。...同样的,如果可以的话,我们应该使用 MEDIUMINT 而不是 BIGIN 来定义整型字段,应该尽量把字段设置为 NOT NULL,这样在将来执行查询的时候,数据库不用去比较 NULL 值。
这里写图片描述 关键在于匿名投诉的那一部分,我们该怎么写…. ---- 统计:根据年度将相应年度的每个月的投诉数进行统计,并以图表的形式展示在页面中;在页面中可以选择查看当前年度及其前4年的投诉数。...匿名投诉 在需求中,我们已经看到了,如果投诉的人是匿名投诉的,那么我们不能显示该投诉人的名字、部门。他的号码应该设置成1372342类型的。...这里写图片描述 统计图Fusionchart 我们在投诉模块中还有一个功能没有实现: 统计:根据年度将相应年度的每个月的投诉数进行统计,并以图表的形式展示在页面中;在页面中可以选择查看当前年度及其前4年的投诉数...但是还有一个问题,我们在进行分组查询的时候,如果表中是没有1月或2月等数组的话,分组查询出来的数据是没有这些月份的。而我们的统计图是需要所有月份的数据的。...这里写图片描述 ---- 再次回到前面分析的,如果本年度的月份还没有到,那么将该月的数据设置为“”,如果是其他年份的的月份查出的数据为null,那么我们应该把这些月份的投诉数设置为0而不是”“…..
2、应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默认值。...,用批量插入或批量更新,绝不会一条条记录的去更新。...45、在所有的存储过程和触发器的开始处设置SET NOCOUNT ON,在结束时设置SET NOCOUNT OFF。无需在执行存储过程和触发器的每个语句后向客户端发送DONE_IN_PROC消息。...因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如:在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间。...同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。...,用批量插入或批量更新,绝不会一条条记录的去更新!...38,最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源的过程;如果能够使用约束实现的,尽量不要使用触发器;不要为不同的触发事件(Insert,Update和Delete)使用相同的触发器...45,在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...同样的,如果可以的话, 我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
2 应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。...,用批量插入或批量更新,绝不会一条条记录的去更新!...38 最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源的过程;如果能够使用约束实现的,尽量不要使用触发器;不要为不同的触发事件(Insert,Update和Delete)使用相同的触发器...45 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...同样的,如果可以的话, 我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
领取专属 10元无门槛券
手把手带您无忧上云