当前位置: 首页 > article >正文

MySQL - 数据库基础操作

SQL语句

结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。

分类

  • DDL
    • 数据定义语言(Data Definition Language),定义对数据库对象(库、表、列、索引)的操作。
  • DML
    • 数据操作语言(Data Manipulation Language),定义对数据库记录的操作。
  • DQL
    • 数据查询语言(Data Query Language)。
  • DCL
    • 数据控制语言(Data Control Language),定义对数据库、表、字段、用户的访问权限和安全级别。

书写规范

  • 在数据库系统中,SQL语句不区分大小写(关键字建议用大写) 。
  • 字符串常量区分大小写。
  • SQL语句可单行或多行书写,以分号“;”结尾。
  • 关键词不能跨多行或简写。
  • 用空格和缩进来提高语句的可读性。
  • 子句通常位于独立行,便于编辑,提高可读性。
  • 注释
    • SQL标准:多行注释使用”/**/“;单行使用“-- ”。
    • MySQL:“#”。

数据库操作

编码问题

  • 早期MySQL为了兼容像中文这种符号,提供了utf8编码。
  • 现在因为表情包已经需要使用第四个字节存储,所以,utf8不建议使用了,建议使用另一种真正的Unicode编码 — utf8mb4。

MySQL自带的数据库

  • Information_schema

    • 主要存储了系统中的一些数据库对象信息,如用户表信息、列信息、权限信
      息、字符集信息、分区信息等。(数据字典表)
  • performance_schema

    • 主要存储数据库服务器的性能参数。
  • mysql

    • 存储了系统的用户权限信息及帮助信息。
  • sys

    • MySQL5.7新增,之前版本需要手工导入。这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据。
  • test

    • 系统自动创建的测试数据库,任何用户都可以使用。

创建数据库

  • -- 创建数据库。
    CREATE DATABASE 数据库名称;
    
  • -- 创建数据库,同时指定编码。
    CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET 编码;
    
  • -- 创建数据库,同时指定编码和排序规则。
    CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET 编码 COLLATE 排序规则;
    

查询当前处于哪一个数据库

SELECT DATABASE();

查看数据库版本

SELECT VERSION();

查看当前用户

SELECT USER();

以查询SQL语句的方式查看数据库

SHOW CREATE DATABASE 数据库名;

删除数据库

DROP DATABASE 数据库名;-- 一般加上if exists语句,意为如果存在才删除,可以防止报错。
DROP DATABASE IF EXISTS 数据库名;

数据库表操作

创建表

-- 语法。
CREATE TABLE 表名 (字段1 数据类型 [约束条件],字段2  数据类型 [约束条件],……字段n 数据类型 [约束条件]
);-- 同样可以添加判断语句。
CREATE TABLE IF NOT EXISTS 表名 (字段1 数据类型 [约束条件],字段2  数据类型 [约束条件],……字段n 数据类型 [约束条件]
);

查询表中的所有数据

SELECT * FROM 表名;

向表中插入数据

INSERT INTO 表名 VALUES(字段1数据, 字段2数据,  ……,  字段n数据);
-- 这种数据添加方式具有一定缺点,数据的顺序和数量要和字段一样。
INSERT INTO 表名(字段1, 字段n) VALUES(字段1数据, 字段n数据);
-- 这样可以只用输入前面写了字段的数据,没写的其他字段有默认值的取默认值,没有的默认为NULL。

查看表结构

DESC 表名;
-- 此处desc是describe的缩写。
-- 故可以这样写:
DESCRIBE 表名;

以查询SQL语句的方式查看表结构

SHOW CREATE TABLE 表名;

在查询语句后面以 “\G” 结尾,表示纵向显示每行记录。但如果以\G结尾,就不必在语句后加分号了。

删除数据库表

DROP TABLE 表名;
-- 仍然可以加上判断语句
DROP TABLE IF EXISTS 表名;

数据类型

数据库用来存储数据的,而数据存在很多类型,因此MySQL数据提供了很多类型,供开发者使用。

MySQL中的主要数据类型

  • 文本(Text)

    • 数据类型描述
      CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的长度。最多 255 个字符。
      VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的最大长度。最多 255 个字 符。 如果值的长度大于 255,则被转换为 TEXT 类型。
      TINYTEXT存放最大长度为 255 个字符的字符串。
      TEXT存放最大长度为 65535 个字符的字符串。
      BLOB用于 BLOBs (Binary Large OBjects)。存放最多 65535 字节的数据。
      MEDIUMTEXT存放最大长度为 16777215 个字符的字符串。
      MEDIUMBLOB用于 BLOBs (Binary Large OBjects)。存放最多 16777215 字节的数据。
      LONGTEXT存放最大长度为 4294967295 个字符的字符串。
      LONGBLOB用于 BLOBs (Binary Large OBjects)。存放最多 4294967295 字节的数据。
      ENUM(x,y,z,etc.)允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。 这些值是按照输入的顺序存储的。
      SET与 ENUM 类似, SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。
  • 数字(Number)

    • 数据类型描述
      TINYINT(size)-128 到 127 常规。 0 到 255 无符号。在括号中规定最大位数。
      SMALLINT(size)-32768 到 32767 常规。 0 到 65535 无符号。在括号中规定最大位数。
      MEDIUMINT(size)-8388608 到 8388607 普通。 0 到 16777215 无符号。在括号中规定最大位数。
      INT(size)-2147483648 到 2147483647 常规。 0 到 4294967295 无符号。在括号中规定最大位数。
      BIGINT(size)-9223372036854775808 到 9223372036854775807 常规。 0 到18446744073709551615 无符号。在括号中规定最大位数。
      FLOAT(size,d)带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
      DOUBLE(size,d)带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
      DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点。
  • 日期/时间(Date)

    • 数据类型描述
      DATE()日期。格式: YYYY-MM-DD 注释:支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’
      DATETIME()日期和时间的组合。格式: YYYY-MM-DD HH:MM:SS 注释:支持的范围是’1000-01-01 00:00:00’ 到 ‘9999-12- 31 23:59:59’
      TIMESTAMP()时间戳。 TIMESTAMP 值使用 Unix 纪元(‘1970-01-01 00:00:00’ UTC) 至今的描述来存储。格式: YYYY-MM-DD HH:MM:SS
      注释:支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
      TIME()时间。格式: HH:MM:SS 注释:支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’
      YEAR()2 位或 4 位格式的年。
      注释: 4 位格式所允许的值: 1901 到 2155。 2 位格式所允许 的值: 70 到69,表示从 1970 到 2069

数据库约束

约束是在表上强制执行的数据校验规则。

大部分数据库支持下面五类完整性约束:

  • 主键约束

    • 从功能上看相当于非空且唯一,一个表中只允许一个主键,主键是表中唯一确定一行数据的字段。常在表中添加id字段作为主键。

    • 一般建议主键采用“int类型”(id),一般建议由数据库自身维护这个字段的值。

    • 当建立主键约束时,MySQL为主键创建对应的索引,称为主键索引,主键约束名总为PRIMARY。

    • 创建方式

      • CREATE TABLE 表名 (id int PRIMARY KEY
        );
        -- 创建后id字段的值强制非空且唯一,不满足条件的数据插入行为将会报错。
        
      • -- 我们一般将id作为主键,赋予自增的能力。
        CREATE TABLE 表名 (id int PRIMARY KEY AUTO_INCREMENT
        );
        -- 这样写,表示插入一条数据,该数据的id字段默认为上一条数据的id值加1。需要注意的是,既使数据添加失败,id字段也会自增。
        -- 自增情况下,存在自增的字段在添加数据时可以直接写DEFAULT或者NULL。
        
      • -- 除上述主键约束写法外,还存在一种写法。
        CREATE TABLE 表名 (id int AUTO_INCREMENT,PRIMARY KEY(id)
        );
        
  • 唯一约束

    • 唯一约束的作用,是保证该字段的值是唯一的。

    • 唯一性约束条件的字段允许出现一个NULL。

    • 同一张表内可建多个唯一约束。

    • 唯一约束可由多列组合而成。

    • 建唯一约束时MySQL会为之建立对应的索引,称为唯一索引。

    • 如果不给唯一约束起名,该唯一约束默认与列名相同。

    • 两种创建方式

      • CREATE TABLE 表名 (字段 数据类型 UNIQUE
        );
        
      • CREATE TABLE 表名 (字段 数据类型,UNIQUE(字段)
        );
        
  • 默认值约束

    • 给予给定的字段默认值。

    • 创建方式

      • CREATE TABLE 表名 (字段 数据类型 DEFAULT 默认值
        );
        
  • 非空约束

    • 不允许字段的值为空。

    • 创建方式

      • CREATE TABLE 表名 (字段 数据类型 NOT NULL
        );
        
  • 外键约束

    • 用于确保数据完整性和实现表之间关系的一种数据库对象。

MySQL8以后支持检查约束,之前的版本不生效,写了也不报错。

  • 检查约束

    • 添加数据时检查添加数据是否符合给定条件,不符合不允许添加。

    • 两种创建方式

      • CREATE TABLE 表名 (字段 数据类型 CHECK(字段 IN (数据1, 数据2, ……))
        );
        
      • CREATE TABLE 表名 (字段 数据类型,字段 ENUM(数据1, 数据2, ……)
        );
        

修改表的结构

修改字段(列)数据类型

ALTER TABLE 表名 MODIFY 字段 数据类型;
-- 注意存在数据的情况下,修改不一定能成功,因为存在修改的数据类型与表中该字段中存在的数据的数据类型不符等情况。

在表中增加字段(列)

ALTER TABLE 表名 ADD 字段 数据类型;

删除字段(列)

ALTER TABLE 表名 DROP 字段;

修改字段(列)名

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型;

更改表名(两种方案)

ALTER TABLE 旧表名 RENAME 新表名;
RENAME TABLE 旧表名 TO 新表名;

复制表结构和内容

复制表结构(两种方法)

-- 在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中。
CREATE TABLE 新表 LIKE 源表;
-- 在create table语句的末尾添加一个select语句,可以实现将想要的源表的表记录及其字段结构拷贝到新表中。
CREATE TABLE 新表 SELECT */关键字 FROM 源表;

复制表内容

-- 已经存在一张机构一致的表,复制数据。
INSERT INTO 新表 SELECT * FROM 原表;

注意

  • 如果直接复制表结构,则会默认将约束也一起复制。
  • 如果复制表结构的同时,复制数据,则不会复制约束。

数据库字典

由information_schema数据库负责维护。

  • tables
    • 存放数据库里所有的数据表、以及每个表所在数据库。
  • schemata
    • 存放数据库里所有的数据库信息。
  • views
    • 存放数据库里所有的视图信息。
  • columns
    • 存放数据库里所有的列信息。
  • triggers
    • 存放数据库里所有的触发器。
  • routines
    • 存放数据库里所有存储过程和函数。
  • key_column_usage
    • 存放数据库所有的主外键。
  • table_constraints
    • 存放数据库全部约束。
  • statistics
    • 存放了数据表的索引。

相关文章:

MySQL - 数据库基础操作

SQL语句 结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。 分类 DDL 数据定义语言(Data Definition Language),定义对数据库对象(库、表、列、索引)的操作。 DML 数据操作语言(Data Manip…...

​​​​​​Spring Boot热部署插件

在实际开发中,我们修改某些代码或页面都需要重启应用后才能生效,如果每次都手动重启,会降低了开发效率;热部署是指当我们修改代码后,服务能自动重启加载新修改的内容,这样大大提高了我们开发的效率&#xf…...

pip install cryptacular卡住,卡在downloading阶段

笔者安装pip install cryptacular卡在downloading阶段,但不知道为何 Collecting cryptacularCreated temporary directory: /tmp/pip-unpack-qfbl8f08http://10.170.22.41:8082 "GET http://repo.huaweicloud.com/repository/pypi/packages/42/69/34d478310d6…...

AI大模型从0到1记录学习 day09

第 8 章 面向对象之类和对象 8.1 面向过程和面向对象 面向过程编程(Procedural Programming)和面向对象编程(OOP)是两种不同的编程范式,它们在软件开发中都有广泛的应用。 Python是一种混合型的语言,既支持…...

【FW】ADB指令分类速查清单

1. 设备管理 指令核心作用adb devices列出已连接设备adb reboot重启设备adb reboot bootloader进入Bootloader模式adb reboot recovery进入Recovery模式adb root获取Root权限(需设备支持)adb remount挂载系统分区为可读写 2. 应用管理 指令核心作用adb…...

Kafka中的消息是如何存储的?

大家好,我是锋哥。今天分享关于【Kafka中的消息是如何存储的?】面试题。希望对大家有帮助; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中,消息是通过 日志(Log) 的方式进行存储的。…...

Altium Designer——同时更改多个元素的属性(名称、网络标签、字符串标识)

右键要更改的其中一个对象,选择查找相似… 进入到筛选界面,就是选择你要多选的对象的共同特点(名字、大小等等),我这里要更改的是网络标签,所以我选择Text设置为一样。 点击应用就是应用该筛选调节&#…...

当模板方法模式遇上工厂模式:一道优雅的烹饪架构设计

当模板方法模式遇上工厂模式:一道优雅的烹饪架构设计 模式交响曲的实现模板方法模式搭建烹饪骨架(抽象类)具体菜品(子类) 工厂模式 模式协作的优势呈现扩展性演示运行时流程控制 完整代码 如果在学习 设计模式的过程中…...

c++位运算总结

在C中,位运算是对二进制位进行操作的运算,主要有以下几种: 1. 按位与( & ):两个操作数对应位都为1时,结果位才为1,否则为0。例如 3 & 5 , 3 二进制是 0000 0011…...

企业级知识库建设:自建与开源产品集成的全景解析 —— 产品经理、CTO 与 CDO 的深度对话

文章目录 一、引言二、主流产品与方案对比表三、自建方案 vs. 开源产品集成:技术路径对比3.1 自建方案3.2 开源产品集成方案 四、结论与个人观点 一、引言 在当今数据驱动的商业环境中,构建高质量的知识库已成为企业数字化转型的关键一环。本博客分别从…...

Python小练习系列 Vol.6:单词搜索(网格回溯)

🧠 Python小练习系列 Vol.6:单词搜索(网格回溯) 🔍 本期我们来挑战一道 LeetCode 上经典的网格型回溯题 —— 单词搜索,考察对 DFS 状态恢复的掌握! 🧩 一、题目描述 给定一个 m x…...

shell脚本--MySQL简单调用

实现功能 增 数据库的创建,数据表的创建已经实现 创建用户 删 删除数据库, 删除库下的某个表, 删除某个用户 改 暂无 查 查看所有的数据库, 查看某个库下的所有数据表, 查看某个表的结构, 查…...

vue3项目配置别名

vue3项目配置别名 src别名的配置TypeScript 编译配置如果出现/别名引入报找不到的问题 src别名的配置 在开发项目的时候文件与文件关系可能很复杂,因此我们需要给src文件夹配置一个别名!!! // vite.config.ts import {defineCon…...

Rust 面向对象

Rust 面向对象 引言 Rust 是一种系统编程语言,以其高性能、内存安全和并发支持而受到关注。Rust 的面向对象特性是其强大功能之一,它允许开发者以面向对象的方式构建复杂的应用程序。本文将深入探讨 Rust 的面向对象编程(OOP)特性,包括类的定义、继承、封装和多态等概念…...

[ C语言 ] | 从0到1?

目录 认识计算机语言 C语言 工欲善其事必先利其器 第一个C语言代码 这一些列 [ C语言 ] ,就来分享一下 C语言 相关的知识点~ 认识计算机语言 我们说到计算机语言,语言,就是用来沟通的工具,计算机语言呢?就是我们…...

[Mac]利用Hexo+Github Pages搭建个人博客

由于我这台Mac基本没啥环境,因此需要从零开始配置,供各位参考。 注意⚠️:MacBook (M4)使用/bin/zsh作为默认Shell,其对应的配置文件为~/.zshrc 参考文档: HEXO系列教程 | 使用GitHub部署静态博客HEXO | 小白向教程 文…...

pycharm与python版本

python 3.6-3.9 pycharm 2021版本搭配最好 python 3.8 pycharm 2019版本搭配最好 pycharm各版本下载...

Qt在IMX6ULL嵌入式系统中图片加载问题排查与解决

Qt在IMX6ULL嵌入式系统中图片加载问题排查与解决(保姆级教学!) 在使用Qt开发IMX6ULL嵌入式系统的过程中,我遇到了图片加载的常见问题。本文将分享问题排查的详细过程和解决方案,希望能帮助遇到类似困难的开发者。 问题…...

界面控件Telerik和Kendo UI 2025 Q1亮点——AI集成与数据可视化

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET MVC、Kendo…...

pycharm终端操作远程服务器

pycharm项目已经连接了远程服务器,但是打开终端,却依旧显示的是本地的那个环境,也就是说没有操作远程的那个环境。只能再使用Xshell去操作远程环境,很麻烦,找了下教程。 来源:https://blog.csdn.net/maolim…...

接口测试中数据库验证,怎么解决?

在接口测试中,通常需要在接口调用前后查询数据库,以验证接口操作是否正确影响了数据库状态。​这可以通过数据库断言来实现,PyMySQL库常用于连接和操作MySQL数据库。​通过该库,可以在测试中执行SQL语句,查询或修改数据…...

Playwright从入门到实战:比Selenium更快的数据爬取案例实战

摘要 Playwright 是微软开源的下一代浏览器自动化工具,凭借其高性能、跨浏览器支持和现代化设计,迅速成为 Web 自动化领域的热门选择。本文将从 安装配置 开始,通过 实战演练 展示其核心功能,并与 Selenium 深度对比,…...

defconfig配置宏的规则

defconfig配置宏的规则 CONFIG_INETnCONFIG_INETy defconfig里这样配置,CONFIG_INET宏有效吗 在 defconfig 文件中,如果出现了 相同的配置项被定义多次,最终生效的是最后一次出现的值。 🔹 你的配置 bash复制编辑CONFIG_INE…...

day1_Flink基础

文章目录 Flink基础今日课程内容目标为什么要学Flink技术更新迭代市场需求 流式计算批量计算概念特点 批量计算的优势和弊端流式计算生活中流场景流式计算的概念 Flink简介Flink历史Flink介绍 Flink架构体系已学过的框架技术Flink架构 Flink集群搭建Flink的集群模式Standalone模…...

ctf-web: 不统一的解析 + sql注入要求输入与输出相等 -- tpctf supersqli

# 从 django.shortcuts 模块导入 render 函数,用于渲染模板 from django.shortcuts import render # 从 django.db 模块导入 connection 对象,用于数据库连接 from django.db import connection# 此模块用于创建视图函数 # 从 django.http 模块导入 Http…...

基于Java与Go的下一代DDoS防御体系构建实战

引言:混合云时代的攻防对抗新格局 2024年某金融平台遭遇峰值2.3Tbps的IPv6混合攻击,传统WAF方案在新型AI驱动攻击面前全面失效。本文将以Java与Go为技术栈,揭示如何构建具备智能决策能力的防御系统。 一、攻击防御技术矩阵重构 1.1 混合攻击特征识别 攻击类型Java检测方案…...

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候,通常使用easyexcel或者FastExcel,而fastexcel是easy的升级版本,今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表,组织表的字段…...

交换技术综合实验

一、实验拓扑 二、实验要求 内网IP地址使用172.16.0.0/16分配。 SW1和SW2之间互为备份。 VRRP/STP/VLAN/Eth-trunk均使用。 所有PC通过DHCP获取IP地址。 ISP只能配置IP地址。 所有电脑可以正常访问ISP路由器。 三、实验步骤 基于172.16.0.0/16进行划分 172.16.2.0/24&…...

软件工程之软件开发模型(瀑布、迭代、敏捷、DevOps)

1. 瀑布模型(Waterfall Model) 定义与流程 瀑布模型是线性顺序的开发流程,包含需求分析、设计、编码、测试、维护等阶段,每个阶段完成后才能进入下一阶段,类似“瀑布流水”逐级推进。 核心特点 严格阶段划分&#…...

Display Serializer、Camera Deserializer(Camera Des)和SerDes‌ 加解串应用

‌1. 概述:三者的核心定位‌ ‌(1) SerDes(Serializer/Deserializer)‌ ‌定义‌:通用高速数据传输技术,实现‌并行↔串行‌双向转换。‌角色‌:数据链路的“翻译官”,解决并行传输的带宽与距…...