MySQL的简单介绍
文章目录
- 数据库
- 关系型数据库
- 非关系型数据”
- 数据库的概念和用途
- MySQL数据库服务器、数据库和表的关系
- 数据库的创建和删除
- 表创建
- 表修改
- 常见的数据类型和约束
- 字符串类型
- 日期和时间类型
- PRIMARY KEY使用
- AUTO_INCREMENT使用
- UNIQUE使用
- FOREIGN KEY使用
- SQL语言基础
- SQL语言简介
- SQL分类
- SELECT语句的使用
- INSERT语句的使用
- UPDATE语句的使用
- DELETE语句的使用
- 基本查询
- WHERE子句的使用
- ORDER BY使用
- GROUP BY和HAVING子句使用
- LIMIT和OFFSET子句的使用
MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现隶属于Oracle公司。MySQL以其高性能、可靠性、扩展性和安全性而著称,广泛应用于Web开发、企业应用、数据分析等领域。
数据库
- 数据库是数据的仓库
- 与普通的数据仓库不同的是,数据库依据数据结构来组织数据,因为数据结构的存在,所以看到的数据是条理化的
- 数据库和普通文件系统的区别在与:数据库拥有数据结构,能都快速查找对应的数据
- 常说的MySQL数据库,其实就是MySQL数据库管理系统:数据库管理系统是一个软件,是数据库服务的体现
- 根据数据结构的不同,数据库分为关系型数据库和非关系型数据库
关系型数据库
- 关系型数据库是依据关系模型创建数据库
- 关系模型就是一对一,一对多,多对多等关系模型,关系模型就是存储格式是以行列组成的二维表格,所以一个关系型数据库就是由二维表之间的联系所组成的一个数据组织
- 关系型数据库可以很好的存储一些关系模型的数据,比如老师对应学生的数据(“多对多”),一本书对应多个作者(“一对多”),一个人对应一个身份证号码(“一对一”)
非关系型数据”
由于关系型太大和复杂,所以一般使用“非关系型数据”来表示其他类型的数据库
非关系型的模型比如:
- 列模型:存储的数据是一列一列,关系型数据库以一行作为一个记录,列模型数据库以一列为一个记录
- 键值对模型:存储的数据是一个个键值对,比如name:lisi
- 文档类模型:以一个个文档来存储数据,类似于键值对
数据库的概念和用途
数据库是一个有组织的数据集合,它们被存储在计算机上以便于管理和访问。数据库的主要目的是为了存储和管理数据,同时使数据能够被高效地访问、检索和更新。
数据库的主要用途包括:
- 数据存储和管理:数据库可以帮助组织和存储大量的数据,包括结构化数据(如表格)和非结构化数据(如文本、图片和视频等)。
- 数据访问:数据库可以提供高效的数据访问方式,包括查询、过滤、排序等操作,以便用户能够轻松地检索所需的数据。
- 数据共享:多个用户可以同时访问数据库中的数据,从而实现数据的共享和协作。
- 数据安全性:数据库可以提供安全性控制,包括访问控制和数据加密等,以保护数据的机密性和完整性。
- 数据备份和恢复:数据库可以提供备份和恢复功能,以确保数据的可靠性和完整性。
- 数据分析和挖掘:数据库可以提供高级数据分析和挖掘功能,包括统计分析、数据挖掘和机器学习等,以便用户可以从数据中获得更多的价值。
MySQL数据库服务器、数据库和表的关系
数据库使用步骤:登录MySQL => 创建数据库 => 切换到指定数据库 => 创建表 => 使用表。
关系:数据库服务器 => 数据库 => 表,从左到右为一对多的关系。
数据库的创建和删除
创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name
数据库删除语句:
DROP DATABASE [IF EXISTS] db_name
DEFAULT CHARSET :指定数据库采用的字符集
切换数据库
use db_name;
查看当前使用的数据库
select database();
表创建
要创建一个新的表,需要使用SQL中的CREATE TABLE语句,并指定表名、列名和数据类型等信息。以下是一个基本的创建表的语法示例:
CREATE TABLE [IF NOT EXISTS] students(id VARCHAR(255) PRIMARY KEY,name VARCHAR(255) NOT NULL,age INT,gender VARCHAR(255),clazz VARCHAR(255)
);
PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据表时如果输入该字段的数据为NULL ,就会报错。
加载本地数据:LOAD DATA local INFILE ‘students.txt’ INTO TABLE students FIELDS TERMINATED BY ‘,’ ;
表修改
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法。
-- 增加列
alter table students add length float;
-- 修改列类型,属性
alter table students modify length int not null;
-- 删除列
alter table students drop length;
--修改表的名称
rename table students to student;
--修改列的名称
alter table student change id sid varchar(255);
--修改表的字符集
alter table student character set utf8;
常见的数据类型和约束
数据类型
-
数值类型:INT、BIGINT、FLOAT、DOUBLE,DECIMAL等。
-
字符串类型:CHAR、VARCHAR、TEXT等。
-
日期和时间类型:DATE、DATETIME、TIMESTAMP等。
-
二进制类型:BLOB、LONGBLOB、VARBINARY等。
-
枚举类型:ENUM。
-
集合类型:SET。
约束
- 主键约束(PRIMARY KEY):用于唯一标识表中的每一行数据,通常使用整数类型的列。
- 唯一约束(UNIQUE):保证列中的所有值都是唯一的,可以包含空值。
- 外键约束(FOREIGN KEY):用于定义列与其他表的关系,保证引用完整性。
- 非空约束(NOT NULL):确保列中不包含空值。
- 默认值约束(DEFAULT ):在插入新行时,如果没有指定列的值,则使用默认值。
- 检查约束(CHECK):用于确保列中的值满足特定的条件,可以使用各种表达式和运算符来定义。

字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
字符串类型 主要是:varchar和char, UTF-8:一个汉字=3个字节 GBK:一个汉字=2个字节。

日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR

示例:
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,password VARCHAR(100) NOT NULL,created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,age INT CHECK(age >= 18),address TEXT,role ENUM('admin', 'user') DEFAULT 'user'
);
这个语句将创建一个名为users的表,包含多个列和约束。其中id列是主键,name列是非空字符串,email列是唯一的,password列是非空字符串,created_at列是日期时间类型,updated_at列是日期时间类型,但在更新时会自动更新,age列使用检查约束以确保其值大于等于18,address列是文本类型,role列是枚举类型,且默认值为’user’。
PRIMARY KEY使用
PRIMARY KEY 是一列或一组列,其值唯一标识表中的每一行。一个表只能有一个PRIMARY KEY。在表创建时,可以指定其中的一列为主键,也可以使用多列来组合作为主键。对于多列组合主键,它们的值的组合必须是唯一的。
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),age INT
);
AUTO_INCREMENT使用
AUTO_INCREMENT是一种MySQL特有的属性,它允许一个整数列自动增长,每次插入新行时自动递增。这通常用于为表创建一个唯一的、自动生成的数字标识符。必须将AUTO_INCREMENT属性与INTEGER数据类型一起使用,通常是使用INT或BIGINT数据类型。
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50)
);
在上面的代码中,每次插入一行时,MySQL将自动为id列生成一个新的唯一值,而不需要手动为该列指定一个值。这使得插入新行时更加方便,同时也确保每个行都有一个唯一的标识符。
UNIQUE使用
假设有一个“学生”数据表,其中包含学生ID、姓名和电子邮件地址。为了确保每个学生的电子邮件地址是唯一的,可以在“电子邮件地址”列上创建UNIQUE约束。
CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE
);
在上面的代码中,我们创建了一个名为“students”的数据表,并在“email”列上创建了一个UNIQUE约束。这将确保每个学生的电子邮件地址是唯一的。
FOREIGN KEY使用
假设有一个“订单”数据表和一个“产品”数据表,其中“订单”表包含订单ID、订单日期和产品ID,而“产品”表包含产品ID、产品名称和产品价格。为了确保订单中的每个产品ID都是有效的,可以在“订单”表中为“产品ID”列创建FOREIGN KEY约束,该约束参照“产品”表中的“产品ID”列。
CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(50) NOT NULL,price DECIMAL(8, 2) NOT NULL
);CREATE TABLE orders (order_id INT PRIMARY KEY,order_date DATE NOT NULL,product_id INT,FOREIGN KEY (product_id) REFERENCES products(product_id)
);
在上面的代码中,我们创建了一个名为“products”的数据表和一个名为“orders”的数据表,并在“orders”表中为“product_id”列创建了一个FOREIGN KEY约束。这将确保订单中的每个产品ID都是有效的,并且参照了“products”表中的产品ID列。
SQL语言基础
SQL(Structured Query Language)是一种标准化的关系型数据库管理系统,主要用于管理和查询数据库中的数据。
SQL语言简介
Structured Query Language, 结构化查询语言
非过程性语言
为加强SQL的语言能力,各厂商增强了过程性语言的特征
如Oracle的PL/SQL 过程性处理能力
SQL Server、Sybase的T-SQL
SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能
SQL分类
DDL
- 数据定义语言 - Data Definition Language
- 用来定义数据库的对象,如数据表、视图、索引等
DML
- 数据处理语言 - Data Manipulation Language
- 在数据库表中更新,增加和删除记录
- 如 update, insert, delete
DCL
- 数据控制语言 – Data Control Language
- 指用于设置用户权限和控制事务语句
- 如grant,revoke,if…else,while,begin transaction
DQL
- 数据查询语言 – Data Query Language
SELECT语句的使用
SELECT语法是一种用于查询数据库中数据的SQL语句。其基本语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition;
其中,SELECT关键字用于指定要查询的列,可以使用*代表所有列;FROM关键字用于指定要查询的表;WHERE关键字用于指定查询的条件。
select * from student where sex=’男’;
INSERT语句的使用
INSERT语句用于向数据库中插入新的数据行。其基本语法如下:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
其中,table_name是要插入数据的表名,column1、column2等是表中的列名,value1、value2等是要插入的值。
UPDATE语句的使用
UPDATE语句用于修改数据库中已有的数据行。其基本语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE some_column = some_value;
其中,table_name是要更新数据的表名,column1、column2等是要修改的列名,value1、value2等是要修改的值,WHERE子句是用于指定要更新的行的条件。
DELETE语句的使用
DELETE语句用于删除数据库中的数据行。其基本语法如下:
DELETE FROM table_name
WHERE some_column = some_value;
其中,table_name是要删除数据的表名,WHERE子句是用于指定要删除的行的条件。
注意:如果不指定条件相当于删除表中所有数据
基本查询
基本查询是SQL中最常用的操作之一,它允许用户从数据库表中检索数据。这些查询通常使用SELECT语句来执行。
WHERE子句的使用
模糊搜索
WHERE子句还可以使用LIKE运算符进行模糊搜索。例如:
SELECT * FROM students WHERE clazz like ‘文科%’
返回名字以字母“文科”开头的所有学生。
select * from students where clazz in ('文科一班','文科二班','文科三班');
返回名字以字母”文科一班’,‘文科二班’,'文科三班’的学生。
--BETWEEN AND
select * from students where age BETWEEN 22 AND 24;
返回年龄在22到24的学生
ORDER BY使用
ORDER BY子句用于对查询结果按照一个或多个列进行排序。它接受一个或多个列名或表达式作为参数,并可指定每个列的排序方式(升序或降序)。语法如下:
--ASC:升序,DESC:降序
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...
GROUP BY和HAVING子句使用
GROUP BY子句用于将查询结果按照一个或多个列进行分组,并对每个组进行聚合计算(如COUNT、SUM、AVG等)。语法如下:
SELECT column1, column2, ..., aggregate_function(column_name)
FROM table_name
GROUP BY column1, column2, ...
HAVING子句用于对分组后的结果进行过滤,只返回符合条件的分组。它接受一个或多个聚合函数作为参数,并可指定每个函数的过滤条件。语法如下:
SELECT column1, column2, ..., aggregate_function(column_name)
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
LIMIT和OFFSET子句的使用
LIMIT用于限制查询结果集的行数。其语法如下:
SELECT column1, column2, ...
FROM table_name
LIMIT number;
其中,number是你想要返回的行数。
OFFSET用于指定查询结果集的偏移量。其语法如下:
SELECT column1, column2, ...
FROM table_name
LIMIT number OFFSET offset;
其中,number是你想要返回的行数,offset是从查询结果集的起始位置偏移的行数。
相关文章:
MySQL的简单介绍
文章目录 数据库关系型数据库非关系型数据”数据库的概念和用途MySQL数据库服务器、数据库和表的关系数据库的创建和删除表创建表修改常见的数据类型和约束字符串类型日期和时间类型PRIMARY KEY使用AUTO_INCREMENT使用UNIQUE使用FOREIGN KEY使用 SQL语言基础SQL语言简介SQL分类…...
leetcode 116.填充每个节点的下一个右侧结点指针
1.题目要求: 给定一个二叉树:struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。初始状态下,所有 ne…...
『 Linux 』网络基础
文章目录 协议分层OSI 七层模型TCP/IP 四层(五层)模型网络协议栈与操作系统的联系报文TCP/IP 通讯过程以太网通信的过程以太网的数据碰撞 协议分层 协议分层是计算机网络中奖网络协议进行组织和管理的方法; 通过将网络通信过程分成多个层次,每个层次负责特定的功能从而简化网络…...
Python酷库之旅-第三方库Pandas(070)
目录 一、用法精讲 281、pandas.Series.dt.daysinmonth属性 281-1、语法 281-2、参数 281-3、功能 281-4、返回值 281-5、说明 281-6、用法 281-6-1、数据准备 281-6-2、代码示例 281-6-3、结果输出 282、pandas.Series.dt.tz属性 282-1、语法 282-2、参数 282-…...
第一篇Linux介绍
目录 1、操作系统 2、Windows和Linux操作系统的区别 3、 Linux 的发行版本 4、 linux 分支 5、 Linux 的含义 6、Linux 特点 1、操作系统 常见操作系统有:Windows、MacOS、Unix/Linux。 类 UNIX Windows:其是微软公司研发的收费操作系统ÿ…...
在Windows编程中,MFC\C++中OnCopyData如何传递基础类型数据?
在C中,OnCopyData 并不是一个标准的C库或框架中的成员函数,它更常见于Windows编程中,特别是使用Win32 API或MFC(Microsoft Foundation Classes)时。OnCopyData 是一个在MFC应用程序中常用于处理来自其他应用程序的WM_C…...
10款超好用的图纸加密软件推荐,2024企业常用图纸加密软件分享
在现代企业中,设计图纸和敏感数据的安全性至关重要。一旦图纸泄露,可能会对企业造成不可估量的损失。因此,选择一款高效、可靠的图纸加密软件显得尤为重要。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为保护工程图纸和设计文件安全的软…...
BUUCTF [安洵杯 2019]easy_serialize_php 1
打开题目,看到一串php代码,试着代码审计一下,看一下有用信息 可以看出是通过$_SESSION[img]来读取文件 extract可以将数组中的变量导入当前变量表 也就是说我们可以伪造$_SESSION 数组中的所有数据 这里传递一个参数fphpinfo 先用hackbar进…...
前端面试宝典【CSS篇】【5】
在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…...
stem32江科大自学笔记
江科大B站教程连接:【STM32入门教程-2023版 细致讲解 中文字幕】 系列文章目录 提示:收集stem32江科大自学笔记,方便自己和他人查看 视频对应目录STM32入门教程P1-3 [1-2]&[2-1]1.STM32简介、系统介绍、软件安装P4 [2-2]2.基于标准库(库…...
C++-类与对象基础
一,类的定义 1.1类定义格式 class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为mian类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者…...
嵌入式day20
feof: 检测文件是否到达结尾 ferroe: 检测文件是否发生错误 标准IO之文件定位 fseek() SEEK_END 指向最后一个字节的后一个,继续加,写文件,会将文件扩大 ftell() 获取…...
UE4 SLUA IOS打包报错解决办法
IOS打包报错:Fatal error "lua.h" file not found : SLua Unreal 在IOS远程打包编译的时候 Exteral没有copy过去,导致lua.h文件报错找不到,看了网上也没有写解决办法 错误信息截图: github上也有很多遇到改…...
SpringDI(依赖注入) 以及SpringIOC容器对Bean管理
一、SpringDI(依赖注入) 1.DI依赖注入 1.1 Spring DI的理解 关键字:名词解释 DI( Dependecy Inject,中文释义:依赖注入)是对Ioc概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IoC 容器…...
伯克利Linux系统管理: 脚本编写学习 课堂与实验(系统简洁保姆级学习)
Linux系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 第二章(上) Vim课堂与实验 文章目录 Linux系列文章目录一、前言二、学习内容:2.1 上课内容2.1.1 为什么要学习脚本编写?2.1.2 Bash编程语言2.1.3 SheBang2.…...
探索腾讯云AI代码助手的效能与实用性
前言开发环境配置项目实例应用一:功能介绍二:项目测试FFmpeg二次开发SDL应用加密播放器 帮助提升建议结语 前言 腾讯云的AI代码助手是一款强大的编码辅助工具,利用混元代码大模型技术,提供技术对话、代码补全、代码诊断和优化…...
清华大学终于把Python整理成了《漫画书》
前言 随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?小编这里整理了一套python编程零基础自学教程,清华大佬196小时讲完的,全程干货无废…...
有关Linux操作系统中僵尸进程与孤儿进程的理解
目录 一、僵尸进程(僵死状态)1.概念2.进程PID与退出码3.僵尸进程举例4.僵尸进程的危害5.僵尸进程的解决方案 二、孤儿进程1.概念2.特点3.孤儿进程解决僵尸进程 一、僵尸进程(僵死状态) 1.概念 僵死状态形象点说有点像是没死透的…...
Go语言实现依赖注入
文章目录 前言依赖注入是什么依赖注入的好处是什么结构图应用程序上下文接口上下文管理器暴露的功能使用示例最后 前言 你好,我是醉墨居士,欢迎来到我的博客,今天带领大伙使用Go语言实现依赖自动注入,我们不会使用其它的第三方库…...
不仅能防沉迷游戏的防沉迷软件(Python)
介绍 一个有那么一点功能但是又不太保险的防沉迷工具 我脑子进水了才会写这玩意儿 为了变强,我不择手段(笑出zhu jiao 代码 好像没什么用的设定界面 # -*- coding: utf-8 -*- # Environment PyCharm # File_name login |User Pfolg # 2024/…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
