首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySql数据库约束

InnoDB存储引擎,用户可以通过定义Primary KeyUnique Key约束来保证实体完整性,用户还可以编写一个触发器来保证数据完整性、 (2)域完整性保证数据每列满足特定条件。...对错误数据约束   某些默认设置下,MySql数据库允许非法不正确数据插入更新,又或者可以在数据库内部将其转化为一个合法,如向not null字段插入一个null,MySql数据库会将其更改为...,此外如果before触发器语句本身失败,MySql将不执行after触发器如果有的话) 3.1.2 触发器删除   DROP TRIGGER trigger_name; 注:触发器不能更新覆盖...和update操作时,相应子表数据被更新NULL,但是子表对应列必须允许为NULL (3)NO ACTION   表示发生deleteupdate操作时,抛出错误,不允许这类操作发生...(4)RESTRICT   表示发生deleteupdate操作时,抛出错误,不允许这类操作发生,如果定义外键时没有指定on deleteon update,RESTRICT就是默认外键设置

1.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

软考系统架构设计师(二):数据库设计

图表:由基其他视图表导出,本身不独立存储,数据库只存放它定义,常称为虚。 数据库模式 数据库视图:它一个虚拟(逻辑上),其内容由查询定义(仅保存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).

76410

配置 | 全方位认识 sys 系统库

如果自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语句更新该配置选项

1.4K30

【MySQL】MySQL知识总结

具体设置外键约束时,设置外键约束字段必须依赖于数据库已经存在主键,同时外键可以为空(NULL)。...---- 并且,外键是可以为空不为空一定要受主键约束。(一定要有主键,否则不能为子类创建外键。)...输出结果: key: 实际使用索引。如果NULL,则没有使用索引。 possible_keys:显示可能应用在这张索引,一个多个。...---- 查询时慎用NULL 具体使用关键字IN时,查询集合如果存在NULLNULL对应数据查不出来,其它字段对应数据可以正常查询出来; 但如果使用关键字NOT IN,查询集合如果存在...插入时,如果自动增长列不输入,那么插入为自动增长后如果输入为0空(NULL),那么插入也为自动增长后如果插入某个确定,且该在前面没有出现过,那么可以直接插入。

7.1K52

SQL优化意义是什么?你用过哪些优化方式

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 。

1.3K20

3. SQL 与 MySQL 基础

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 操作时

1.8K20

mysql数据库优化大全

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 。

1.1K20

MySQL触发器

当对数据数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来 实现。...为了解决这个问题,我们就可以使用触发器,规定每当进货单明细有数据插入、修改和删除操作 时,自动触发 2 步操作: 1)重新计算进货单明细数量合计和金额合计; 2)用第一步中计算出来更新进货单头合计数量与合计金额...如果触发器操作出了问题,会导致会员储金额更新失败。我用下面的代码演示一下  结果显示,系统提示错误,字段“aa”不存在。 这是因为,触发器数据插入操作多了一个字段,系统提示错误。...注意点 注意,如果在子表定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改被引用键值删除被引用记录行时,也会引起子表修改和删除操作...“ONDELETE SET NULL”子句,那么如果此时删除部门(t_department)子表员工(t_employee)

3.1K20

52 条 SQL 语句性能优化策略

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

61860

MySQL从删库到跑路_高级(一)——数据完整性

D、自定义完整性:用户自己定义业务规则,比如使用触发器实现自定义业务规则。 ? 2、数据完整性实现方式 ? MySQL不支持Check约束,虽然可以列上添加check约束,但不起作用。...not NULL; 删除自增列,仍然时主键,但是没有自增长功能 4、复合主键 使用两列多列创建主键。...NULL; 2、创建非空约束 非空约束用于确保当前列不为,非空约束只能出现在对象列上。...如果外键约束指定了参照动作,主表记录做修改,删除,从引用列会做相应修改,不修改,拒绝修改设置为默认。 引用列名必须是主键,且删除引用时必须删除引用关系或者删除当前。...级联动作设置为NO ACTION,如果子表中有匹配记录,则不允许对对应候选键进行update/delete操作。

1.9K20

Mysql性能优化一:SQL语句性能优化

2,应尽量避免 where 子句中对字段进行 null 判断,创建NULL是默认,但大多数时候应该使用NOT NULL,或者使用一个特殊,如0,-1作为默 认。...,用批量插入批量更新,绝不会一条条记录更新!...38,最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源过程;如果能够使用约束实现,尽量不要使用触发器;不要为不同触发事件(Insert,Update和Delete)使用相同触发器...45,在所有的存储过程和触发器开始处设置 SET NOCOUNT ON ,结束时设置 SET NOCOUNT OFF 。 ...同样如果可以的话,  我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。  应该尽量把字段设置为NOT NULL,这样将来执行查询时候,数据库不用去比较NULL

1.9K20

52 条 SQL 语句性能优化策略,建议收藏!

2 应尽量避免 where 子句中对字段进行 null 判断,创建NULL是默认,但大多数时候应该使用NOT NULL,或者使用一个特殊,如0,-1作为默 认。...,用批量插入批量更新,绝不会一条条记录更新!...38 最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源过程;如果能够使用约束实现,尽量不要使用触发器;不要为不同触发事件(Insert,Update和Delete)使用相同触发器...45 在所有的存储过程和触发器开始处设置 SET NOCOUNT ON ,结束时设置 SET NOCOUNT OFF 。...同样如果可以的话, 我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 应该尽量把字段设置为NOT NULL,这样将来执行查询时候,数据库不用去比较NULL

90300

实用排坑帖:SQL语句性能优化操作策略大全

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

81921

SQL优化

应尽量避免 where 子句中对字段进行 null 判断,创建NULL是默认,但大多数时候应该使用NOT NULL,或者使用一个特殊,如0,-1作为默 认。...,用批量插入批量更新,绝不会一条条记录更新!...最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源过程;如果能够使用约束实现,尽量不要使用触发器;不要为不同触发事件(Insert,Update和Delete)使用相同触发器...在所有的存储过程和触发器开始处设置 SET NOCOUNT ON ,结束时设置 SET NOCOUNT OFF 。...同样如果可以的话, 我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 应该尽量把字段设置为NOT NULL,这样将来执行查询时候,数据库不用去比较NULL

67620

后端程序员必备:SQL高性能优化方案!50条优化,建议马上收藏!

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

97701

52条SQL语句性能优化

2,应尽量避免 where 子句中对字段进行 null 判断,创建NULL是默认,但大多数时候应该使用NOT NULL,或者使用一个特殊,如0,-1作为默 认。...,用批量插入批量更新,绝不会一条条记录更新!...38,最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源过程;如果能够使用约束实现,尽量不要使用触发器;不要为不同触发事件(Insert,Update和Delete)使用相同触发器...45,在所有的存储过程和触发器开始处设置 SET NOCOUNT ON ,结束时设置 SET NOCOUNT OFF 。...同样如果可以的话, 我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 应该尽量把字段设置为NOT NULL,这样将来执行查询时候,数据库不用去比较NULL

77410

Mysql基础

< 大于等于 BETWEEN 两个之间 IS NULLNULL 应该注意到,NULL 与 0、空字符串都不同。 AND 和 OR 用于连接多个过滤条件。...如果指定了 DELAY_KEY_WRITE 选项,每次修改执行完成时,不会立即将修改索引数据写入磁盘,而是会写到内存键缓冲区,只有清理键缓冲区或者关闭时候才会将对应索引块写入磁盘。...当线程A要更新数据时,在读取数据同时也会读取version提交更新时,若刚才读取到version为当前数据库version相等时才更新,否则重试更新操作,直到更新成功。...2 触发器作用(触发器是一特殊存储过程,主要是通过事件来触发而被执行。) SQL触发器是存储在数据库目录一组SQL语句。...每当与表相关联事件发生时,即会执行触发SQL触发器,例如插入,更新删除。 QL触发器是一种特殊类型存储过程。 这是特别的,因为它不像直接像存储过程那样调用。

1.8K00

第17章_触发器

当对数据数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。 # 2....为了解决这个问题,我们就可以使用触发器,规定每当进货单明细有数据插入、修改和删除操作时,自动触发 2 步操作: 1)重新计算进货单明细数量合计和金额合计; 2)用第一步中计算出来更新进货单头合计数量与合计金额...比如,创建触发器用于修改会员储操作。如果触发器操作出了问题,会导致会员储金额更新失败。...# 4.3 注意点 注意,如果在子表定义了外键约束,并且外键指定了 ON UPDATE/DELETE CASCADE/SET NULL 子句,此时修改被引用键值删除被引用记录行时,也会引起子表修改和删除操作...并且该外键加了 “ON DELETE SET NULL” 子句,那么如果此时删除部门(t_department)子表员工(t_employee)有匹配记录部门记录时,会引起子表员工(t_employee

17720
领券