当前位置: 首页 > news >正文

【MySQL学习|黑马笔记|Day2】SQL|DML、DGL、DCL,函数,约束

(接上篇)

文章目录

        • 3)DML
          • 1.添加INSERT
          • 2.修改UPDATE
          • 3.删除DELETE
        • 4)DGL
          • 1.基本查询
          • 2.条件查询
          • 3.聚合函数
          • 4.分组查询
          • 5.排序查询
          • 6.分页查询
          • 7.编写顺序和执行顺序
        • 5)DCL
          • 1.用户管理
          • 2.权限控制
      • 三.函数
        • 1)字符串函数
        • 2)数值函数
        • 3)日期函数
        • 4)流程控制函数
      • 四.约束
        • 1)概述
        • 2)案例
        • 3)外键约束
        • 4)外键删除更新行为

在这里插入图片描述
今天看的是MySQL的12~36集,笔记包含SQL语法中的DML,DGL,DCL以及函数,约束相关知识

3)DML
1.添加INSERT
  • 给指定字段添加数据

    INSERT INTO 表名(字段名1,字段名2,...)VALUES(值1,值2,...);

  • 给全部字段添加数据

    INSERT INTO 表名 VALUES(值1,值2,...);

  • 批量添加数据

    INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,..),(值1,值2,..),(值1,值2,..);

    INSERT INTO 表名 VALUES(值1,值2,..),(值1,值2,..),(值1,值2,..);

注意

  • 插入数据时,指定的字段顺序需要与值的顺序一一对应
  • 字符串和日期型数据应该包含在引号中
  • 插入的数据大小,应该在字段的规定范围内
2.修改UPDATE
  • 修改数据

    UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,...[WHERE 条件];

注意:修改语句的条件可以有也可以没有,若没有则会修改整张表的所有数据

3.删除DELETE
  • 删除数据

    DELETE FROM 表名 [WHERE 条件];

注意:删除语句的条件可以有也可以没有,若没有则会删除整张表的所有数据

​ DELETE语句不能删除某一个字段的值(可以使用update)

4)DGL
1.基本查询
  • 查询多个字段

    SELECT 字段1,字段2,字段3...FROM 表名;

    SELSECT * FROM 表名; (*表示返回所有字段)

  • 设置别名

    SELECT 字段名1[AS 别名1],字段2[AS 别名2]...FROM表名;

  • 去除重复记录

    SELECT DISTINCT 字段列表 FROM 表名;

2.条件查询
  • 语法

    SELECT 字段列表 FROM 表名 WHERE 条件列表;

  • 条件

在这里插入图片描述

eg

查询没有身份证号的 select * from tb_user where idcard is nulll;

查询有身份证号的 select * from tb_user where idcard is not nulll;

查询年龄等于18或20或40的 select * from tb_user where age = 18 or age = 20 or age = 40;select * from tb_user where age in (18,20,40);

查询姓名为两个字的 select * from tb_user where name like '___';

查询身份证为结尾为x的 select * from tb_user where idcard like '%X';

3.聚合函数

将一列数据作为一个整体,进行纵向计算

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

SELECT 聚合函数(字段列表) FROM 表名;

eg

-- 1.统计员工数量
select count(*) from tb_user;
-- 2.统计平均年龄
select avg(age) from tb_user;
-- 3.统计西安地区员工年龄之和
select sum(age) from tb_user where workaddress = '西安';
4.分组查询
  • 语法

    SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名[HAVING 分组后过滤条件];

where VS having

  • 执行时机不同:where是分组前进行过滤,补码组where条件,不参与分组;having是分组之后对结果进行过滤
  • 判断条件不同:where不能对聚合函数进行判断,而having可以
-- 1.根据性别分组 统计各自数量
select gender,count(*) from tb_user group by gender;
-- 2.根据性别分组 统计各自平均年龄
select gender,avg(age) from tb_user group by gender;
-- 3.查询年龄小于45的,根据工作地址分组,获取员工数量大于3的工作地址
select workaddress,count(*) from tb_user where age < 45 group by workaddress having count(*) >= 3;

注意

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
5.排序查询
  • 语法

    SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

  • 排序方式

    ASC:升序

    DESC:降序

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段排序

eg:

-- 1.根据年龄排序
select * from tb_user order by age asc;
-- 2.根据年龄升序排序,年龄相同再按照id升序排序
select * from tb_user order by age asc,id asc;
6.分页查询
  • 语法

    SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

注意

  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库方言,不同数据库有不同的实现,MySQL中是LIMIT
  • 如果查询的是第一页数据,起始所有可以省略,直接简写limit10

eg

-- 1.查询第一页 每页显示10条
select * from tb_user limit 10;
-- 2.查询第二页 每页显示10条
select * from tb_user limit 10,10;
7.编写顺序和执行顺序

在这里插入图片描述

5)DCL

管理数据库用户、控制数据库的访问权限

1.用户管理
  • 查询用户

    USE mysql;
    SELECT * FROM user;
    
  • 创建用户

    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

  • 修改用户密码

    CREATE USER '用户名'@'主机名' IDENTIFIED WITH mysql_NATIVE_PASSWORD BY '新密码';

  • 删除用户

    DROP USER '用户名'@'主机名';

注意

  • 主机名可以使用%通配
  • 这类SQL开发人员操作的比较少,主要是DBA(数据库管理员)使用
2.权限控制
权限说明
ALL,ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表
  • 查询权限

    SHOW GRANTS FOR '用户名'@'主机名';

  • 授予权限

    GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

  • 撤销权限

    REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

注意

  • 多个权限之间,使用逗号分隔

  • 授权时,数据库名和表名可以使用*进行通配,代表所有

    grant all on *.* to 'r'@'%';授予所有数据库和所有表的权限

三.函数

1)字符串函数

MySQL中内置的字符串函数

函数功能
CONCAT(S1,S2,S3,…)字符串拼接
LOWER(str)将str转换为小写
UPPER(str)将str转换为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头尾的空格
SUBSTRING(str,strat,len)返回字符串str从start起len个长度的字符串

SELECT 函数(参数);

eg

select concat('Hello','MySQL');select lower('ABC');select upper('abc');select lpad('111',5,'-');select trim('  hello mysql   ');
update tb_user set nickname = lpad(id,5,'0');
2)数值函数
函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(X,Y)求参数x的四舍五入的值,保留y位小数
-- 生成一个六位的随机验证码
select lpad(round(rand()*1000000,0),6,0);
3)日期函数
函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date,INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date 1,date 2)返回起始时间date1和结束时间date2之间的天数
select curdate();
select curtime();
select now();select YEAR(now());
select MONTH(now());
select DAY(now());select date_add(now(),INTERVAL 70 DAY);select datediff('2025-11-27',now());
-- 查询所有员工的入职天数,倒序排序
select name,datediff(curdate(),entrydate) as 'entrydays' from tb_user order by entrydays desc;
4)流程控制函数

在SQL语句中实现条件筛选,从而提高语句的效率

函数功能
IF(vakue,t,f)如果value为true,则返回t,否则返回f
IFNULL(value1,value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN[val1]THEN[res1]…ELSE[default]END如果val1为true,返回res1,…否则返回default
CASE[expr] WHEN[val1]THEN[res1]…ELSE[default]END如果expr的值等于val1,返回res1,…否则返回default
-- if
select if(true,'OK','ERROR');-- ifnull
select ifnull('OK','Default');
select ifnull('','Default');
select ifnull(null,'Default');-- case
-- 查询emp表中姓名和工作地址,把北京上海改成一线城市,其他改成二线城市
selectname,(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;

四.约束

1)概述

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据

目的:保证数据库中数据的正确、有效性、完整性

分类

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMART KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束保证字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束

2)案例

在这里插入图片描述

create table user(id int primary key auto_increment comment'主键',name varchar(10) not null unique comment'姓名',age int check(age > 0 && age <= 120) comment'年龄',status char(1) default '1' comment'状态',gender char(1) comment'性别'
) comment'用户表';-- 插入数据
insert into user(name,age,status,gender) values ('Tom1',19,'1','男'),('Tom2',22,'0','男');
insert into user(name,age,status,gender) values ('Tom3',29,'','男');-- 空
insert into user(name,age,status,gender) values ('Tom4',29,null,'男');-- <null>
insert into user(name,age,gender) values ('Tom5',29,'男');-- 没传status采用默认值
3)外键约束

在这里插入图片描述

  • 添加外键

    1.在创建时添加

    create table 表名(字段名 数据类型,...[constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名)
    );
    

    2.在创建后添加

    alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);
    
  • 删除外键

    alter table 表名 drop foreign key 外键名称;
    
4)外键删除更新行为
  • 删除/更新行为
行为说明
no action当在父表中删除/更新对应记录时,首先要检查该记录是否有对应外键,若有则不允许删除/更新
restrict当在父表中删除/更新对应记录时,首先要检查该记录是否有对应外键,若有则不允许删除/更新
cascade当在父表中删除/更新对应记录时,首先要检查该记录是否有对应外键,若有则也删除/更新在子表的记录
set null当在父表中删除/更新对应记录时,首先要检查该记录是否有对应外键,若有则设置子表中该外键值为null(要求外键允许取null)
set default父表有变更时,子表将外键列设置为默认值(lnnodb不支持)

alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名(主表字段名) on update cascade on delete cascade;

(笔记内容主要基于黑马程序员的课程讲解,旨在加深理解和便于日后复习)
在这里插入图片描述
希望这篇笔记能对大家的学习有所帮助,有啥不对的地方欢迎大佬们在评论区

http://www.lryc.cn/news/603277.html

相关文章:

  • redis得到shell的几种方法
  • 搭建专属AI聊天网站:NextChat + 蓝耘MaaS平台完整部署指南
  • 《C++初阶之STL》【list容器:详解 + 实现】
  • 夯实家庭基石本质上是一场“缓慢的革命”
  • 【Redis实现基础的分布式锁及Lua脚本说明】
  • 使用 Canvas 替代 <video> 标签加载并渲染视频
  • 【深度学习】独热编码(One-Hot Encoding)
  • 怎么提升服务器的防攻击能力!
  • day064-kodbox接入对象存储与配置负载均衡
  • 「源力觉醒 创作者计划」 百度AI的战略“惊蛰”,一场重塑格局的“破壁行动”
  • JSON在java中的使用
  • 力扣热题100--------240.搜索二维矩阵
  • 半导体企业选用的跨网文件交换系统到底应该具备什么功能?
  • Spring Boot 请求限流实战:基于 IP 的高效防刷策略
  • Qt 并行计算框架与应用
  • 重塑浏览器!微软在Edge加入AI Agent,自动化搜索、预测、整合
  • [明道云]-基础教学2-工作表字段 vs 控件:选哪种?
  • nodejs 实现Excel数据导入数据库,以及数据库数据导出excel接口(核心使用了multer和node-xlsx库)
  • 架构实战——互联网架构模板(“用户层”和“业务层”技术)
  • 向量内积:揭示方向与相似性的数学密码
  • 瑞盟NFC芯片,MS520
  • 网上买卖订单处理手忙脚乱?订单处理工具了解一下
  • Radash.js 现代化JavaScript实用工具库详解 – 轻量级Lodash替代方案
  • python优秀案例:基于机器学习算法的景区旅游评论数据分析与可视化系统,技术使用django+lstm算法+朴素贝叶斯算法+echarts可视化
  • 机器学习、深度学习与数据挖掘:三大技术领域的深度解析
  • uipath数据写入excel的坑
  • perf工具在arm上的安装记录
  • 机器学习、深度学习与数据挖掘:核心技术差异、应用场景与工程实践指南
  • p5.js 从零开始创建 3D 模型,createModel入门指南
  • 新升级超值型系列32位单片机MM32G0005