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.字段名);

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

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

相关文章

Patreon是什么?如何用虚拟卡订阅Patreon上的艺术家?详细教程

Patreon是什么? Patreon 是目前世界上最受欢迎的会员平台之一。 它在过去几年中引起了不小的轰动,目前被全球的内容创作者所使用。 内容创作者和艺术家通常很难让粉丝在经济上支持他们。 通过使用像 Patreon 这样的平台,创作者和艺术家可以…

arcgis使用面shp文件裁剪线shp文件报错

水系数据裁剪,输出为空: ArcGIS必会的几个工具的应用 --提取、分割、融合、裁剪(矢)、合并、追加、镶嵌、裁剪(栅)、重采样_arcgis分割-CSDN博客 下面的方法都不行: ArcGIS Clip(裁…

Linux 安装系统可视化监控工具 Netdata

目录 About 监控工具 NetdataLinux 系统安装 Netdata关于 openEuler1、查看内核信息2、查看主机信息3、查看 dnf 包管理器的版本 Netdata 安装1、更新系统环境相关 rpm 包2、查看 netdata 包信息3、安装 netdata 包4、编辑 netdata.conf 配置5、启动 netdata 服务6、查看 netda…

liunx环境变量学习总结

环境变量 在操作系统中,环境变量是一种特殊的变量,它们为运行的进程提供全局配置信息和系统环境设定。本文将介绍如何自定义、删除环境变量,特别是对重要环境变量PATH的管理和定制,以及与环境变量相关的函数使用。 自定义环境变…

李廉洋:4.9黄金屡创新高。黄金原油晚间最新分析建议。

但当下不管是战争因素所带来的避险情绪影响还是美国降息与否所带来的经济影响都无疑还是支撑着黄金继续走高,那么接下来,只要市场不出现较大的利空影响,黄金都不会有较大的回调力度,所以我们当下不管是短线还是长线仍旧以继续看多…

基于SSM+Jsp+Mysql的物流管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

到底有什么是 Node.js 无法实现的?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得 JavaScript 能够脱离浏览器在服务器端运行。Node.js 以其非阻塞 I/O 和事件驱动的特性而广受欢迎,尤其在构建快速、可伸缩的网络应用方面表现出色。然而,尽管 Node.js 非常强…

定制一套ERP系统怎么样?大概要多少钱?

定制一套ERP系统怎么样?大概要多少钱?这篇内容3000字,纯手打。全部都是我们9年来沉淀的实际经验。 作为有9年系统定制开发经验的乙方厂商,定制ERP系统可以粗略划分为3个方向: ERP管理系统模板,可直接查看和…

MySQL中数据库、表的操作

文章目录 一、管理数据库1.1、连接数据库1.2、创建库1.3、选择数据库1.4、修改数据库名称1.5、查看数据库信息1.6、删除库 二、定义数据表字段2.1、数据表字段的数据类型2.2、数据表字段属性2.3、约束讲解2.3.1、约束的定义1)为什么需要约束2)什么是约束…

Matplotlib实现数据可视化

Matplotlib是Python中应用较为广泛的绘图工具之一,首次发布于2007年。它在函数设计上参考了MATLAB,因此名字以"Mat"开头,中间的"plot"代表绘图功能,结尾的"lib"表示它是一个集合。Matplotlib支持众…

Unity多线程简单示例

using UnityEngine; using System.Threading;public class texxxst : MonoBehaviour {Thread thread;void Start(){// 创建一个新的线程,并传入要执行的方法thread new Thread(new ThreadStart(DoWork));// 启动线程thread.Start();}void DoWork(){for (int i 0; …

高颜值高性能的开源免费自托管照片和视频备份方案:Immich

Immich:安全存储您的珍贵记忆,高颜值且高性能的自托管照片与视频备份解决方案,让您随时随地无忧回顾美好时光。- 精选真开源,释放新价值。 概览 在数字化时代,我们的照片和视频越来越多,如何安全、有效地备…

solidworks镜像实体怎么用

在SolidWorks中,镜像实体功能用于复制并反转实体或特征,使其沿着指定的基准面对称。以下是使用SolidWorks镜像实体的基本步骤: 1. 打开模型:首先打开SolidWorks软件,并加载您想要镜像的三维实体模型。 2. 找到镜像命…

揭秘操作系统:核心功能与Linux系统解析

1.引言 在先前探讨中,我们了解到计算机主机内部的硬件资源需要一种高效管控手段,由此催生了操作系统的诞生。操作系统(Operating System,简称OS),是计算机生态系统中不可或缺的核心组件,以其复杂…

TypeScript常用知识点整理

介绍 TypeScript 是 JavaScript 的一个超集,添加了静态类型支持和更多现代编程特性,提高了代码的可靠性和可维护性。最终会被编译成标准的 JavaScript 代码运行。 使用npm install -g typescript进行全局安装 将编写好的ts代码进行运行,第…

加密软件如何给文件加密

加密软件如何给文件加密 市面上有很多给文件加密的软件,它是如何给文件加密的呢?加密过程是否安全,效果是否理想呢?下面以安企神软件为例给大家介绍 给文件加密的关键步骤和技术。 1、选择加密算法 安企神软件可能会采用国际公…

如何彻底删除node和npm

如何彻底删除node和npm 前言: 最近做个项目把本地的node更新了,之前是v10.14.2更新至v16.14.0 ,想着把之前的项目起来下,执行npm install 结果启动不了,一直报npm版本不匹配需要更新本地库异常… 找了几天发现是npm 和…

AI大模型探索之路-基础篇3:构建Chat Completions驱动的多轮对话机器人

文章目录 前言一、初步测试二、读取本地知识库三、问答测试四、实现多轮对话总结 前言 在上一篇《AI大模型应用开发篇之Chat Completions API》中熟悉了 Chat Completions API相关特点和各种场景的使用样例; 本章主要记录如何基于Chat Completions API实现简单的多…

【数据结构与算法】:快速排序和归并排序的非递归实现

1. 递归实现的缺陷 在以前的文章中我们把快速排序和归并排序的递归实现方式进行了介绍,但是在校招面试和在企业的日常开发过程中,仅掌握递归方法是不够的,因为递归也有它的缺陷。 我们知道在函数调用过程中会在内存中建立栈帧,栈…

solidity(3)

地址类型 pragma solidity ^0.8.0;contract AddressExample {// 地址address public _address 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;address payable public _address1 payable(_address); // payable address,可以转账、查余额// 地址类型的成员uint256…