一 .数据的插入,更新与删除
数据的插入:
1.INSERT INTO VALUES 这是最简单和最常见的插入数据方法。语法如下:
2.SERT INTO SELECT 该方法可以将一个表中的数据拷贝到另外一个表中。语法如下:
3.LOAD DATA INFILE 该方法可以从本地文件系统中导入数据到数据库中。语法如下:
数据的更新:
1.UPDATE SET 该方法可以更新指定列的值,语法如下:
2.UPDATE JOIN 该方法可以更新多个表之间的关联数据,语法如下:
数据的删除:
1.DELETE FROM 该方法可以删除表中指定的记录,语法如下:
2. TRUNCATE TABLE 该方法可以删除表中的所有记录,但不删除表本身。与DELETE不同,TRUNCATE操作通常比DELETE操作更快,因为它不需要逐个删除记录,而是直接删除整个表中的数据。语法如下:
3.DROP TABLE 该方法可以删除整个表,包括表结构及其所有数据。语法如下:
二. 数据完整性的实现
1.数据完整性的概念:
在数据库中,数据完整性(Data Integrity)指的是数据的准确性、一致性和有效性。为了保证数据的完整性,常见的方法包括以下几种:
(1)实体完整性 实体完整性(Entity Integrity)指的是表中每条记录都有一个唯一的标识符,即主键限制,可以保证每条记录的唯一性。同时,还可以使用非空约束,保证某个字段不为空。
(2)参照完整性 参照完整性(Referential Integrity)指的是用于保证表之间的关联关系和数据的一致性。通常使用外键(Foreign Key)来表示两个表之间的关联关系。通过约束外键的引用关系和级联操作,可以确保当父表中的数据发生变化时,子表中的外键也自动更新或删除。
(3)唯一性约束 唯一性约束(Unique Constraint)指的是保证某个字段的值唯一。使用唯一性约束,可以避免重复的数据出现,同时可以提高查询效率。
(4)检查约束 检查约束(Check Constraint)是一种对字段值进行逻辑判断的方法。使用检查约束,可以保证某个字段只能输入特定的值或符合特定的条件,例如日期格式、数字范围等。
2.域完整性:
1.默认值约束:
添加默认值约束
删除默认值约束
2.非空约束:
添加非空约束
修改非空约束
删除非空约束
3.实体完整性:
1.主键约束:
修改表并指定主键
删除主键约束
2.唯一约束:
修改表并指定唯一约束
删除唯一约束
3.自增约束:
修改表并指定自增约束 MySQL中只支持将整型列改为自增列,所以修改表时只需添加AUTO_INCREMENT即可。语法如下:
4.参照完整性:
1.修改表并指定外键约束 MySQL中的ALTER TABLE语句可以添加或删除外键约束。语法如下:
2.删除外键约束:
三. 单表查询
1.基础查询
查询一个表中的所有数据
查询特定列中的数据
2.条件查询
3.排序查询
4.分组查询
四. 多表查询
1.连接查询:
内连接用于查询两个表中共有的数据,即只返回两个表中都存在的记录。
左连接用于查询左表中的所有记录以及在右表中有匹配的记录。
右连接用于查询右表中的所有记录以及在左表中有匹配的记录。
交叉连接用于查询左表和右表中的所有记录,并将匹配的记录合并在一起。
2.子查询 :
标量子查询返回一个单一的值,通常在WHERE子句或SELECT列表中使用。
列子查询返回一个列集合,在FROM子句中可以把它看作是一个虚拟表,也可以使用IN或ANY关键字来过滤数据。
行子查询返回一个行集合,在FROM子句中可以把它看作是一个虚拟表,可以使用JOIN操作来将其与其他表连接。
3.联合查询:
UNION UNION用于合并两个或多个结果集,去除重复行,并按照SELECT语句指定的顺序排序。
UNION ALL UNION ALL用于合并两个或多个结果集,不去除重复行。
4.将结果存入表中:
INSERT INTO 表名
SELECT查询语句
五. 视图与索引
1.视图:
创建视图:
- CREATE VIEW语句需要具有CREATE VIEW权限;
- 视图的数据是基于其定义的SELECT语句中的数据推算出来的,不会像普通表一样存储数据,这意味着对视图的操作实际上会影响到底层表中的数据;
- 视图可以像普通表一样进行SELECT、UPDATE、DELETE和INSERT等操作,但是存在一些限制,如不能引用临时表、不能使用ORDER BY子句和GROUP BY子句等;
- 应该注意,视图可以被另一个视图所引用,从而构建更复杂的查询,但是过度使用视图会影响查询性能,应该谨慎使用。
2.索引:
创建索引 语法:
删除索引 语法:
六. 数据库编程
1.函数:
分为内置函数和自定义函数
内置函数分为
- CONCAT():用于将两个或多个字符串连接为一个字符串。
- SUBSTR():用于截取字符串的一部分。
- REPLACE():用于替换字符串中的子串。
- ROUND():用于对一个数字进行四舍五入。
- ABS():用于返回一个数字的绝对值。
- POW():用于计算一个数字的指定次幂。
- NOW():用于获取当前日期和时间。
- DATE_FORMAT():用于将日期和时间格式化为指定的字符串。
- DATEDIFF():用于计算两个日期之间的差值。
创建自定义函数语句:
- 创建自定义函数需要具有相应的权限;
- 函数名应该具有描述性,并且不能与系统内置函数或关键字重名;
- 函数的参数和返回类型可以是任意 MySQL 数据类型,但是需要与函数体中的代码保持一致;
- 在函数体中可以使用 DECLARE 语句声明局部变量,用于存储中间结果;
- 在函数体中可以使用 IF、WHILE、FOR、CASE 等语句构建复杂的逻辑,完成具体的计算或处理任务。
2.存储过程及应用:
存储过程的概念:
MySQL 存储过程是一种预编译的代码块,它包含了多条 SQL 语句和控制逻辑,可以像执行函数一样被调用。存储过程可以接受输入参数和返回输出结果,在数据库端执行,可以提高数据处理效率和安全性。
存储过程可以完成复杂的业务逻辑,例如根据一系列条件查询数据、进行数据转换和计算、执行批量操作等,可以通过 CALL 语句调用存储过程,并传递必要的参数。
创建存储过程语句:
调用存储过程需要使用 CALL 语句
3.变量
在 MySQL 中创建变量使用的是 SET 语句或 DECLARE 语句
MySQL 中的变量可以是以下主要数据类型:
- 整数型(INT)
- 浮点数型(FLOAT)
- 字符串型(VARCHAR)
- 日期型(DATE, DATETIME, TIMESTAMP)
- 变量的作用范围:MySQL 中的变量可以分为会话变量和局部变量两种。会话变量在整个会话中都可见,而局部变量只在特定的块或存储过程中可见。
- 变量的生命周期:MySQL 中的变量有两种生命周期:一种是会话周期,在连接建立后一直保持到连接关闭;另一种是块级周期,在代码块中声明的变量只在该块中有效,块执行完毕后会被自动删除。
MySQL 中可以使用 SELECT 或 SET 语句来获取或修改变量的值
4.控制流程:
IF 语句根据条件判断是否执行特定的语句块。
CASE 语句也是一个条件分支结构,可以在有多个条件时选择执行哪段代码。
WHILE 语句是循环执行语句块直至条件不成立。
LOOP 语句用于循环执行语句块,直到达到指定条件才停止循环。
REPEAT 语句是另一种循环结构,不同于 WHILE 和 LOOP 循环只在条件满足时继续循环,REPEAT 循环在条件满足时停止。
IFNULL 函数用于返回第一个非空值。如果第一个参数不为空,则返回第一个参数的值,否则返回第二个参数的值。
5.触发器 :
创建触发器的语法如下:
BEFORE 和 AFTER 触发器
MySQL 中有两种触发器类型:BEFORE 和 AFTER,它们的区别在于触发的时间不同。BEFORE 触发器是在 INSERT、UPDATE 或 DELETE 操作执行前自动触发,而 AFTER 触发器则是在操作执行完成后自动触发。
NEW 和 OLD 变量
在触发器中,可以使用 NEW 和 OLD 变量来引用即将插入或修改的数据和旧的数据。NEW 引用新数据,OLD 引用旧数据。在 INSERT 操作中,只有 NEW 变量;在 UPDATE 操作中,旧值存储在 OLD 变量中,新值存储在 NEW 变量中;在 DELETE 操作中,只有 OLD 变量。
DISABLE 和 ENABLE 触发器
DROP 触发器