数据库的基本知识
目录
- 一、创建数据库和数据表
- 1.1 创建数据库相关代码
- 1.2 创建数据表
- 1.3 约束条件
- 1.3.1 主键约束
- 1.3.2 非空约束
- 1.3.3 唯一性约束
- 1.3.4 默认约束
- 1.3.5 自增字段
- 1.4 手工建表
- 二、数据查询功能
- 2.1 sql 查询的7个关键词
- 2.1.1 select
- 2.1.2 from
- 2.1.3 where
- 2.1.4 group by
- 2.1.5 having
- 2.1.6 order by
- 2.1.7 limit
- 2.2 with语句
- 三、数据库的增删改
- 3.1 数据库的增操作
- 3.2 数据库的删操作
- 3.3 数据库的改操作
数据库的基本知识
数据库的高阶知识
一、创建数据库和数据表
1.1 创建数据库相关代码
#创建数据库相关代码
CREATE DATABASE test; -- 创建名为test的数据库
show CREATE DATABASE test; -- 查看创建好的数据库
show DATABASES; -- 查看所有的数据库列表
use test; -- 使用创建好的数据库
drop DATABASE test; -- 删除数据库
1.2 创建数据表
数据库是由多个数据表构成的,每张数据表中存储着不同的字段,每个字段由不同的字段名和记录构成,并且每个字段有自己的数据结构和约束条件。
在之前创建的test数据库中,创建一个员工信息表emp。
| 部门ID | 部门名称 | 员工数 |
|---|---|---|
| p01 | 财务部 | 20 |
| p02 | 销售部 | 100 |
| p03 | 运营部 | 40 |
-- 使用test数据库
use test;
-- 创建员工信息表
CREATE TABLE emp(depid char(3),depname varchar(20),peoplecount int);
-- 查看表是否创建成功
show tables
-- 删除数据表
drop table emp
1.3 约束条件
约束是在表上强制执行的数据检验规则,用来保证创建的表的数据完整和正确。
mysql数据库常用的约束条件:
| 约束条件 | 说明 | 语法 |
|---|---|---|
| PRIMARY KEY | 主键约束 | 字段名 数据类型 PRIMARY KEY |
| NOT NULL | 非空约束 | 字段名 数据类型 NOT NULL |
| UNIQUE | 唯一约束 | 字段名 数据类型 UNIQUE |
| AUTO_INCREMENT | 自增字段 | 字段名 数据类型 AUTO_INCREMENT |
| DEFAULT | 默认值 | 字段名 数据类型 DEFAULT 默认值 |
1.3.1 主键约束
主键,一列(或一组列),其值能够唯一区分表中每个行。主键约束:保证表中每行记录都不重复。
主键,又称为"主码”,是数据表中一列或多列的组合。 主键的作用就是用来表示一个特定的行,没有主键,更新或者删除表中特定的行会比较困难,因为没有安全的方法保证只涉及相关的行。 使用主键,能够惟一地标识表中的一条记录,并且可以结合外键来 定义不同数据表之间的关系,还可以加快数据库查询的速度。
原则上,表中的任何列都可以作为主键,只需要满足以下条件:
- 任何两行都不具有相同的主键值(唯一)
- 每个行都必须具有一个主键值,且主键值不允许NULL值(非空)
主键分为两种类型:单字段主键和多字段主键。对于单字段主键,主键通常定义在表的一列上,比如:对于下面的员工表来说部门ID就可以作为主键。对于多字段主键,必须保证构成主键的所有列值的组合是唯一的(单个列值可以不唯一)。
# 主键约束
-- 单字段主键
CREATE TABLE emp(depid char(3) PRIMARY KEY,depname varchar(20),peoplecount int);
-- drop table emp
-- 多字段主键
CREATE TABLE emp(depid char(3) PRIMARY KEY,depname varchar(20),peoplecount int,primary key (depid,depname));
1.3.2 非空约束
非空约束,指的是字段的值不能为空。语法:字段名 字段类型 not null
CREATE TABLE emp(depid char(3) PRIMARY KEY,depname varchar(20) not null ,peoplecount int);
1.3.3 唯一性约束
唯一性约束,要求该列的值必须是唯一的,语法:字段名 数据类型 unique;
- 允许为空,但只能出现一个空值;
- 一个表中可以有多个字段声明为唯一值;
- 唯一约束确保数据表的一列或几列不出现重复值
CREATE TABLE emp(depid char(3) PRIMARY KEY,depname varchar(20) not null ,peoplecount int unique);
| 异同点 | 主键 | 唯一键 |
|---|---|---|
| 不同点 | 设置为主键的字段不能为NULL | 可以为NULL |
| 不同点 | 一张表有且仅有一个主键 | 可以有多个唯一键 |
| 相同点 | 设置为主键的字段值不能重复 | 唯一键字段值不能重复 |
| 相同点 | 构造为主键的字段可以是多个 | 唯一键字段值可以是多个 |
1.3.4 默认约束
默认约束,指定某个字段的默认值。如果新插入一条记录时没有为默认约束字段赋值,那么系统就回自动为这个字段赋值为默认约束设定的值。语法:字段名 数据类型 default 默认值
CREATE TABLE emp(depid char(3) PRIMARY KEY,depname varchar(20) not null DEFAULT '-' ,peoplecount int unique);
1.3.5 自增字段
自增字段:一个表只能有一个自增字段,自增字段必须为主键的一部分,默认情况下从1开始自增。
创建含有各种约束条件的数据表
# 创建一个含有各种约束条件的数据表
create table exp (id int primary key auto_increment,fname varchar(4) not null,math int default 0,minmax float unique);
1.4 手工建表
create table fruits(f_id char(10) not null,s_id int not null default 0,f_name char(255),f_price decimal(8,2) not null,primary key(f_id));
insert into fruits(f_id,s_id,f_name,f_price) values ("a1",101,"apple",5.2),("a2",102,"orange",10.2);

二、数据查询功能
2.1 sql 查询的7个关键词
在实际工作中,使用最多的就是数据库的查询功能了,在数据查询过程中,通常会用到以下7个核心关键词:
select <select_list>
from <table_list>
[where <where_condition>]
[group by <group_by_list>]
[having <having_condition>]
[order by <order_by_list> asc|desc]
[limit <limit_number>]
其中,select 和 from 两个关键词时必选项,也就是说,只要是数据查询功能,都需要使用这两个关键词,其他的关键词,可以根据查询实际情况有针对性的选择和使用。二手房数据链接 :https://pan.quark.cn/s/586cf3750a24
create table second_hand_houses(frame char(10) not null,ftype char(255),size int,region char(10) not null,floor int,drection char(10) not null,bulit_data char(10) not null,price_unit int)
2.1.1 select
select主要作用是告诉数据库,在提取数据时需要选择的字段名称。这里的字段名称可以是数据表已经有的名称,也可以是依据已有名称衍生出来的名称。
2.1.2 from
from主要作用就是告诉数据库,在提取数据时需要选择的数据源(数据表)名称,通常select和from两个关键词一起使用
2.1.3 where
#查询北京所有2室1厅的二手房信息
select * from second_hand_houses where ftype = '2室1厅'#查询朝阳区房价单价在10000以上的二手房名称,户型,面积,朝向,楼层
select frame,ftype,size,drection,floor
from second_hand_houses
where region ='朝阳区'
and price_unit>50000
2.1.4 group by
主要用于统计时的分组操作,通常和聚合函数一起搭配使用,主要有以下五种:
| 聚合函数 | 功能 | 说明 |
|---|---|---|
| count | 用于统计记录数 | 函数内传递*,表示统计数据表的记录数;如果是某个字段,则统计字段的记录数,如果需要去重,需在字段前加关键字distinct |
| sum | 用于数值型数据的求和 | 需要注意的是变量求和之后,仍然具有业务含义 |
| avg | 用于数值型数据的均值计算 | 同上 |
| min | 用于计算数值型数据的最小值 | - |
| max | 用于计算数值型数据的最大值 | - |
#查询各地区下二手房数量、总的可居住面积、最大单价
select region,count(*) as counts,sum(size) as tot_size,max(price_unit) as max_price
from second_hand_houses
group by region#查询各地区下每年二手房数量、总的可居住面积、最大单价
select region,bulit_data,count(*) as counts,sum(size) as tot_size,max(price_unit) as max_price
from second_hand_houses
group by region,bulit_data
2.1.5 having
HAVING 用于对分组(GROUP BY)后的结果进行过滤。它通常与聚合函数(如 COUNT、SUM、AVG、MAX、MIN 等)一起使用,用于筛选满足条件的分组。
与 WHERE 的区别:
- WHERE:在分组之前过滤数据,作用于单行记录。
- HAVING:在分组之后过滤数据,作用于分组结果。
#按照地区、户型、楼层和阳台朝向分组统计东城区、朝阳区二手房的平均单价和总数量
select region,ftype,floor,drection,avg(price_unit) as avg_price,count(*) as counts
from second_hand_houses
where region in ("东城区","朝阳区")
group by region,ftype,floor,drection
having avg_price >50000;
2.1.6 order by
用于对查询结果进行排序。你可以指定一个或多个字段,并选择升序(ASC,默认)或降序(DESC)排列。
#按面积降序,单价升序的方式查询所有2室1厅的二手房信息
select * from second_hand_houses
where ftype ="2室1厅"
order by size desc,price_unit
2.1.7 limit
用于限定查询返回的记录行数,可以选择返回前几行,中间几行,或者是末尾几行,需要注意的是这个关键词后面最多可以写两个整数型的值:
limit n:表示返回查询结果的前n行
limit m,n:表示从第m+1行开始,连续返回n行的数据
#查询建筑时间最悠久的前5套二手房
select * from second_hand_houses
order by bulit_data
limit 5#查询出东城区,1980年建的二手房,并且单价在2-3名
select * from second_hand_houses
where region ="丰台区" and bulit_data = "2008"
order by price_unit desc
limit 1,2
2.2 with语句
with语句是 SQL 中用于定义临时结果集的一种语法。它可以让复杂的查询变得更清晰、更易读,并且可以重复使用这些临时结果集。WITH 语句通常用于简化嵌套子查询,或者在递归查询中处理层次结构数据。
WITH cte_name (column1, column2, ...) AS (-- 子查询SELECT ...
)
SELECT ... FROM cte_name;cte_name: CTE 的名称,可以在后续查询中引用。
(column1, column2, ...): 可选项,为 CTE 的结果集指定列名。如果省略,列名将来自子查询的 SELECT 语句。
AS (...): 定义 CTE 的子查询。
使用场景
1、简化复杂查询:
当查询中有多个嵌套子查询时,可以使用 WITH 语句将每个子查询提取为 CTE,使查询更易读。
2、递归查询:
WITH 语句支持递归查询,常用于处理层次结构数据(如组织结构、树形结构等)。
3、重复使用结果集:
如果某个子查询在多个地方被使用,可以将其定义为 CTE,避免重复编写相同的子查询。
WITH order_totals AS (SELECT customer_id, SUM(amount) AS total_amountFROM ordersGROUP BY customer_id
)
SELECT c.customer_name, ot.total_amount
FROM customers c
LEFT JOIN order_totals ot ON c.customer_id = ot.customer_id;
三、数据库的增删改
3.1 数据库的增操作
数据库的增操作主要涉及数据库的增加、数据表的增加、表记录增加以及表字段增加等。数据库的增加非常简单,就是新创建一个数据库;表记录的增加指的就是新增表的数据行,可以是在已有表的基础上增加记录,也可以是将查询结果保存为新的表;字段的增加是指在原有表的基础上新增一些字段。
(1)新建数据库
create database <database_name>
(2)新建表
create table table_name (column_name column_type)
(3)在原有表的基础上增加记录
在表中增加记录的前提是保证原数据表一定存在。
#创建学生信息表
CREATE TABLE stu_info (id INT AUTO_INCREMENT PRIMARY KEY, -- 学生ID,自增主键iname VARCHAR(20), -- 学生姓名gender CHAR(1), -- 性别(M: 男, F: 女)department VARCHAR(10), -- 所属院系age INT, -- 年龄province VARCHAR(10), -- 省份email VARCHAR(50), -- 邮箱mobilephone CHAR(11) -- 手机号(11位)
);
# create table stu_order like stu_info 创建相似的表
INSERT INTO stu_info (iname, gender, department, age, province, email, mobilephone)
VALUES
('周八', 'M', '计算机', 21, '北京', 'zhouba@example.com', '13800138005'),
('武勇', 'M', '生物', 21, '浙江', 'wuyong@example.com', '13800138049');
(4)增加列
alter table stu_info add column hobby char(20) default 0
3.2 数据库的删操作
数据库的删操作主要包含数据库的删除、数据表的删除、表记录删除、字段删除类型。数据库的删除就是直接删掉整个数据库;表记录的删除是指按照某些条件删除数据表中的记录,或者直接清空数据表的所有记录;字段的删除与字段的增加恰好相反,就是根据实际情况将表中某些字段删掉。
(1)数据库删除
drop database <databsae_name>
(2)数据表删除
drop table <table_name>
(3)按条件删除表记录
#删除学生表在,名为“张三“和”李四”的记录
delete from stu_info #保留自增字段记录;如果需要删除部分数据或需要事务支持,使用 DELETE。
where iname in("张三","李四") #删除学生表中email 字段
alter table stu_info drop email#truncate #彻底清除字段表;如果需要快速清空整个表,使用 TRUNCATE
truncate table stu_info
3.3 数据库的改操作
数据库的改操作主要是指修改表中错误记录、修改字段类型以及修改表名称、字段名称等。
(1) 修改表名
alter table stu_info rename to stu_summary
(2)修改字段
alter table stu_info rename to stu_summary
(3)修改字段类型
alter table stu_summary change age age varchar(10)
alter table stu_summary change gender sex varchar(10)alter table stu_summary modify column age varchar(10)
desc stu_summary #查看表字段类型
(4)修改单个记录
update stu_summary set email='zhangyong@163.com' where iname ='张勇'
相关文章:
数据库的基本知识
目录 一、创建数据库和数据表1.1 创建数据库相关代码1.2 创建数据表1.3 约束条件1.3.1 主键约束1.3.2 非空约束1.3.3 唯一性约束1.3.4 默认约束1.3.5 自增字段 1.4 手工建表 二、数据查询功能2.1 sql 查询的7个关键词2.1.1 select2.1.2 from2.1.3 where2.1.4 group by2.1.5 hav…...
失败的面试经历(ʘ̥∧ʘ̥)
一.面向对象的三大特性 1.封装:将对象内部的属性私有化,外部对象不能够直接访问,但是可以提供一些可以使外部对象操作内部属性的方法。 2.继承:类与类之间会有一些相似之处,但也会有一些异处,使得他们与众…...
【Jmeter】使用教程
下载及安装 参考链接: JMeter下载及安装(附插件及中文包超详细) 参考链接: 【Jmeter】win 10 / win 11:Jmeter 下载、安装、汉化、新机迁移、版本更新(Jmeter 4 以上版本均适用) 分辨率的调整 参考链接: Jmeter5.3字…...
Android 7 及以上夜神模拟器,Fiddler 抓 https 包
文章目录 问题描述解决方案环境准备操作步骤1、导出 Fiddler 证书并修改成 .pem 和 .0 文件2、修改夜神模拟器配置3、打开夜神模拟器设备的 USB 调试选项4、将0725b47c.0证书放入夜神模拟器系统证书目录5、夜神模拟器 cmd 环境配置6、给 0725b47c.0 证书赋予权限7、打开 fiddle…...
全国医院数据可视化分析系统
【大数据】全国医院数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 🏥 项目名:医疗导航神器!——《基于大数据的微医挂号网医院数据可视…...
音视频入门基础:RTCP专题(1)——RTCP官方文档下载
一、引言 实时传输控制协议(Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议(RTP)的一个姐妹协议。RTCP由《RFC 3550》定义(取代废弃的《RFC 1889》)。RTP使用一个…...
蓝桥杯专项复习——结构体、输入输出
目录 结构体:排序 输入输出 结构体:排序 [NOIP2007]奖学金 #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N310; int n;struct Student {int chinese,math,eng,sum;int idx; }Stu[N];//定…...
工作记录 2017-01-06
工作记录 2017-01-06 序号 工作 相关人员 1 协助BPO进行Billing的工作。 修改CSV、EDI837的导入。 修改邮件上的问题。 更新RD服务器。 郝 修改的问题: 1、 In “Full Job Summary” (patient info.), sometime, the Visit->Facility is missed, then …...
探索 Rust 高效 Web 开发:Hyperlane 框架深度解析
探索 Rust 高效 Web 开发:Hyperlane 框架深度解析 在当今的 Web 开发领域,追求高性能、轻量级的框架一直是开发者们的不懈追求。对于 Rust 语言开发者而言,Hyperlane 框架正以其独特的魅力崭露头角,为构建现代 Web 服务提供了一种…...
LLM(2):准备构建 LLM
在了解大语言模型一文中,对 LLM 做了初步介绍,本文接续前一篇文章的内容,简要介绍 LLM 的应用和构建过程。 1.2 LLM 的应用 由于大型语言模型(LLMs)在解析和理解非结构化文本数据方面具备先进能力,它们在…...
pytest+allure+jenkins
本地运行参考:pytestallure 入门-CSDN博客 jenkins运行如下: 安装插件:allure 配置allure安装目录 配置pytest、allure 环境变量 配置流水线 进行build,结果如下 ,点击allure report 查看结果...
[蓝桥杯]花束搭配【算法赛】
题目链接 题意 n朵花 每朵花有两个属性a,b 如果两朵花满足 a i a j > b i b j a_ia_j>b_ib_j aiaj>bibj 就称为完美方案 求一共有多少种完美方案 ( i , j ) 与 ( j , i ) (i,j)与(j,i) (i,j)与(j,i)视为不同组合 思路 数据范围 1 ≤ n ≤ 2 1 0 5 1\…...
大模型架构全景解析:从Transformer到未来计算范式
1. Transformer 架构 核心模型 GPT-4、BERT、T5、LLaMA、通义千问、文心ERNIE 关键技术 多头注意力:GPT-4 使用 96 头注意力位置编码创新:LLaMA 采用 RoPE(旋转位置编码),Claude 3 引入 ALiBi归一化优化࿱…...
【linux篇】--linux常见指令
文章目录 一、Linux基本概念 二、Linux入门 1.目录结构 2.Linux命令 *Linux基础命令 ls命令的选项: 3.目录切换相关命令(cd & pwd) 4.相对&绝对路径和特殊路径符 4.1相对路径 4.2绝对路径 4.3 你特殊路径符 5.创建目录命令(mkdir) 6.…...
Kubernetes的组成和架构
Kubernetes(K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它由多个组件组成,这些组件可以分为两类:控制平面(Control Plane)组件和节点(Node࿰…...
ElementUI 表格中插入图片缩略图,鼠标悬停显示大图
如何在 ElementUI 的表格组件 Table 中插入图片缩略图,通过鼠标悬停显示大图?介绍以下2种方式: 方法1:直接在模板元素中插入 <template><el-table :data"tableData"><el-table-column label"图片…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-1-常用命令速查表-集群健康检查、索引生命周期管理、故障诊断命令
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-常用命令速查表 1-Elasticsearch 运维命令速查表(集群健康检查、ILM管理、故障诊断)一、集群健康检查与监控1.1 集群健康状态核心命令1.2 节点级健康诊断…...
PlainUSR|LIA: 追求更快的卷积网络实现高效的超分辨率重建
PlainUSR|LIA: 追求更快的卷积网络实现高效的超分辨率重建 引言 在深度学习领域,图像处理始终是一个热门话题。而超分辨率重建(Super-Resolution Reconstruction, SR)作为其中一个重要的研究方向,旨在通过算法将低分辨率图像恢复…...
Linux 命令学习记录
Linux 命令详解与进阶指南 Linux 是一种广泛使用的开源操作系统,掌握 Linux 命令是开发者和系统管理员的必备技能。本文将详细介绍 Linux 的常用命令,并涵盖一些高级进阶技巧,帮助你更高效地使用 Linux。 目录 基础命令 文件与目录操作文本…...
Android之RecyclerView列表拖动排序
文章目录 前言一、效果图二、实现步骤1.xml布局2.activity代码3.adapter 总结 前言 随着需求的变化,很多地方需要加拖动改变顺序的需求,用RecyclerView就可以实现列表拖动排序,列如像朋友圈图片拖动排序,或者音乐播放器列表拖动排…...
C# WPF 基础知识学习(一)
一、WPF 简介 Windows Presentation Foundation(WPF)是微软推出的一款用于构建用户界面的框架,它为开发 Windows 桌面应用程序提供了统一的编程模型、语言和框架。WPF 将用户界面的设计与业务逻辑分离开来,采用了 XAML࿰…...
MATLAB基于ResNet18的交通标志识别系统
1. 数据准备 数据集:该数据集包含了大量标注好的交通标志图片,每类标志都有不同的样本。数据预处理:图像需要进行一些基本的预处理,如调整大小、归一化等,以适应ResNet18的输入要求。 2. 网络设计 使用MATLAB自带的…...
CSS3-流星雨
1. 绘制标签 <div class"container"><span></span> </div>2. 设置div背景 在百度上搜索一幅星空的图片 <style>* {/* 初始化 */margin: 0;padding: 0;}body {/* 高度100% */height: 100vh;/* 溢出隐藏 */overflow: hidden;}.contai…...
数学建模 第一节
目录 前言 一 优化模型的类型 二 线性规划1 线性规划2 三 0-1规划 总结 前言 数学建模主要是将问题转化为模型,然后再以编程的形式输出出来 算法都知道,数学建模也需要用到算法,但是不是主要以编程形式展示,而是…...
平方矩阵问题
Ⅰ 回字形二维数组 #include <iostream> #include <iomanip> using namespace std; int main(){int n;while(cin>>n,n){for(int i0; i<n;i){for(int j0; j<n; j){int upi, downn-i1, leftj, rightn-j1;cout<<min(min(up,down),min(left,right)…...
自动化立体仓库堆垛机HMI屏幕程序施耐德HMIGXU系列 Vijeo Designer功能设计
堆垛机HMI屏幕功能概况 在自动化立体仓库堆垛机的HMI屏幕程序里,有着施耐德HMIGXU系列Vijeo Designer功能设计。此HMI程序运用标准的工程组织结构,凭借拖拽方式迅速构建人机交互界面。 其主要功能涵盖:设备参数、设备状态、手动/自动操作控制、报警显示、IO信息监控等模块…...
孤儿进程与僵尸进程:Linux进程管理中的“隐形杀手”与“无主孤儿”
在Linux系统中,进程的生命周期管理是系统稳定运行的关键。其中,孤儿进程和僵尸进程是两种特殊状态,它们看似相似却暗藏玄门。本文将从定义、区别到处理方法,揭开它们的神秘面纱。 一、孤儿进程:被“遗弃”的孩子&…...
信息系统运行管理员教程6--信息系统安全
信息系统运行管理员教程6–信息系统安全 第1节 信息系统安全概述 1.信息系统安全的概念 信息系统安全是指保障计算机及其相关设备、设施(含网络)的安全,运行环境的安全,信息的安全,实现信息系统的正常运行。信息系统…...
实验- 分片上传 VS 直接上传
分片上传和直接上传是两种常见的文件上传方式。分片上传将文件分成多个小块,每次上传一个小块,可以并行处理多个分片,适用于大文件上传,减少了单个请求的大小,能有效避免因网络波动或上传中断导致的失败,并…...
训练数据重复采样,让正负样本比例1:1
详细解释 resample 函数: resample 函数来自 sklearn.utils,用于从数据集中重新抽样。replaceTrue 表示允许重复抽样,即同一个样本可以被多次选中。n_samples 指定抽样的数量。 确保训练集数量相同: 通过 resample 函数ÿ…...
