** 举例 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。...游标 # 4.1 什么是游标(或光标) 虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录...函数的功能可以实现累加薪资最高的几个员工的薪资值,直到薪资总和达到 limit_total_salary 参数的值,返回累加的人数给 total_count。
举例 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。...游标 4. 1 什么是游标(或光标) 虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录、...函数的功能可以实现累加薪资最高的几个员工的薪资值,直到薪资总和达到limit_total_salary参数的值,返回累加的人数给total_count。
示例 假设在MySQL中执行一个插入操作时发生了重复键错误,那么可能会返回以下错误信息: 使用 MYSQL_error_code 表示:ERROR 1062 (23000): Duplicate entry...在这里,1062 是 MYSQL_error_code,表示重复键错误;23000 是对应的 sqlstate_value。...在这里,23000 是 sqlstate_value,表示完整性约束错误(即重复键错误);1062 是对应的MySQL错误代码。...1216:外键约束检查失败,更新子表记录失败。 1217:外键约束检查失败,删除或修改主表记录失败。...示例 定义一个 CONTINUE 处理程序,当发生 SQLSTATE ‘23000’(表示约束违反)时,输出一条消息: DECLARE CONTINUE HANDLER FOR SQLSTATE '23000
SQLSTATE:针对特定SQLSTATE类(如'23000',表示完整性约束违规)的处理程序优先级次之。 SQLEXCEPTION:最通用的处理程序,用于捕获所有SQL异常,优先级最低。...'23000'(完整性约束违规) DECLARE EXIT HANDLER FOR SQLSTATE '23000' BEGIN SELECT 'SQLSTATE...SQLSTATE '23000':是一个通用的SQLSTATE值,用于表示完整性约束违规,包括重复键错误。...(如违反唯一约束) DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @processed = 100; -- 内部块开始 BEGIN...的异常处理 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' BEGIN -- 处理完整性约束违规 END; -- 命名条件的错误处理 DECLARE
在提交注册信息的时候报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'username...' 原因:主键冲突 违反完整性约束 字段唯一索引 从上图可以看出,用户名和邮箱必须唯一,如果填入重复的用户名或者邮箱就会出错 解决方法:在控制器里面进行判断 data=input(′post.′);data
在提交注册信息的时候报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘admin’ for key ‘username...’ 原因:主键冲突 违反完整性约束 字段唯一索引 从上图可以看出,用户名和邮箱必须唯一,如果填入重复的用户名或者邮箱就会出错 解决方法:在控制器里面进行判断 $data = input('post.
为了避免冲突,首先用"DELIMITER &&"将MySQL的结束符设置为&&。最后再用"DELIMITER ;"来将结束符恢复成分号。这与创建触发器时是一样的。... [characteristic ...] routine_body 其中,sp_name参数是存储函数的名称;func_parameter表示存储函数的参数列表;RETURNS type指定返回值的类型... ); END 上述代码中,存储函数的名称为name_from_employee;该函数的参数为emp_id;返回值是VARCHAR类型。...SELECT语句从employee表查询num值等于emp_id的记录,并将该记录的name字段的值返回。...SQLWARNING表示所有以01开头的sqlstate_value值。NOT FOUND表示所有以02开头的sqlstate_value值。
为了避免冲突,首先用"DELIMITER &&"将MySQL的结束符设置为&&。最后再用"DELIMITER ;"来将结束符恢复成分号。这与创建触发器时是一样的。...type [characteristic ...] routine_body 其中,sp_name参数是存储函数的名称;func_parameter表示存储函数的参数列表;RETURNS type指定返回值的类型...); END 上述代码中,存储函数的名称为name_from_employee;该函数的参数为emp_id;返回值是VARCHAR类型。...SELECT语句从employee表查询num值等于emp_id的记录,并将该记录的name字段的值返回。...SQLWARNING表示所有以01开头的sqlstate_value值。NOT FOUND表示所有以02开头的sqlstate_value值。
->WHEREd_id=emp_id; 8....为了避免冲突,首先用"DELIMITER &&"将MySQL的结束符设置为&&。最后再用"DELIMITER ;"来将结束符恢复成分号。这与创建触发器时是一样的。...); 7.END 上述代码中,存储函数的名称为name_from_employee;该函数的参数为emp_id;返回值是VARCHAR类型。...SELECT语句从employee表查询num值等于emp_id的记录,并将该记录的name字段的值返回。...->WHEREnum=emp_id); 8.
· 错误:1216 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW) 消息:无法添加或更新子行,外键约束失败。...· 错误:1217 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED) 消息:无法删除或更新父行,外键约束失败。...· 错误:1223 SQLSTATE: HY000 (ER_CANT_UPDATE_WITH_READLOCK) 消息:由于存在冲突的读锁定,无法执行查询。...· 错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,外键约束失败(%s)。...· 错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,外键约束失败(%s)。
错误:1242 SQLSTATE: 21000 (ER_SUBQUERY_NO_1_ROW) 消息:子查询返回1行以上。...冲突声明:’%s%s’和’%s%s’ 错误:1303 SQLSTATE: 2F003 (ER_SP_NO_RECURSIVE_CREATE) 消息:不能从另一个存储子程序中创建%s。...错误:1415 SQLSTATE: 0A000 (ER_SP_NO_RETSET) 消息:不允许从%s返回结果集。...错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,外键约束失败(%s)。...错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,外键约束失败(%s)。
首先与存储过程一样,只能返回一条结果记录。另外就是存储函数只能指明一列数据作为结果,而存储过程能够指明多列数据作为结果。...因为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
类代码 23 约束违例 表 18. 类代码 23:约束违例 SQLSTATE 值 含义23001 RESTRICT 更新或删除规则防止父键被更新或删除。...类代码 38:外部函数异常 SQLSTATE 值 含义38XXX 外部例程或触发器返回有效错误 SQLSTATE。38001 不允许外部例程执行 SQL 语句。...类代码 39:外部函数调用异常 SQLSTATE 值 含义39001 用户定义的函数已返回无效 SQLSTATE。39004 不允许 IN 或 INOUT 参数为空值。...类代码 40:事务回滚 SQLSTATE 值 含义40001 发生了伴随自动回滚的超时或死锁。40003 语句完整性未知。40504 由于系统错误导致工作单元被回滚。...类代码 40:事务回滚 SQLSTATE 值 含义 40001 发生了伴随自动回滚的超时或死锁。 40003 语句完整性未知。 40504 由于系统错误导致工作单元被回滚。
1 MySQL约束 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。...为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。...从以下表格四个方面考虑: 实体完整性(Entity Integrity) 例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity) 例如:年龄范围0-120,性别范围...如果删除主键约束了,主键约束对应的索引就自动删除了。 需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。...如果删除主键约束了,主键约束对应的索引就自动删除了。 需要注意的一点是,不要修改主键字段的值。 因为主键是数据记录的唯一标识, 如果修改了主键的值,就有可能会破坏数据的完整性。
…… 而 “表约束” 正是解决这些问题的 “规则利器”,它能从设计层面强制保证数据的准确性、一致性和完整性,是数据库稳定运行的 “安全防线”。...约束的最终目标:保证数据的完整性和可预期性 所以需要更多的约束条件!!!...default和NOT NULL不冲突,而是互相补充的。 NOT NULL:当用户想要插入的时候,为NULL和合法数据。...我们从 “为什么需要约束” 的概念引入,逐步掌握了空属性对字段必填性的控制、默认值对插入效率的提升、列描述对表结构的说明,也深入理解了 zerofill 的格式化作用,以及主键、自增长、唯一键、外键在保障数据完整性中的关键价值...如果你在约束使用中遇到特殊场景(比如外键冲突如何处理、自增长断号如何修复),或者对某类约束的用法有疑问,欢迎在评论区交流。
表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术收到逼迫程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。...约束的最终目标:保证数据的完整性和可预期性所以需要更多的约束。...> insert into t14 (name,age) values ('张三',20); Query OK, 1 row affected (0.00 sec) default和NOT NULL不冲突...Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0 对b列添加了zerofill属性,再进行查找,返回如下结果...我们选择某一列作为主键,但是并不排除其他属性不需要维护,可能需要用到唯一键来限定,选择其他列作为唯一键,与主键配合起来,能够保证一些数据冲突。
表的约束 1. 约束概念 真正约束字段的是数据类型,但数据类型约束很单一,需要一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。...表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。就好比我们在vs上编译代码时,vs会对我们进行各种约束,保证我们的代码在语法上是正确的。...约束本质是通过技术手段倒逼程序员插入正确的数据。反过来,站在mysql的视角,插入进来的数据,都是符合数据约束的。 约束的最终目标:保证数据的完整性和可预期性。 2....这就是约束。...default和not null不冲突,而是互相补充的。 null和not null是作用在用户想插的时候。
✨一、数据库的约束 1.什么是数据库约束? 数据库约束是关系型数据库的一个重要功能,用于确保数据的完整性、一致性和准确性(数据本身是否正确、关联关系是否正确)。数据库约束一般指定在列。...二、数据库约束的分类 1.非空约束(NOT NULL) 1.定义 定义:指定表中的某列不能存储NULL值。例如:在“学生信息表”中,指定学生的姓名不能为空,确保学生基本信息的完整性。...外键约束能够保证引用的完整性,即一个表的外键值必须存在于另一个表的主键列中。...student2(name,course_id) values('赵六',null); Query OK, 1 row affected (0.09 sec) 外键列的性质与被引用表中的主键列的性质并无冲突...例如:当外键列允许插入null值,与被引用表中得主键列的性质并不冲突。 如果要删除主表中的记录,要先查看子表中是否对该条记录有依赖,如果有依赖,需要先删除子表中的元素,否则发生报错现象。
函数可以从语句外调用,能返回标量值。...存储过程 3、执行Proc() 存储过程 ❝注意:“DELIMITER //”语句的作用是将MySQL的结束符设置为//,因为MySQL默认的语句结束符为分号;,为了避免与存储过程」 中SQL语句结束符相冲突...例如,如果一个函数返回一个SET或ENUM值,但是RETURN语句返回一个整数,对于SET成员集的相应ENUM成员,从函数返回的值 是字符串。...如果DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;,这一行不存在 第二个INSERT因PRIMARY KEY约束而失败之后,MySQL可能已经采取...然后,将结果返回给输出值。
SQLite 约束:约束是在表的数据列上强制执行的规则 约束可以是列级或表级。...列级约束仅适用于列,表级约束被应用到整个表 (1)以下是在 SQLite 中常用的约束 NOT NULL 约束:确保某列不能有 NULL 值。...:(不知道这样算不算正确,我也不是理解的太深刻) 交叉连接后结果非常多,慎用 左外连接会填充NULL,内连接不会 4, SQLite Unions子句:用于合并两个或多个 SELECT 语句的结果,不返回任何重复的行...基本语法如下: CREATE INDEX index_name ON table_name (column_name); 唯一索引:使用唯一索引不仅是为了性能,同时也为了数据的完整性。...索引自动创建为主键约束和唯一约束。