黑马 Javaweb - MySQL 精华篇

我是南城余!阿里云开发者平台专家博士证书获得者!

欢迎关注我的博客!一同成长!

一名从事运维开发的worker,记录分享学习。

专注于AI,运维开发,windows Linux 系统领域的分享!

知识库链接:

Java基础入门 · 语雀


数据库约束

  1. 主键约束 primary key
  2. 外键约束 foreign key
  3. 非空约束 not null
  4. 唯一约束 unique
  5. 默认约束 default

create database  ts_db;
use ts_db;-- DDL实战(表操作)
-- 普通建表语句
create table t_user(id int comment 'ID,唯一标识符',username varchar(20) comment '用户名',name varchar(10) comment '名字',age int comment '年龄',gender char(1) comment '性别') comment '用户表';drop table t_user;-- 约束建表语句
create table t_user(id int  primary key auto_increment comment 'ID,唯一标识符',username varchar(20) not null unique comment '用户名',name varchar(10)  not null comment '名字',age int comment '年龄',gender char(1) default '男' comment '性别') comment '用户表';

案例和数据类型

  1. charvarchar的区别:

char(10):代表字段占10个字,全部占完,如果不足10个,则补null

varchar(10):不足10个,也不补充,默认为几个字符就存储几个字符

所以在日常开发中,varchar使用比例别char高

  1. float,double和decimal

这三个数组类型都是小数型数值类型,后面都可以跟()表示数字长度

float(5,2)代表 5表示整个数字长度,2代表小数位个数

根据页面原型,需求创建表

unsigned为无符号的,即为不能为负数 在企业开发种 类似gender这种复选框的选项,一般采用数字

-- 案例实战
create table t_emp(id int primary key auto_increment,username varchar(20) not null unique comment '用户名非空 必填 唯一',employeeName varchar(10) not null comment '员工姓名非空 必填',gender tinyint unsigned not null default '性别 存储1 - 男 2 - 女',-- unsigned为无符号的,即为不能为负数 在企业开发种 类似gender这种复选框的选项,一般采用数字-- 对应的含义 1 - 男 2 - 女headerImage varchar(200) ,job tinyint unsigned comment '1- 2- 3- 4-',entryDate date,password varchar(15) default '123456',create_time datetime not null,update_time datetime not null
);

DDL语句

TODOD6 -10 数据库 DML

update tb_emp set name = '张三',update_time = now() where id = 1;-- delete 不能删除字段值,所以如果想要删除某个字段 可以使用update更新某个字段为NULLdelete from tb [where 条件] --如果没条件 则删除整个表的所有数据

数据库 DQL

-- 去重 distinct
select distinct id from tb;
-- 别名 
select name '姓名' from tb;-- *在实际开发中 影响效率 不直观 一般不使用-- 查询null 要用 is null
select * from tb where job is null;--某张表的数据总量 1.count(字段) 2.count(常量) 3.count(*)√ 推荐数据库对其做了优化
select count(*) from tb;--聚合函数 和 条件查询使用 
--先查询入职时间在‘2015-01-01'(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位
select job,count(*) from tb where entry_time <= '2015-01-01' group by job having count(*) >= 2;
--分组查询后,查询的字段一般为分组字段和聚合函数,而查询其他字段无任何意义
--执行顺序:where > 聚合函数 > having--where 和 having的区别
--1. 执行时机不同:where是分组之前进行过滤,不满足where条件和不参与分组;而having是分组之后对结果进行过滤
--2. 判断条件不同:where不能对聚合函数进行判断,而having可以--排序查询
select * from tb order by entry_time , order by update_time;--分页查询
select * from tb limit(起始索引,查询记录数);
--起始索引=(查询页码-1)*每页显示记录数--案例
--根据需求,完成员工性别统计
select if(gender = 1,'man','woman') 性别,count(*) from tb group by gender ;
--完成员工职位信息统计
select (case job when 1 then '班主任' when 2 then '讲师' when 3 then '学生主管' else '未分配职位' end) '职位'
,count(*) from tb group by job;

多表设计

-- 表 分为 一对多、一对一(通过外键关联主键)  
--多对多(一般借助第三张表实现,也称为关系维护表,第三张表用来设置外键关联另外两张表)

多表查询

--外连接 (x连接查询出来的结果为x的全部数据和两张表交集的全部数据)
--A.查询员工表所有 员工的信息,和对应的部门名称(左外连接)
select e.name, d.name from employee e left join department d on e.dept_id = d.id;
--B.查询部门表 所有 部门的名称,和对应的员工名称(右外连接)
select e.name, d.name from employee e right join department d on e.dept_id = d.id;
select e.name, d.name from department d left join employee e  on e.dept_id = d.id;--所谓的行列子查询 指的是子查询结果的表现形式为行或者列
--列子查询 用in--行子查询  查询与南城余入职日期和职位都相同的员工信息
select * from employee where (entry_time,job) = (select entry_time ,job from employee where name = '南城余');--表子查询 多行多列的子查询 常作为临时表使用
-- 查询入职日期是“2006-10-01”之后的员工信息及其部门名称
select e.*,d.name from  (select * from employee where entry_time > '2006-10-01') e,departmen d where e.dept_id = d.id;--题目 查询出低于菜品平均每个的菜品信息(展示出菜品名称、菜品价格)
select name,price  from dish where price < (select avg(price) from dish); 

事务

--开始事务
start transaction;/begin;--删除部门
delete from tb_dept where id = 2;--删除部门下的员工
delete from tb_emp where dept_id = 2;--提交事务 (上面两条sql执行成功方可执行)
commit;--回滚事务(上面两条sql有一条失败执行此语句回滚)
rollback;

索引

--MySQL数据库默认索引为B+tree(多路平衡搜索树)
--创建索引
create index idx_emp_name on tb_emp(name);--查询索引 查询出来的索引包括 唯一索引 	主键索引(所有索引中性能最高的) 
show index from tb_emp;--删除索引
drop index idx_emp_name on tb_emp;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415514.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中小企业股权质押融资(下)

股权质押融资的主要风险 由于股权资产的特殊性&#xff0c;较固定资产抵押和质押、第三方担保等方式&#xff0c;股权质押融资风险易受企业经营状况等因素的影响&#xff0c;主要包括股权价值下跌的风险、股权质押的道德风险、股权处置风险以及现行法律不完善导致的法律风险。…

Python单元测试之道:从入门到精通

单元测试是软件开发中不可或缺的一部分&#xff0c;有助于确保代码的正确性、可维护性和可扩展性。在Python中&#xff0c;有丰富的工具和库可用于进行单元测试。本文将为你提供一个全面的指南&#xff0c;从入门到精通&#xff0c;轻松掌握Python单元测试的方方面面。 一、入…

高速CAN总线 A B节点竞争总线时 电压分析

CAN收发器放大图 前4步简化过程同<<高速CAN总线 A节点发送 B节点接收 电压分析>> A B节点同时发送显性电平 A B节点同时发送显性电平时 初步简化后如下图所示: 图① A B 节点同时发送显性电平, 则 4 个三极管全部导通, 假定三极管压降0.5V 则电路简化如下图.(导…

贵阳贵安推进“数字活市”战略成效明显

作者&#xff1a;黄玉叶 近年来&#xff0c;贵阳贵安将数字经济确立为高质量发展的主路径之一&#xff0c;把推进“数字活市”作为实施主战略、实现主定位&#xff0c;特别是建设“数字经济发展创新区核心区”的重要抓手&#xff0c;从改革、发展、民生三个维度纵深推进“数字活…

3 python快速上手

Python基础中的必备语法 1. 循环语句1.1 循环语句基本使用1.2 综合小案例1.3 break1.4 continue1.5 while else 2.字符串格式化2.1 %2.1.1 基本格式化操作2.1.2 百分比 2.2 format&#xff08;推荐&#xff09;2.3 f 3. 运算符3.1 运算符优先级3.2 面试题面试题 各位小伙伴想要…

Linux下安装Mysql【CentOS7 】

Linux下安装Mysql 一、Linux下安装Mysql-5.7.41【tar包下载安装】1.1.首先检查是否已经安装过mysql1.2.下载Linux版本的Mysql-5.71.3.解压缩1.4.安装执行 rpm 安装包需要先下载 openssl-devel 插件1.5.安装 Mysql5.7 执行 rpm 安装包1.6.Mysql相关操作命令1.7.查看Mysql-5.7 临…

使用emby在Nas群晖搭建一个私人影院

1、安装Emby 打开套件中心搜索emby并安装 2、新增一个共享文件夹 设置好&#xff0c;无脑下一步到应用 给emby赋予这个文件夹的读写权限 保存 3、打开emby service 选择媒体库

用 Python 制作可视化 GUI 界面,一键实现证件照背景颜色的替换

今天&#xff0c;我们来分享一下如何通过Python的十来行代码来替换证件照的背景颜色&#xff0c;那么在最后&#xff0c;小编也会将上述的流程制作成一个GUI界面来方便大家使用。关于界面的大致模样其实和先前的相差不大&#xff0c;大家应该都看过上一篇的内容 界面大体的样子…

Java String基础学习

目录 1、String的构造方法 2、String内存模型 3、字符串的比较 4、字符串的练习 1、用户登录系统 2、遍历字符串 3、统计字符次数 4、拼接字符串 5、字符串的反转 6、金额转换 7、手机号屏蔽 * 8、身份证信息查看 9、敏感词替换 5、StringBuilder 1、概念及练习…

Debian 10.13.0 安装图解

引导和开始安装 这里直接回车确认即可&#xff0c;选择图形化安装方式。 选择语言 这里要区分一下&#xff0c;当前选中的语言作为安装过程中安装器所使用的语言&#xff0c;这里我们选择中文简体。不过细心的同学可能发现&#xff0c;当你选择安装器语言之后&#xff0c;后续安…

【链路层】点对点协议 PPP

目录 1、PPP协议的特点 2、PPP协议的组成和帧格式 3、PPP协议的工作状态 目前使用得最广泛的数据链路层协议是点对点协议PPP(Point-to-Point Protocol)。 1、PPP协议的特点 我们知道&#xff0c;互联网用户通常都要连接到某个 ISP 才能接入到互联网。PPP 协议就是用户计算机…

前端技术演进史

大家好&#xff0c;我是宝哥 在互联网的快速发展中&#xff0c;前端技术扮演着至关重要的角色。它不仅是用户与网站交互的窗口&#xff0c;更是网站性能和用户体验的决定因素。本文将从早期的前端技术发展到现代前端框架的诞生&#xff0c;再到构建工具的演变&#xff0c;最后…