DML(Data Manipulation Language)
- 新增表中的数据:insert into
- 删除表中的数据:delete
- 修改表中的数据:update
- 查询表中的数据:select
任务一:向表中写入数据
编写Insert语句的思路
- 确认要把数据插入到哪个表中 imc_class
- 确认表的数据库结构,哪些列不能为null,哪些列可以为NULL,对于不能为NULL的列是否有默认值。(class_null)
- 确认对应插入列的插入值的清单 values(‘mysql‘),(‘redis‘)
# 创建数据库
CREATE DATABASE imc_db;
# 使用imc_db库
use imc_db;
# 创建imc_class
CREATE TABLE `imc_class` (
`class_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘课程分类ID‘,
`class_name` varchar(10) NOT NULL DEFAULT ‘‘ COMMENT ‘分类名称‘,
`add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘填加时间‘,
PRIMARY KEY (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT=‘课程分类‘;
# AUTO_INCREMENT=14表示从第14条记录开始插入
# 插入记录
INSERT INTO imc_class(class_name) VALUES (‘MYSQL‘),(‘Redis‘),(‘MongoDB‘),(‘Oracle‘);
# 创建唯一键
create UNIQUE INDEX uqx_classname on imc_class(class_name);
继续插入class_name为mysql的数据
由于唯一键约束导致插入失败,但可以找一种讨巧的方案,即删除之前旧的数据插入新的数据。
# 继续插入class_name为mysql的数据
INSERT INTO imc_class(class_name) VALUES(‘MYSQL‘)
ON DUPLICATE KEY UPDATE
add_time = CURRENT_TIME
受影响的行数为2行,即先删除旧数据,再插入新数据,新数据的创建时间已发生变化。
任务二:查询表中的数据
编写查询语句的思路
- 首先确定需要获取的数据存在哪些表中 确定from子句
- 其次是确定我们要取现表中的那些列 确定select子句
- 确定是否需要对表中的数据进行过滤 确定where子句
Where子句支持的过滤方法
查询出课程表中课程标题含有MySQL的课程
select * from imc_class where class_name like ‘%MySQL%‘;
MySQL的比较运算符
比较运算符 | 说明 | |
---|---|---|
= > >= <= <> != | <>和!=都表示不等于 | |
between min and max | 列的值大于等于最小值,小于等于最大值 | |
is null、is not null | 判断列的值是否为null | |
in、not in | 判断列的值是否在指定的范围内 | |
and,&& | and运算符两百ode表达式都为真时,返回的结果才为真 | |
or,|| | or运算符两边的表达式有一条为真,返回的结果就是真 | |
XOR | XOR运算符两边的表达式一真一假时返回真,两真两假时返回假<异或> |
任何运算符和NULL值运算结果都为NULL
多表关联之内关联
多表关联之左外关联
多表关联之右外关联
使用Group By ... Having子句的作用
- 把结果集按照某些列分成不同的组,并对分组后的数据进行聚合操作
- 可以通过可选的having子句对聚合后的数据进行过滤
常用的聚合函数
聚合函数 | 说明 |
---|---|
count(*)/count(col) | 计算符合条件的数据行数 |
Sum(col_name) | 计算表中符合条件的数值列的合计数 |
avg(col_name) | 计算表中符合条件的数值列的平均数 |
max(col_name) | 计算表中符合条件的任意列中数据的最大值 |
min(col_name) | 计算表中符合条件的任意列中数据的最小值 |
使用order by子句对查询结果进行排序
- 使用order by子句对查询结果进行排序是最安全的方法
- 列名后增加asc关键字指定该列的升序进行排序(或是指定desc关键字指定该列的降序进行排序)
- order by 子句也可以使用select子句中未出现的列或是函数
使用Limit子句限制返回结果集的行数
- 常用于数据列表分页
- 一定要和order by 子句配合使用
- limit起始偏移量,结果集的行数
视图
创建视图
任务三:按条件删除表中的数据
编写Delete语句的思路
- 确定要删除的数据存储在哪张表中 from子句
- 确定删除数据的过滤条件 where子句
- 确定是否只删除有限条数据 order by ... limit 子句
修改表中符合条件的数据
编写update语句的思路
- 确定要更新的数据存储在哪张表中 update子句
- 确定要更新的列及值 set 子句
- 确定更新数据的条件 where子句
# 向已创建的表中添加某一列信息
alter table imc_course add is_recommend tinyint default 0 comment ‘是否推荐,0不推荐,1推荐‘
# 重新查看建表语句
show create table imc_course;
# 随机推荐10门课程 Rand()随机函数 + limit
select course_id from imc_course order by Rand() limit 10;