黑马 Javaweb - MySQL 精华篇

news2024/12/29 11:05:11

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

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

一名从事运维开发的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更新某个字段为NULL

delete 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.coloradmin.cn/o/1394751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为交换机配置NQA DNS检测IP网络DNS解析速度

华为HCIA视频教程&#xff1a;超级实用&#xff0c;华为VRP系统文件详解 华为HCIA视频教程&#xff1a;不会传输层协议&#xff0c;HCIA都考不过 华为HCIA视频教程&#xff1a;网络工程师的基本功&#xff1a;网络地址转换NAT 华为HCIP视频教程&#xff1a;DHCP协议原理与配…

Hadoop集群配置及测试

Hadoop集群配置及测试 NameNode与SecondaryNameNode最好不在同一服务器 ResourceManager较为消耗资源&#xff0c;因而和NameNode与SecondaryNameNode最好不在同一服务器。 配置文件 hadoop102hadoop103hadoop104HDFSNameNodeDataNodeDataNodeSecondaryNameNodeDataNodeYAR…

如何通过IDEA创建基于Java8的Spring Boot项目

上次发现我的IDEA创建Spring Boot项目时只支持11和17的JDK版本&#xff0c;于是就通过Maven搭建SpringBoot项目。 究其原因&#xff0c;原来是Spring官方抛弃了Java8&#xff01;&#xff01;&#xff01; 使用IDEA内置的Spring Initializr创建SpringBoot项目时&#xff0c;已…

设计模式——1_5 享元(Flyweight)

今人不见古时月&#xff0c;今月曾经照古人 ——李白 文章目录 定义图纸一个例子&#xff1a;可以复用的样式表绘制表格降本增效&#xff1f;第一步&#xff0c;先分析 变化和不变的地方第二步&#xff0c;把变化和不变的地方拆开来第三步&#xff1a;有没有办法共享这些内容完…

【数据结构】堆的实现和排序

目录 1、堆的概念和结构 1.1、堆的概念 1.2、堆的性质 1.3、堆的逻辑结构和存储结构 2、堆的实现 2.1、堆的初始化和初始化 2.2、堆的插入和向上调整算法 2.3、堆的删除和向下调整算法 2.4、取堆顶的数据和数据个数 2.5、堆的判空和打印 2.6、测试 3、堆的应用 3.1…

AIGC之视频图片生成工具gen-2

最近无事时研究了一款图片和视频生成工具&#xff0c;先说结论&#xff1a; 1.可以生成视频&#xff0c;生成方式有三种 通过文本的方式生成视频可以通过图片的方式生成视频也可以通过图片文本的方式生成视频 2.可以通过文本描述的方式生成图片 3.生成的视频有瑕疵&#xf…

Eureka整合seata分布式事务

文章目录 前言一、Seata配置1.1、Seata下载1.2、修改conf目录中 flie.conf 文件1.3、修改conf目录中 registry.conf文件1.4、初始化seata数据库 二、微服务整合Seata2.1、父工程项目创建引入依赖 2.2、Eureka集群搭建2.3、搭建账户微服务2.3.1 新建seata-account-service微服务…

React全局状态管理

redux是一个状态管理框架&#xff0c;它可以帮助我们清晰定义state和处理函数&#xff0c;提高可读性&#xff0c;并且redux中的状态是全局共享&#xff0c;规避组件间通过props传递状态等操作。 快速使用 在React应用的根节点&#xff0c;需要借助React的Context机制存放整个…

安卓apk加固后重签名

背景 等保检测&#xff0c;安卓apk使用第三方加固后签名信息会丢失&#xff0c;需要我们重新进行签名 使用jarsigner签名遇到的问题 APP失效无法安装 如何解决签名失效 我们在这里使用Android SDK的apksigner进行签名 mac系统&#xff0c;apksigner 需要设置环境变量 1、…

leedcode刷题day2

题目&#xff1a; 根据这道题我的思路是用python首先将第一个值赋给a&#xff0c;然后将下一个值赋值给b在这里写一个循环计算下一个值是否等于a&#xff0c;不等于就进入数组当等于a的时候输出数组长度&#xff0c;然后比较数组长度输出最长长度对应的元素不过显然这很慢。 然…

【Linux】权限的深度解析

前言&#xff1a;在此之前我们学习了一些常用的Linux指令&#xff0c;今天我们进一步学习Linux下权限的一些概念 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的学习 &#x1f448; &#x1f4af;代码仓库:卫卫周大胖的学习日记&a…

行列转化【附加面试题】

在MySQL中&#xff0c;行列转换是一种常见的操作。它包括行转列和列转行两种情况。 行转列&#xff1a;行转列是将表中的某些行转换成列&#xff0c;以提供更为清晰、易读的数据视图。例如&#xff0c;假设我们有一个包含科目和分数的表&#xff0c;我们可以使用SUM和CASE语句…

一款轻量级、基于Java语言开发的低代码开发框架,开箱即用!

数字化时代&#xff0c;企业对于灵活、高效和安全的软件开发需求日益旺盛。为了满足这些需求&#xff0c;许多组织转向低代码技术&#xff0c;以寻求更具成本效益和创新性的解决方案。JNPF基础框架正是在这一背景下应运而生&#xff0c;凭借其私有化部署和100%源码交付的特性&a…

011:vue结合css动画animation实现下雪效果

文章目录 1. 实现效果2. 编写一个下雪效果组件 VabSnow.vue3. 页面使用4. 注意点 1. 实现效果 GIF录屏文件太卡有点卡&#xff0c;实际是很丝滑的 2. 编写一个下雪效果组件 VabSnow.vue 在 src 下新建 components 文件&#xff0c;创建VabSnow.vue组件文件 <template>…

C++系统笔记教程----vscode远程连接ssh

C系统笔记教程 文章目录 C系统笔记教程前言开发环境配置总结 前言 开发环境配置 Ubuntu20.24VScode 如果没有linux系统&#xff0c;但是想用其编译&#xff0c;可以使用ssh远程连接。 首先进入vscode,打开远程连接窗口&#xff08;蓝色的小箭头这&#xff09; 选择连接到主机…

三菱plc学习入门(创建属于自己的FB模块)

在现实生活中&#xff0c;往往会需要修改一些属于方便自己的库&#xff0c;1&#xff0c;自己创建的库方便自己使用与查看2&#xff0c;提高自己编程能力&#xff0c;3&#xff0c;保护自己的程序不被外人修改&#xff01;&#xff01;&#xff01;下面就让我来操作一下 导入需…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-4 label

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>label</title> </head><body> 性别: <label for"male">男</label> <input type"radio" name"sex&quo…

python的tabulate包在命令行下输出表格不对齐

用tabulate可以在命令行下输出表格。 from tabulate import tabulate# 定义表头 headers [列1, 列2, 列3]# 每行的内容 rows [] rows.append((张三,数学,英语)) rows.append((李四,信息科技,数学))# 使用 tabulate 函数生成表格 output tabulate(rows, headersheaders, tab…

线程同步--生产者消费者模型

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件变量的使用必须依赖于互斥锁以确保线…

【C语言】- 设置控制台文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API&#xff0c;所以需要包含头文件…