在这里,23000 是 sqlstate_value,表示完整性约束错误(即重复键错误);1062 是对应的MySQL错误代码。...1050:数据表已存在。 1051:数据表不存在。 1054:字段不存在。 1062:字段值重复,入库失败。 1130:连接数据库失败,没有连接数据库的权限。 1142:当前用户无权访问数据表。...1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库。 1216:外键约束检查失败,更新子表记录失败。...; 这里,处理程序被设置为在SQLSTATE值为’42S02’(表示表或视图不存在)时触发。...示例 定义一个 CONTINUE 处理程序,当发生 SQLSTATE ‘23000’(表示约束违反)时,输出一条消息: DECLARE CONTINUE HANDLER FOR SQLSTATE '23000
condition_value:触发条件的具体错误代码或SQLSTATE值。 示例 假设你有一个存储过程,需要在尝试访问一个不存在的表时进行处理。...错误代码:针对具体错误代码(如1062)的处理程序优先级最高。 SQLSTATE:针对特定SQLSTATE类(如'23000',表示完整性约束违规)的处理程序优先级次之。...'23000'(完整性约束违规) DECLARE EXIT HANDLER FOR SQLSTATE '23000' BEGIN SELECT 'SQLSTATE...SQLSTATE '23000':是一个通用的SQLSTATE值,用于表示完整性约束违规,包括重复键错误。...FOR SQLSTATE '23000' BEGIN -- 处理完整性约束违规 END; -- 命名条件的错误处理 DECLARE specific_error CONDITION FOR
在提交注册信息的时候报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'username...' 原因:主键冲突 违反完整性约束 字段唯一索引 从上图可以看出,用户名和邮箱必须唯一,如果填入重复的用户名或者邮箱就会出错 解决方法:在控制器里面进行判断 data=input(′post.′);data...data\['email'\]\]); if(sizeof(uniqueemail)){ $this->error('该邮箱已经注册,请重新填写~~~'); } 添加上面代码之后,如果填写了重复的用户名或者密码就会给用户相关提示...~~~ 对了,上面的代码是在TP5上写的。
· 错误:1052 SQLSTATE: 23000 (ER_NON_UNIQ_ERROR) 消息:%s中的列'%s'不明确。...· 错误:1216 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW) 消息:无法添加或更新子行,外键约束失败。...· 错误:1217 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED) 消息:无法删除或更新父行,外键约束失败。...· 错误:1430 SQLSTATE: HY000 (ER_QUERY_ON_FOREIGN_DATA_SOURCE) 消息:处理作用在外部数据源上的查询时出现问题。...· 错误:1493 SQLSTATE: HY000 (ER_DROP_PARTITION_WHEN_FK_DEFINED) 消息:在表上定义了外键约束时,不能舍弃分区。
在提交注册信息的时候报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘admin’ for key ‘username...’ 原因:主键冲突 违反完整性约束 字段唯一索引 从上图可以看出,用户名和邮箱必须唯一,如果填入重复的用户名或者邮箱就会出错 解决方法:在控制器里面进行判断 $data = input('post....email'=>$data['email']]); if(sizeof($uniqueemail)){ $this->error('该邮箱已经注册,请重新填写~~~'); } 添加上面代码之后,如果填写了重复的用户名或者密码就会给用户相关提示...~~~ 对了,上面的代码是在TP5上写的。
1177:打开数据表失败 1180:提交事务失败 1181:回滚事务失败 1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库 1205:加锁超时...”,否则,如果发生未预料的从服务器mysqld重启,间出现问题。...错误:1430 SQLSTATE: HY000 (ER_QUERY_ON_FOREIGN_DATA_SOURCE) 消息:处理作用在外部数据源上的查询时出现问题。...错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,外键约束失败(%s)。...错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,外键约束失败(%s)。
23510 使用由 RLST 表强加的命令时发生约束违例。23511 不能删除父行,因为检查约束限制该删除。23512 不能添加检查约束,因为该表含有不满足约束定义的行。...类代码 2E 无效连接名称 表 25. 类代码 2E:无效连接名称 SQLSTATE 值 含义2E000 连接名称无效。 类代码 34 无效的游标名称 表 26....类代码 40 事务回滚 表 31. 类代码 40:事务回滚 SQLSTATE 值 含义40001 发生了伴随自动回滚的超时或死锁。40003 语句完整性未知。...类代码 40 事务回滚 表 31. 类代码 40:事务回滚 SQLSTATE 值 含义 40001 发生了伴随自动回滚的超时或死锁。 40003 语句完整性未知。...428A8 在父表或底层的表处于设置完整性暂挂状态时,不能对派生表使用 SET INTEGRITY 语句复位设置完整性暂挂状态。 428A9 节点范围无效。
它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。...从以下表格四个方面考虑: 实体完整性(Entity Integrity) 例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity) 例如:年龄范围0-120,性别范围...1.2 什么是约束 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。...如果删除主键约束了,主键约束对应的索引就自动删除了。 需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。...+1,这种特性可能在某些情况下会导致主键冲突或者其他难以发现的问题。
key)+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。...FOREIGN KEY 约束 # 6.1 作用 限定某个表的某个字段的引用完整性。 比如:员工表的员工所在部门的选择,必须在部门表能找到对应的部分。...(3)创建 (CREATE) 表时就指定外键约束的话,先创建主表,再创建从表 (4)删表时,先删从表(或先删除外键约束),再删除主表 (5)当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据...答:不是的 问题 2:建和不建外键约束有什么区别? 答:建外键约束,你的操作(创建表、删除表、添加、修改、删除)会受到限制,从语法层面受到限制。...MySQL 支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:外键约束是用来保证数据的参照完整性的,如果表之间需要关联外键,却指定了不同的存储引擎,那么这些表之间是不能创建外键约束的
MySQL数据库,从入门到精通:第十三篇——MySQL数据表约束详解 前言 在MySQL数据库中,约束是一种对数据表中数据进行限制和检查的方法,可以保证数据表中数据的完整性和一致性。...最后,本文结合实际面试问题,提供约束使用和使用注意事项,帮助读者更好地掌握MySQL中约束的使用方法,提高数据表设计和维护的效率。...通过本文的学习,读者可以更好地了解MySQL中数据表约束的相关知识和技巧,合理使用约束来保证数据表的完整性和一致性。 第 13 篇_约束 1....+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。...( 3 )创建(CREATE)表时就指定外键约束的话,先创建主表,再创建从表 ( 4 )删表时,先删从表(或先删除外键约束),再删除主表 ( 5 )当主表的记录被从表参照时,主表的记录将不允许删除,
表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术收到逼迫程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。...约束的最终目标:保证数据的完整性和可预期性所以需要更多的约束。...,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。...此时,在实际使用的时候,可能会出现什么问题? 有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中?...因为此时两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。 解决方案就是通过外键完成的。
最小化显式锁的使用,利用串行化事务自身的保护机制。 特殊情况处理 在串行化事务中,即使预先检查了唯一性约束,仍有可能发生冲突,尤其是在并发插入相同数据时。...尽管也可以通过存储在表中的标志实现类似目的,但咨询锁更快,避免了表膨胀问题,并且服务器会在会话结束时自动清理这些锁,无需应用层干预。...尽管可重复读(Repeatable Read)事务在整个执行过程中拥有稳定的数据视图,但使用MVCC快照进行数据一致性检查时存在读/写冲突的微妙问题,可能导致事务执行顺序的循环,影响完整性检查。...在某些情况下,重试唯一键失败(SQLSTATE代码23505,unique_violation)和排除约束失败(SQLSTATE代码23P01,exclusion_violation)也是合适的。...还有一些特殊情况,即使理论上服务器有足够的信息判断序列化问题是根本原因,它仍会发出唯一键或排除约束错误。
如下图: 全局系统变量针对于所有会话(连接)有效,但 不能跨重启 会话系统变量仅针对于当前会话(连接)有效。会话期间,当前会话对某个会话系统变量值的修改,不会影响其他会话同一个会话系统变量的值。...定义条件与处理程序 定义条件 是事先定义程序执行过程中可能遇到的问题, 处理程序 定义了在遇到问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时能继续执行。...** 举例 1:** 定义 “Field_Not_Be_NULL” 错误名与 MySQL 中违反非空约束的错误类型是 “ERROR 1048 (23000)” 对应。...CONDITION FOR SQLSTATE '23000'; ** 举例 2:** 定义 "ERROR 1148 (42000)" 错误,名称为 command_not_allowed。...在存储过程中,定义处理程序,捕获 sqlstate_value 值,当遇到 sqlstate_value 值为 23000 时,执行 EXIT 操作,并且将 @proc_value 的值设置为 - 1。
一、表的约束 在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。...username varchar(255) ); 外键约束:foreign key 外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键 字段,那么该字段的值必须来源于参照的表的主键...建立学生和班级表之间的连接 t_student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表。t_class表叫做父表。...(在创建表时)指定的存储引擎来处理。...读已提交存在的问题是:不可重复读。 第三级别:可重复读(repeatable read) 这种隔离级别解决了:不可重复读问题。 这种隔离级别存在的问题是:读取到的数据是幻象。
菜单名称和描述 ---- 默认生成的 CRUD 当一键生成 CRUD 时, fastadmin 会自动创建表的控制器, 并将表注释作为控制器类的文档注释存放在文件中 php think crud -t ...TAB 过滤选项卡 ---- 在一键生成 CRUD 时,表中如果存在 status 字段且为 enum 类型,则会生成相应的 TAB 过滤选项卡 php think crud -t test 如果需要生成其它字段的过滤选项卡...快速搜索 ---- 快速搜索查询条件: where 字段 like '%关键词%' 快速搜索在键入关键词时将实时从服务端搜索数据,当数据表数据较大时,建议关闭此功能(在表格初始化时关闭) 默认只会搜索主键...id 查询会报错 // 关联查询with(["admin"])// 快速搜索报错SQLSTATE[23000]: Integrity constraint violation: 1052 Column...: showColumns: false 导出按钮默认将导出整个表的所有行,关闭导出功能使用: showExport: false 通用搜索指表格上方的搜索,关闭此功能使用: commonSearch:
10.1.4 定义条件与定义处理程序 定义条件CONDITION定义的是:在执行存储过程中的SQL语句的时候,可能出现的问题。...因为id属性有主键约束,所以不能插入相同的id。...'23000'; -- 主键约束的错误值 DECLARE CONTINUE HANDLER FOR primary_key_limit SET @info = -1; -- 设计如果出现错误...'23000'; -- 主键约束的错误值 DECLARE EXIT HANDLER FOR primary_key_limit SET @info = -1; -- 使用EXIT策略,遇到SQL...'23000'; -- 主键约束的错误值 DECLARE EXIT HANDLER FOR primary_key_limit SET @info = -1; -- 设计如果出现错误,@info
,也是在连接断开时失效。...在连接建立完成后,MySQL会将自己全局变量值复制一份成为当前连接的会话变量。...begin…end 一个连接内有效,当连接断开时,变量失效 一个连接内有效,当连接断开时,变量失效 服务器重启时恢复默认值 查看所有变量 / / show session variables; show...,就是一张表,重复插入,导致主键冲突的condition,这边handler的处理是继续执行。...感觉有点用不到,暂时先不做记录了 四、最后 存储过程以前就在用,但也是和平常懒人一下,用到的时候导出翻博客,没有记录自己的笔记。 这很不好,正好趁这次把存储过程过了一遍,问题不大。
定义条件与处理程序 定义条件是事先定义程序执行过程中可能遇到的问题,处理程序定义了在遇到问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时能继续执行。...举例 1 : 定义“Field_Not_Be_NULL”错误名与MySQL中违反非空约束的错误类型是“ERROR 1048 (23000)”对应。...CONDITION FOR SQLSTATE '23000'; 举例 2 : 定义"ERROR 1148(42000)"错误,名称为command_not_allowed。...在存储过程中,定义处理程序,捕获sqlstate_value值,当遇到sqlstate_value值为 23000 时,执行EXIT操作,并且将@proc_value的值设置为-1。...“employees”表的最高薪资。
答:MySQL支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:外键约束是用来保证数据的参照完整性的,如果表之间需要关联外键,却指定了不同的存储引擎,那么这些表之间是不能创建外键约束的...问题1:如果两个表之间有关系(一对一、一对多),比如:员工表和部门表(一对多),它们之间是否一定要建外键约束? 答:不是的 问题2:建和不建外键约束有什么区别?...为了避免与存储过程中SQL语句结束符相冲突,需要使用 DELIMITER改变存储过程的结束符。...在存储过程中,定义处理程序,捕获sqlstate_value值,当遇到sqlstate_value值为23000时,执行EXIT操 作,并且将@proc_value的值设置为-1。...'23000' ; # 捕获sqlstate_value值,当遇到sqlstate_value值为23000时,执行EXIT操作,并且将@proc_value的值设置为-1 DECLARE EXIT
确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录 FOREIGN KEY: 保证一个表中的数据匹配另一个表中的值的参照完整性 看不懂???...添加时进行约束: mysql> insert into test99 values(1,'孙悟空'),(null,'唐三藏'); ERROR 1048 (23000): Column 'id' cannot...sec) 4.1添加数据约束 这里在第二次添加数据时,会进行约束 mysql> insert into student values(1,'孙悟空'),(1,'猪八戒'); ERROR 1062 (23000...; 这里的自主分配是不能够定义约束在varchar类型的数据上; ️6.FOREIGN KEY的使用 这里的约束即为外键,可以用来建立两个表之间的联系; SQL执行语句: create table 表名...,插入和修改会被父类约束,但是其他的列,可以随意修改和插入; 3.在删除时,由于父类时子类表的参考,所以无法先删除父表,得先删除子类的表后,然后再次删除父类这个表。 ️
领取专属 10元无门槛券
手把手带您无忧上云