【MySQL入门指南】数据库基础DDL操作

2023-10-27

MySQL库操作

一、SQL语句

  • DDL(data definition language):数据定义语言,用来维护数据表、数据库的属性结构。代表指令有 create/drop/alter
  • DML(data manipulation language):数据操纵语言,用来修改文件内容
  • DCL(Data Control Language):数据控制语言,主要负责数据库的安全和权限管理

​ 在本文中,我们将重点介绍对数据库的增删查改操作。需要注意的是,我们只是修改数据库的属性结构,并没有修改数据库的内容,所以接下来介绍的SQL语句都属于DDL语句。

​ 不同版本的MySQL实际可能会有所不同,本教程所使用地MySQL版本为5.7

二、创建数据库

1.语法
CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET   charset_name] [COLLATE collation_name]

说明:

  • []表示可加可不加
  • CHARACTER SET: 指定数据库采用的字符集。没有则采用配置文件中默认选用的
  • COLLATE: 指定数据库字符集的校验规则。没有则采用配置文件中所默认选用的
  • create、database属于mysql中的关键字。mysql对关键字的大小写不敏感(注意仅仅是对关键字不敏感,但是比如对数据库名,数据表名还是敏感的),为了便于阅读,之后都用小写呈现

(字符集和校验集在后面会介绍)

2.案例
  • 创建一个名为 db1 的数据库

    create database db1;
    
  • 加上 if not exists。只有当目标数据库不存在时才会创建

    image-20230410162253905

  • 创建一个使用 utf-8 字符集的数据库

    create database db2 charset=utf8;  -- 写法1
    create database db2 character set utf8;  -- 写法2
    
  • 创建一个使用 utf-8 字符集,校验集为 utf8_general_ci 的数据库

    create database db3 charset=utf8 collate utf8_general_ci;
    create database db3 charset=utf8 collate=utf8_general_ci;
    
  • 创建一个名字为 create 的数据库。因此create是mysql中的关键字,如果我们需要将以它作为数据库名的话就需要加上 ``。

    create database `create`
    

​ 字符集和校验集如果没有被设置,则采用默认设置的;否则根据就近原则,采用用户所指定的。在一般情况下,都不推荐用户自己设置字符集和校验集

3.极其不推荐的方式

​ 当我们创建一个数据库的时候,在物理层面上,本质就是在 var/lib/mysql 路径下为我们为我们创建对应的文件夹:

image-20230410163949437

​ 如果我们手动的在这个路径下创建目录,虽然也会被mysql识别成数据库,但这样的做法是不推荐的。就好比你的领导的领导直接给你发任务,这样显然乱了套。

image-20230410164141431

image-20230410164214654

三、查看数据库

1.语法
show databases;   -- 显示所有的数据库
show create database db_nams  -- 显示创建一个数据库的指令

image-20230410164522960

image-20230410164354443

四、修改数据库

基本语法:

ALTER DATABASE db_name [alter_spacification……]

常用修改:

  • 修改字符集与校验集

    alter database db1 charset=gbk;
    

    image-20230411193031532

    ​ 对比修改前和修改后,我们发现虽然我们只修改了字符集,编码集也会自动调整为相对应的。而且数据库创建语句也会发生变化

    image-20230411193225025

  • 注意在mysql 5.7下是不支持修改数据库名称的。本身修改数据库名称的行为就是极其不推荐的,在开始时就应该明确,否则容易影响到上层业务。

五、删除数据库

drop database [if exists] db_ name;

删除数据库时,会将数据库中的所有内容都删除。需要慎重!

六、字符集与校验规则

1.是什么
  • 字符集是指用于表示字符的编码规则。在 MySQL 中,字符集决定了如何存储字符数据,以及如何将字符数据传递给客户端。MySQL 支持多种字符集,这些字符集的选择会影响到数据存储的可靠性、数据传输的正确性以及文本比较、排序等操作的结果。​
  • 校验规则是用于规定字符数据的比较方法。在 MySQL 中,校验规则决定了如何比较字符串,包括如何区分大小写、如何对不同字符进行排序等。MySQL 支持多种校验规则,这些规则在不同场合下可能会产生不同的比较结果。正确选择校验规则可以保证数据比较、排序等操作的正确性

image-20230411085554502

数据库文件夹中的 dp.opt 文件就保存着该数据库所采用的字符集和校验集

2.相关指令
  • 查看数据库默认使用的字符集以及校验规则

    show variables like 'character_set_database';
    show variables like 'collation_database';
    

    image-20230411084407360

  • 使用模糊查询看到更多内容

    show variables like 'character%';
    show variables like 'collation%';
    

    image-20230411084550805

  • 查看数据库支持的所有字符集。可以看到每个字符集默认匹配一个校验集

    show charset;
    

    image-20230411084742476

    (部分)

  • 查看数据库支持的所有校验集。一个字符集实际上可以对应多个校验集

    show collation;
    

    image-20230411084936410

3.校验规则的影响

​ 我们在前面提到,校验集用于字符数据之间的比较。校验集的不同也会影响大小写区分和排序等。

  • 创建两个不同字符集的数据库
create database db2 collate utf8_general_ci; -- 不区分大小写	
create database test2 collate utf8_bin; -- 区分大小写	
  • 分别插入以下数据
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
  • 查询结果:
select * from person where name='a';

image-20230411091902442

  • 排序结果
select* from person order by name

image-20230411092130302

七、备份数据库

1.基本语法

​ 我们前面提到,数据库在物理层面上,本质就是 var/lib/mysql路径下的一个文件夹,而数据表则是文件夹中的一个文件。我们要想拷贝一个数据库,虽然也可以粗暴的使用cp指令复制文件夹来实现对数据库的复制,但同样这样的行为是极其不推荐的。

​ MySQL提供了一个命令行工具 mysqldump,专门用来备份和还原mysql数据库。其使用方法如下:

mysqldump -P 3306 -uroot -p password -B database > backup.sql

说明:

  • -P说明mysql服务端的端口号
  • -uroot 等价于 -u root,写法上都可以
  • -p说明数据库的密码
  • -B说明需要备份的数据库名
  • > backup.sql 表示将数据结果重定向到backup.sql文件中,否则会输出到屏幕上

​ 我们从下面的保存结果中不难发现,数据库备份本质上并不是为我们备份具体的数据,而是为我们保存创建数据库的历史SQL语句(MySQL会为我们做优化)。这样做除了可以备份数据本身之外,还可以包含数据库的完整结构、约束、触发器、存储过程等信息,这样在备份还原时可以更好的保证数据的一致性可靠性

image-20230411195515903

复原的方式如下(mysql下的指令):

source xxx  -- 复原xx路径下的文件
2.注意事项
  • 如何只备份数据库中的一张或多张表?

     mysqldump -u root -p 数据库名 表名1 表名2 > /mytest.sql
    
  • 如何同时备份多个数据库

    mysqldump -u root -p -B 数据库名1 数据库名2 ... > /mytest.sql
    
  • 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库(create),然后使用数据库(use),再使用source来还原

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MySQL入门指南】数据库基础DDL操作 的相关文章

  • 显示过去 7 天 PHP 的结果

    我想做的是显示过去 30 天的文章 但我现有的代码不断给我一个 mysql fetch assoc 错误 然后追溯到我的查询 这是代码 sql mysql query SELECT FROM table WHERE DATE datetim
  • 具有 LINQ 支持的最完整的 ORM?

    我正在寻找一个提供完整或接近完整的 LINQ 支持的 ORM LINQ 到 SQL 支持 LINQ 内部的所有内容 Contains Math Log 等 在不创建新数据上下文的情况下无法预先加载关系属性 ADO NET 实体框架 糟糕的
  • 从数据库生成 XML 时出现 PHP 编码错误 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试获取一个简单的 PHP 服
  • 从存储过程中的动态 SQL 获取结果

    我正在编写一个存储过程 需要在过程中动态构造 SQL 语句以引用传入的表名称 我需要让这个 SQL 语句返回一个结果 然后我可以在整个过程的其余部分中使用该结果 我尝试过使用临时表和所有内容 但我不断收到一条消息 提示我需要声明变量等 例如
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 如何打印Oracle中过程的定义?

    oracle中有没有办法查看过程的结构是什么 我正在尝试记录并运行程序 并希望将实际的程序结构存储在我的日志中 您可以查询ALL SOURCE table SELECT text FROM all source WHERE owner lt
  • PreparedStatement setnull方法中Types.INTEGER和Types.NULL的区别

    下面的说法有什么区别 PreparedStatement setNull 1 java sql Types NULL and PreparedStatement setNull 1 java sql Types INTEGER 第一个指示驱
  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • 是否允许在流水线 PL/SQL 表函数中使用 SELECT?

    管道函数的文档指出 在 SQL 语句 通常是SELECT 并且在大多数示例中 管道函数用于数据生成或转换 接受客户作为参数 但不发出任何 DML 语句 现在 从技术上讲 可以使用 SELECT 而不会出现 Oracle 中的任何错误 ORA
  • 如何修复 InterfaceError: 2003: 无法连接到“127.0.0.1:3306:3306”上的 MySQL 服务器(11001 getaddrinfo 失败)

    我的MySQL连接成功但是遇到这个界面错误 import mysql connector db mysql connector connect host 127 0 0 1 3306 user root passwd teja databa
  • 数据表 - 服务器端处理 - 数据库列合并

    我目前正在使用 DataTables 1 10 5 服务器端处理功能 http www datatables net examples data sources server side html http www datatables ne
  • 我可以在一个查询中更新/选择表吗?

    我需要在查看页面时选择数据并更新 视图 列 有没有一种方法可以在一个查询中执行此操作 或者我是否必须使用不同的查询 如果您不想 不需要使用事务 则可以创建一个存储过程 该过程首先更新视图计数 然后选择值并将其返回给用户
  • 消息 102,级别 15,状态 1,第 1 行“ ”附近的语法不正确

    我试图从临时表中查询 但不断收到此消息 Msg 102 Level 15 State 1 Line 1 Incorrect syntax near 有人能告诉我问题是什么吗 是因为要转换吗 查询是 select compid 2 conve
  • 从数据库 MYSQL 和 Codeigniter 获取信息

    如果你们需要其他信息 上一个问题就在这里 从数据库中获取信息 https stackoverflow com questions 13336744 fetching information from the database 另一个更新 尽
  • 更新plpgsql中触发器函数中的多列

    给出以下架构 create table account type a id SERIAL UNIQUE PRIMARY KEY some column VARCHAR create table account type b id SERIA
  • 将多行合并为一行并根据行数附加列

    我正在尝试将同一个表的多行合并为一个 我有一个像这样的示例表 Col1 Col2 Col3 Col4 Col5 Col6 1 BH1 CB 12 CC CC Conveyor Mal 1 BH1 CB 104 ZC ZC Full Emp
  • 高效插入和更新时检查唯一性

    我的员工表中有 2 列 每列值必须是唯一的 staff code staff name staff id staff code staff name 1 MGT Management 2 IT IT staff 当向表中插入或更新项目时 我
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 哪个是识别关系或非识别关系中的子表?

    在表之间的识别和非识别关系的上下文中 MySQL 文档大量将表称为父表和子表 如何判断哪个表是父表 哪个表是子表 子表 A K A 弱实体 http en wikipedia org wiki Weak entity 是一个表 其主键属性d

随机推荐

  • 错误调试-debugger

    在浏览器中调试 在编写更复杂的代码前 让我们先来聊聊调试吧 调试 是指在一个脚本中找出并修复错误的过程 所有的现代浏览器和大多数其他环境都支持调试工具 开发者工具中的一个令调试更加容易的特殊用户界面 它也可以让我们一步步地跟踪代码以查看当前
  • 【数据结构】二叉树

    一 树的基本概念 1 1 树的概念 树是一种非线性的数据结构 它是由n n gt 0 个有限结点组成一个具有层次关系的集合 把它叫做树是因为它看起来像一棵倒挂的树 也就是说它是根朝上 而叶朝下的 有一个特殊的结点 称为根结点 根节点没有前驱
  • vue prop属性使用方法

    Prop作用是在子组件中接收父组件的值 参考
  • 晚上下班之后可以做什么副业,业余时间需要利用起来

    对大多数普通人来说 他们晚上有很多空闲时间 但他们总是在手机上玩游戏 刷视频 白白度过一夜 事实上 近年来 很多朋友都想利用晚上的时间做一些副业 因为目前的工资已经不能满足自己的需求 再加上生活各方面的压力 他们像山一样压着自己 然而 晚上
  • 【机器学习】Numpy手写机器学习算法,3万行代码!

    目录 Numpy手写机器学习算法 一 前言 二 作者简介 三 项目总体介绍 四 手写 NumPy 全家福 五 项目示例 一 前言 NumPy 作为 Python 生态中最受欢迎的科学计算包 很多读者已经非常熟悉它了 它为 Python 提供
  • vue中props数据变化的问题

    发现问题 在vue项目中 父子组件数据传递是最常见的场景 但是今天在开发过程中父级数据传递到子组件 控制子组件的显隐 发现存在问题 一直监听不到数据的变化 详细排查后发现是因为props在传递数据的时候子组件接收到数据后没有及时发生变化导致
  • FatFs文件系统模块的STM32移植操作(基于STM32的SD卡官方例程说明)

    由于想要读取 MP3 文件 故学习一下 FatFs 文件系统 文章介绍了 FatFs 的移植 对移植代码进行了分析 SD卡接口函数还需参照 STM32关于SDIO的控制 控制SD卡 喜暖知寒的博客 CSDN博客 STM32对SD卡的读 写
  • J2ME平台A-RPG游戏怪物寻路算法初探

    最近似乎在手机上A RPG游戏很受欢迎 当然 我最近也在帮公司写一款A RPG类的游戏 以前从没写过这样的游戏 从有到无的写出来了 也碰到不少问题 包括屏幕滚动时地图title数组索引的校验 整个游戏框架的搭建 地图数据的处理 分层的处理
  • webpack5 笔记三,管理输出

    效果 我们在页面上添加一个按钮 点击时会打印 good morning export function sayHi console log good morning how are you const btn document create
  • [云原生专题-64]:核心概念 - 云原生技术助力5G RAN步入”云”霄 - 对云原生的理解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122751639 目录 一 在后5G时
  • 查看IIS日志以及网站对应的IIS日志文件夹

    1 为什么要查看IIS日志 有时 我们在部署了一个程序之后 虽然程序里面记载了log日志 但有些类似503这样的错误在程序里面是无法记载的 所以我们需要通过查看IIS日志来查找问题 2 IIS日志目录 点进去之后 我们发现 IIS日志文件夹
  • JETBRAIN系列IDE改变终端的字体

    简介 JetBrains是一家捷克的软件开发公司 该公司位于捷克的布拉格 并在俄国的圣彼得堡及美国麻州波士顿都设有办公室 该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境 PhpStorm IntelliJ IDEA
  • frame 和iframe 的区别以及和frameset 的关系及应用

    1 frame不能脱离frameSet单独使用 iframe可以 2 frame不能放在body中 如下可以正常显示
  • C#让panel显示滚动条

    AutoScroll True AutoScrollMiniSize 450 450 设置逻辑区域尺寸 如果它大于控件尺寸就会出现滚动条
  • ffmpeg命令行示例

    在视频上覆盖一张照片 ffmpeg i video mkv i image png filter complex 0 v 1 v overlay out map out out mkv 生成5s的lavfi红色的视频 ffmpeg filt
  • mac brew安装 node 踩坑日记- n切换node不生效

    最近用了一个旧电脑开发 发现里面node管理混乱 有nvm n和homebrew 导致切换node 切换不了 开发也有莫名其妙的错误 所以我打算重新装一下node 使用n做为管理工具 1 删除nvm cd rm rf nvm 2 删除n s
  • 日语 五十音图快速记忆法

    平假名 清音 清音 段 段 段 段 段 行 a i u e o 行 ka ki ku ke ko 行 sa shi su se so 行 ta chi tsu te to 行 na ni nu ne no 行 ha hi fu he ho
  • 持久内存服务器大多数数据库管理系统,内存数据库VS传统数据库:如何在多个任务之间共享内存中的数据?...

    内存数据库 IMDB 将计算机数据存储在计算机的主存储器中 而不是磁盘驱动器中 以产生更快的响应时间 访问存储在内存中的数据可节省从磁盘查询数据所需的时间 依赖快速响应时间和实时数据管理的应用程序使用内存数据库 受益于内存数据库的行业包括电
  • PHY芯片的使用(三)在U-boot下网络PHY的移植

    1 概述 以太网 PHY 驱动移植 主要包括 Linux u boot 及设备树等三个方面标准框架下的移植 本文以裕太8511PHY为例展开说明 一般国产芯片厂商会提供在uboot linux下PHY的驱动 在uboot linux的PHY
  • 【MySQL入门指南】数据库基础DDL操作

    文章目录 MySQL库操作 一 SQL语句 二 创建数据库 1 语法 2 案例 3 极其不推荐的方式 三 查看数据库 1 语法 四 修改数据库 五 删除数据库 六 字符集与校验规则 1 是什么 2 相关指令 3 校验规则的影响 七 备份数据