网站前瞻性 新流量机会内容建设分析,专做美容师招聘网站,建网站的公司 快云,那个网站做拍手比较好约束
MySQL中的约束用于定义表中数据的规则#xff0c;以确保数据的准确性和可靠性。以下是MySQL中常用的一些约束类型及其概述#xff1a;
PRIMARY KEY#xff08;主键#xff09;#xff1a;唯一标识表中每条记录的字段或字段组合#xff0c; 一个表中只能有一个主键…约束
MySQL中的约束用于定义表中数据的规则以确保数据的准确性和可靠性。以下是MySQL中常用的一些约束类型及其概述
PRIMARY KEY主键唯一标识表中每条记录的字段或字段组合 一个表中只能有一个主键。主键字段的值不能为NULL。FOREIGN KEY外键用于建立两个表之间的关系确保引用的数据的完整性外键字段的值必须在它所引用的表中存在或者为NULL取决于外键约束的设置。UNIQUE唯一约束保证列中的所有值都是唯一的即不允许有重复的值NOT NULL非空约束确保列中的值不能为NULL。CHECK检查约束用于限制列中的值必须满足的条件。在MySQL 8.0.16及更高版本中支持DEFAULT默认值当没有为列提供值时将使用默认值。AUTO_INCREMENT自增用于整数类型的列自动为新记录生成一个唯一的数字。
高级sql
MySQL 提供了多种高级功能来处理复杂的数据操作和业务逻辑。以下是你提到的几个关键概念的简要介绍
1.子查询Subquery子查询是嵌套在另一个查询中的 SQL 查询。它可以返回单个值、一行或多行结果。子查询通常用在SELECT、INSERT、UPDATE和DELETE语句中可以用于条件表达式或作为值提供者。
SELECT name, MAX(salary) AS max_salary
FROM employees
WHERE salary (SELECT MAX(salary)FROM salaries
);
首先确定 salaries 表中最高的薪资是多少然后在外层查询中查找 employees 表中薪资等于这个最高值的员工信息。
2. 连接JOIN连接用于结合两个或多个表的行基于相关的列。MySQL 支持多种类型的连接包括内连接、左连接、右连接和全连接FULL JOIN。
SELECT books.title, authors.name
FROM books
INNER JOIN authors ON books.author_id authors.id;
这个查询的结果将是一个包含两列的表 books.title 和 authors.name每一行都对应一个书籍及其作者的名称。
3.事务 Transaction) : 事务用于处理操作量大复杂度高的数据。事务是一组SQL语句的集合它们要么全部成功执行要么全部不执行把一系列的操作放在一个地方然后再决定是否生效。这种特性被称为原子性Atomicity。事务还必须满足一致性Consistency、隔离性Isolation和持久性Durability这三个特性通常合称为ACID特性。
事务的基本操作MySQL通过以下三个主要的SQL语句来管理事务
START TRANSACTION 或 BEGIN标记事务的开始。COMMIT提交事务将事务中的所有更改永久保存到数据库中。ROLLBACK回滚事务撤销自事务开始以来的所有更改使数据库回到事务开始前的状态。
自动提交模式默认情况下MySQL在执行每个SQL语句后会自动提交事务。但是你可以通过设置autocommit变量来控制这个行为
SET autocommitOFF或SET autocommit0关闭自动提交这样就需要显式地使用COMMIT或ROLLBACK来结束事务。SET autocommitON或SET autocommit1开启自动提交每个SQL语句执行后都会自动提交。
事务的使用示例
-- 开始事务
START TRANSACTION;-- 给学生ID为1的学生增加10分
UPDATE student_scores SET score score 10 WHERE student_id 1;-- 检查是否更新成功
IF (SELECT ROW_COUNT()) 0 THEN-- 如果更新成功提交事务COMMIT;-- 查询更新后的结果SELECT * FROM student_scores WHERE student_id 1;
ELSE-- 如果更新失败回滚事务ROLLBACK;-- 查询当前的分数确认没有变化SELECT * FROM student_scores WHERE student_id 1;
END IF;
正确使用事务可以确保数据库操作的原子性和一致性避免数据不一致的问题。
4.存储过程 MySQL存储过程是一组为了完成特定功能的SQL语句集合它被编译并存储在数据库中可被多次调用执行使用存储过程可以提高性能加强可维护性。
1.创建存储过程
DELIMITER改变MySQL的命令结束符因为存储过程中会用;作为SQL语句的结束如果不改变结束符MySQL会错误地在第一个;处结束存储过程的定义。CREATE PROCEDURE用来创建新的存储过程。参数存储过程可以有参数参数有三种类型IN输入参数、OUT输出参数和INOUT既可输入也可输出。
2.存储过程体
BEGIN ... END存储过程的主体部分包含了要执行的SQL语句。DECLARE用来声明局部变量。SET用来给变量赋值。
示例
DELIMITER //CREATE PROCEDURE SumTwoNumbers(IN num1 INT, IN num2 INT, OUT result INT)
BEGINSET result num1 num2;
END //DELIMITER ;
DELIMITER //改变了MySQL的默认分隔符这样我们就可以在存储过程内部使用分号。CREATE PROCEDURE SumTwoNumbers 创建了一个名为 SumTwoNumbers 的存储过程。IN num1 INT, IN num2 INT 定义了两个输入参数 num1 和 num2 它们都是整数类型。OUT result INT 定义了一个输出参数 result 它也是整数类型用于存储计算结果。SET result num1 num2; 是存储过程的核心它将两个输入参数相加并将结果赋值给输出参数 result 。END 标记了存储过程的结束。DELIMITER ; 将分隔符重置回默认的分号。
如果要调用该存储内容
CALL SumTwoNumbers(10, 20, sumResult);
SELECT sumResult;