这仍然是一篇学习笔记
首先准备一个空的数据库,这篇笔记开始加入一些例子以供更好的理解。
- 先使用上篇笔记的知识来创建一个数据库
CREATE DATABASE IF NOT EXISTS cls DEFAULT CHARACTER SET utf8mb4;
排序规则默认就好,创建成功如下图:
- 创建数据表 c
CREATE TABLE IF NOT EXISTS c (
`course` varchar(20) NOT NULL COMMENT '课程名',
`times` varchar(20) NOT NULL COMMENT '学时',
`cn` int(10) NOT NULL PRIMARY KEY COMMENT '课程号, 主键'
) ENGINE = InnoDB CHARSET = UTF8MB4 COMMENT = '课程表';
成功如图:
查看表结构:
发现居然少了学分?
- 修改表
ALTER TABLE c ADD `score` DOUBLE(3,2) NOT NULL COMMENT '学分';
剩下的操作就需要这篇笔记的内容了
1. DML是什么
全称Data Manipulation Language,数据操作语言。主要用于对表数据的 增删改 操作。仅包括INSERT、UPDATE和DELETE语句。
2. INSERT语句
-- VALUES后的字段值必须与表名后的字段名一一对应
INSERT INTO 表名(字段名1, 字段名2, ..., 字段名n) VALUES(字段值1, 字段值2, ..., 字段名n);
-- VALUES后的字段值必须与创建表时字段顺序一致
INSERT INTO 表名 VALUES(字段值1, 字段值2, ..., 字段名n);
-- 可以插入多段数据
INSERT INTO 表名(字段名1, 字段名2, ..., 字段名n) VALUES(字段值1, 字段值2, ..., 字段名n),(字段值1, 字段值2, ..., 字段名n)...(字段值1, 字段值2, ..., 字段名n);
INSERT INTO 表名 VALUES(字段值1, 字段值2, ..., 字段名n), (字段值1, 字段值2, ..., 字段名n)...(字段值1, 字段值2, ..., 字段名n);
例如:
-- 插入单行数据
INSERT INTO c VALUES ('数据库', '36', '001', '6');
-- 插入多行数据
INSERT INTO c VALUES ('Java程序设计', '40', '002', '4'),
('C语言程序设计', '40', '003', '4'),
('数据结构与算法分析', '38', '004', '5');
插入操作:
此时表中数据如图:
3. UPDATE语句
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2...,字段名n=字段值n] [WHERE 修改名称]
3.1 WHERE条件子句
使用>
,<
,>=
,<=
,!=
来表示条件,SQL还有SQL关键的关键字来表示条件。
条件衔接:AND
表示逻辑与(&&
),OR
表示逻辑或(||
)
3.2 UPDATE示例
修改数据库中的学分为5.5,学时为15(数据库是一门课程)
UPDATE c SET `score`=5.5, `times`=15 WHERE course='数据库';
如图:
4. DELETE语句
DELETE FROM 表名 [WHERE 删除条件];
例,删除表中数据结构及算法分析
这一项:
DELETE FROM c WHERE course='数据结构与算法分析';
5. TRUNCATE语句
-- 清空表中数据
TRUNCATE [TABLE] 表名;
删除后数据无法通过回滚返回原来的状态,相当于清空整个表,重置物理索引
例如清空表c:
6. DELETE与TRUNCATE的区别
- DELETE语句根据条件删除表中数据,而TRUNCATE语句则是将表中数据全部清空;如果DELETE语句要删除表中所有数据,那么在效率上要低于TRUNCATE语句。
- 如果表中有自增长列,TRUNCATE语句会重置自增长的计数器,但DELETE不会。
- TRUNCATE语句执行后,数据无法恢复,而DELETE语句执行后,可以使用事务回滚进行恢复。