MySQL学习笔记2——基础操作

基础操作

  • 一、增删改查
    • 1、添加数据
    • 2、删除数据
    • 3、修改数据
    • 4、查询语句
  • 二、主键
  • 三、外键和连接
    • 1、外键
    • 2、连接

一、增删改查

1、添加数据

INSERT INTO 表名[(字段名[,字段名])] VALUES (值的列表);
--[]表示里面的内容可选

添加数据分为插入数据记录和插入查询结果

插入数据记录
如果一个字段约束条件为空或者是主键约束有自增,那么在添加数据记录时可以不给它赋值,其他的情况一定要给其赋值。

如果要将一个字段改为非空约束,那么必须先检查已有的数据记录中这个字段是否为空,将为空的记录删除之后再进行改为非空约束的操作。

部分插入一条数据记录是可以的,前提是没有赋值的字段,一定要让MySQL知道如何处理,比如可以为空、有默认值,或者是自增约束字段等等,否则MySQL会提示错误的。

--插入数据
INSERT INTO demo.campus
(
name,
age,
gender
)
VALUES
(
'Mark',
20,
'男'
);
--将字段name修改为非空约束
UPDATE campu SET name = '' WHERE name IS NULL;
ALTER TABLE campus MODIFY name varchar(50) NOT NULL;

插入查询结果
MySQL支持把查询的结果插入到数据表中,我们可以指定字段,甚至是数值,插入到数据表中。语法结构如下:

INSERT INTO 表名(字段名)
SELECT 字段名或值
FROM 表名
WHERE 条件

2、删除数据

删除数据的语法:

DELETE FROM 表名
WHERE 条件

--删除campus表里的所有内容
DELETE FROM demo.campus;

MySQL有一种安全性设置,主要就是为了防止删除或者修改数据时出现误操作,导致删除或修改了不相关的数据。
如对数据的删除或修改操作中必须包含WHERE条件。而且这个WHERE条件中,必须用到主键约束或者唯一性约束的字段。

3、修改数据

UPDATE 表名
SET 字段名=WHERE 条件

4、查询语句

语法结构:

SELECT *|字段列表
FROM 数据源
WHERE 条件
GROUP BY 字段	--经常与MySQL聚合函数一起使用
HAVING 条件		--用于筛选查询结果,跟WHERE类似
ORDER BY 字段
LIMIT 起始点,行数

FROM后面括号中的叫派生部分或子查询,必须给这个派生表用AS取一个别名。举例如下:

SELECT a.goodsname,price
FROM (
SELECT * 
FROM demo.goodsmaster
) AS a;

二、主键

设置数据表主键的三种方式:数据表的业务字段做主键、添加自增字段
做主键,以及添加手动赋值字段做主键。

  • 用业务字段做主键,看起来很简单,但是我们应该尽量避免这样做。因为我们无法预测未来会不会因为业务需要,而出现业务字段重复或者重用的情况。
  • 自增字段做主键,对于单机系统来说是没问题的。但是,如果有多台服务器,各自都可以录入数据,那就不一定适用了。因为如果每台机器各自产生的数据需要合并,就可能会出现主键重复的问题。
  • 我们可以采用手动赋值的办法,通过一定的逻辑, 确保字段值在全系统的唯一性,这样就可以规避主键重复的问题了。

刚开始使用MySQL时,很多人都很容易犯的错误是喜欢用业务字段做主键,想当然地认为了解业务需求,但实际情况往往出乎意料,而更改主键设置的成本非常高。

所以,如果你的系统比较复杂,尽量给表加一个字段做主键,采用手动赋值的办法,虽然系统开发的时候麻烦一点,却可以避免后面出大问题。

三、外键和连接

在MySQL中,为了把2个表关联起来,会用到2个重要的功能:外键(FOREIGN KEY)和连接(JOIN) 。外键需要在创建表的阶段就定义;连接可以通过相同意义的字段把2个表连接起来,用在查询阶段。

1、外键

假设我们有2个表,分别是表A和表B,它们通过一个公共字段" id " 发生关联关系,我们把这个关联关系叫做R。

如果" id " 在表A中是主键,那么,表A就是这个关系R中的主表。相应的,表B就是这个关系中的从表,表B中的"id" ,就是表B用来引用表A中数据的,叫外键。

所以,外键就是从表中用来引用主表中数据的那个公共字段。
在这里插入图片描述
在MySQL中,外键是通过外键约束来定义的。外键约束就是约束的一种,它必须在从表中定义,包括指明哪个是外键字段,以及外键字段所引用的主表中的主键字段是什么。
MySQL系统会根据外键约束的定义,监控对主表中数据的删除操作。如果发现要删除的主表记录,正在被从表中某条记录的外键字段所引用,MySQL就会提示错误,从而确保了关联数据不会缺失。

--创建表时定义外键约束
CREATE TABLE 从表名
(
字段名 类型,
……
--定义外键约束,指出外键字段和参照的主表字段
CONSTRAINT 外键约束名
FOREIGN KEY (字段名) REFERENCES 主表名 (字段名)
)

--通过修改定义外键
ALTER TABLE 从表名 ADD CONSTRAINT 约束名 
FOREIGN KEY 字段名 REFERENCES 主表名 (字段名)

2、连接

在MySQL中,有2种类型的连接,分别是内连接(INNER JOIN)和外连接(OUTER JOIN)

  • 内连接表示查询结果只返回符合连接条件的记录,这种连接方式比较常用;
  • 外连接则不同,表示查询结果返回某一个表中的所有记录,以及另一个表中满足连接条件的记录。

内连接

在MySQL里面,关键字JOIN、INNER JOIN、CROSS JOIN的含义是一样的,都表示内连接。我们可以通过JOIN把两个表关联起来,来查询两个表中的数据。

外连接
跟内连接只返回符合连接条件的记录不同的是,外连接还可以返回表中的所有记录,它包括两类,分别是左连接和右连接。

  • 左连接,一般简写成LEFT JOIN,返回左边表中的所有记录,以及右表中符合连接条件的记录。
  • 右连接,一般简写成RIGHT JOIN,返回右边表中的所有记录,以及左表中符合连接条件的记录。
--内连接
SELECT 字段名
FROM 表名 AS a
JOIN 表名 AS b
ON (a.字段名=b.字段名);

--左外连接
SELECT 字段名
FROM 表名 AS a
LEFT JOIN 表名 AS b
ON (a.字段名=b.字段名);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vuforia+Unity】AR判断当前平台获取点击/触摸坐标点选中识别的二维码跳转网页

实现了:【VuforiaUnity】判断当前平台获取点击/触摸坐标点选中识别的二维码跳转网页 using UnityEngine; using Vuforia; public class BarcodeScanner : MonoBehaviour { public TMPro.TextMeshProUGUI barcodeAsText; string platformNum""; privat…

Java研学-RBAC权限控制(一)

一 权限控制 1 介绍 RBAC(Role-Based Access Control,基于角色的访问控制)是一种流行的权限控制策略,用于实现复杂系统的安全访问管理。它通过将权限与角色相关联,而不是直接与用户相关联,从而简化了权限管…

《QT实用小工具·二十三》 Ntp校时类

1、概述 源码放在文章末尾 该项目实现了 Ntp校时类 ,包含如下功能: 可设置Ntp服务器IP地址。 推荐用默认的阿里云时间服务器 ntp1.aliyun.com 收到时间信号发出。 时间精确到秒。 下面是demo演示: 项目部分代码如下: #if…

组态王与美国罗克韦尔AB PLC之间无线通讯方案详解

组态王与多台美国罗克韦尔AB PLC间的无线通信测试需要用到以下设备: 三菱PLC型号:FX5u 2台 上位机:组态王6.55 1台 达泰欧美系PLC无线通讯终端——DTD418MB 3块 主从关系:1主2从 通讯接口:RJ45接口 供电&…

传统前端 JS 开发者有福了

大家好,春天的百花绽放之际,各个行业也迎来了各自的新生与挑战。有的继续沉下心来夯实基础,有的大力发展出海业务,又或者通过顶级促销套路天女散花般地贩卖高仿保时捷……这厢 Mendix 各位技术小伙伴继续紧跟时代脉搏,…

【linux】拓展知识-linux图形界面(GUI 程序)、X11介绍

linux图形界面 Linux 本身是没有图形化界面的,linux只是一个基于命令行的操作系统,所谓的图形化界面系统只不过中 Linux 下的应用程序。没有图形界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器。 这一点和 Windows 不一样。W…

制作一个RISC-V的操作系统十-Trap和Exception(流 mtvec mepc mcause mtval mstatus trap完整流程)

文章目录 流mtvecmepcmcausemtvalmstatustrap 初始化trap的top half(硬件完成)trap的bottom half(软件完成)从trap返回代码实现 流 控制流:程序控制的执行流 trap分为中断和异常 mtvec base:存储trap入…

python|sort_values()排序

sort_value()可以用来对值(比如说年龄)进行排序 根据 ‘Age’ 列进行升序排序,如果 ‘Age’ 相同则根据 ‘Name’ 列进行降序排序 df_sorted_multi df.sort_values(by[Age, Name], ascending[True, False]) print(df_sorted_multi)

如何在WHM面板上更改主机名

本周有一个客户,购买Hostease的独立服务器并选择了WHM控制面板,询问我们的在线客服,如何在WHM面板上更改主机名。我们为用户提供教程,用户很快完成了设置。在此,我们分享这个操作教程,希望可以对您有帮助。…

SpringBoot内容协商快速入门Demo

1.什么内容协商 简单说就是服务提供方根据客户端所支持的格式来返回对应的报文,在 Spring 中,REST API 基本上都是以 json 格式进行返回,而如果需要一个接口即支持 json,又支持其他格式,开发和维护多套代码显然是不合理…

超图SuperMap-Cesium,地形图层,可以渲染一个或多个地形(地形可缓存DEM,TIN方式),webGL代码开发(2024-04-08)

1、缓存文件类型TIN格式,TIN的地形sct只能加一个 const viewer new Cesium.Viewer(cesiumContainer); viewer.terrainProvider new Cesium.CesiumTerrainProvider({isSct: true, // 是否为iServer发布的TIN地形服务,stk地形设置为falserequestWaterMask : true,…

代理IP在爬虫中的连接复用与开销减少

目录 一、引言 二、代理IP的基本概念 三、代理IP在爬虫中的使用 四、代理IP的连接复用 五、减少开销的策略 六、代码示例与注释 七、总结 一、引言 在爬虫开发中,代理IP的使用是常见的做法,尤其在目标网站设置了反爬虫机制时。代理IP能够帮助爬虫…

小狐狸转账失败,提示gas费过高

做web3开发的时候,明明自己小狐狸里还有2.15的代币,但页面我要转出2.1的时候,明明是够的,而且使用小狐狸提示gas费用是21000,这已经是最小的了,但网页转出到其他账户总是提示失败。而且这个错误非常不好捕获…

二手车的一些经验

买辆二手车是怎样一种体验? - 知乎 买辆二手车是怎样一种体验? - 知乎 作者:jingangdaddy 链接:https://www.zhihu.com/question/28827207/answer/2881156930 来源:知乎 著作权归作者所有。商业转载请联系作者获得授…

c++调python接口

1. 新建run.py文件,并定义相关接口: import numpy as np from scipy.fftpack import fftdef str_add(str1,str2):return int(str1) int(str2)def my_sort(data):data.sort()return datadef aw_fft(data, Fs):N len(data)result np.abs(fft(xdata, n…

HarmonyOS 开发-自定义视图实现Tab效果

介绍 本示例介绍使用Text、List等组件,添加点击事件onclick,动画,animationTo实现自定义Tab效果。 效果预览图 使用说明 点击页签进行切换,选中态页签字体放大加粗,颜色由灰变黑,起到强调作用,同时&…

【C++入门】内联函数、auto与基于范围的for循环

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

非线性滤波相位解缠算法

相位解缠是InSAR数据处理流程中较为关键的步骤,同时也是地表高程模型重建 过程中的主要误差来源之一。迄今为止,针对干涉图的相位解缠问题,已经提出了各 种各样的相位解缠算法,这些算法大致可以分为以下几类:①路径跟踪…

nexus搭建maven与docker镜像的私有仓库

引言 通过nexus搭建maven与docker镜像的私有仓库,实现jar包与镜像动态更新、共享、存储。 一、nexus部署 通过docker-compose部署nexus name: java services:#############################环境#############################env-nexus:restart: always## 3.58.1image: so…

SpringBoot自动装配原理之@Import注解解析

文章目录 1. 概述2. 使用2.1 导入普通Bean2.2 导入配置类2.3 导入 ImportSelector 实现类2.4 导入 ImportBeanDefinitionRegistrar 实现类 3. 区别 1. 概述 当谈及现代Java开发领域中的框架选择时,SpringBoot无疑是无与伦比的热门之选。其简化了开发流程&#xff0…