MySQL - 数据库基础操作

news2025/3/31 21:21:45

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
    • 存放了数据表的索引。

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

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

相关文章

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

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

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

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

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

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

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

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

vue3项目配置别名

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

[ C语言 ] | 从0到1?

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

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

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

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 深度对比,…

day1_Flink基础

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

使用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&…

记录Jmeter 利用BeanShell 脚本解析JSON字符串

下载org.json包(文档说明) #下载地址 https://www.json.org/ # github 地址 https://github.com/stleary/JSON-java # api 文档说明 https://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/com/esri/arcgis/server/json/JSONObject.htmlBeanShell脚本 import…

深入解析音频:格式、同步及封装容器

物理音频和数字音频 物理音频 定义:物理音频就是声音在自然界中的物理表现形式,本质上是一种机械波,通过空气或其他介质传播。例如,当我们说话、乐器演奏或物体碰撞时,都会产生振动,这些振动会引起周围介…

RPCGC阅读

24年的MM 创新 现有点云压缩工作主要集中在保真度优化上。 而在实际应用中,压缩的目的是促进机器分析。例如,在自动驾驶中,有损压缩会显着丢失户外场景的详细信息。在三维重建中,压缩过程也会导致场景数据中语义信息(Contour)的…

医疗CMS高效管理:简化更新维护流程

内容概要 医疗行业内容管理系统(CMS)的核心价值在于应对医疗信息管理的多维复杂性。面对诊疗指南的动态更新、科研数据的快速迭代以及多机构协作需求,传统管理模式往往面临效率瓶颈与合规风险。现代化医疗CMS通过构建结构化权限管理矩阵&…

《Spring Cloud Eureka 高可用集群实战:从零构建高可靠性的微服务注册中心》

从零构建高可用 Eureka 集群 | Spring Cloud 微服务架构深度实践指南 本文核心内容基于《Spring Cloud 微服务架构开发》第1版整理,结合生产级实践经验优化 实验环境:IntelliJ IDEA 2024 | JDK 1.8| Spring Boot 2.1.7.RELEASE | Spring Cloud Greenwich…