【MySQL】(基础篇三) —— 创建数据库和表

管理数据库和表

管理数据库

创建数据库

在MySQL中,创建数据库的SQL命令相对简单,基本语法如下:

CREATE DATABASE 数据库名;

如果你想避免在尝试创建已经存在的数据库时出现错误,可以添加 IF NOT EXISTS 子句,这样如果数据库已经存在,MySQL不会报错,而是继续执行后续的命令:

CREATE DATABASE IF NOT EXISTS 数据库名;

如果你想指定数据库的字符集和排序规则,可以使用 CHARACTER SETCOLLATE 子句,例如:

CREATE DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

在这个例子中,utf8mb4 是字符集,支持完整的 Unicode,包括表情符号等4字节字符,而 utf8mb4_unicode_ci 是校对规则,表示不区分大小写。

在命令行工具中,你可以直接输入这些命令来创建数据库。如果你使用的是图形界面工具,如Navicat等,通常会有相应的图形界面操作来帮助你创建数据库,而背后执行的也是类似的SQL命令。

确保在执行这些命令之前,你已经使用正确的用户凭证连接到了MySQL服务器。

【示例】创建一个数据库mysql_study,作为我们日后学习mysql时使用的数据库,设置数据库编码为utf8

CREATE DATABASE mysql_study CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

如果创建之后在navicat中没有显示,右键连接,刷新

在这里插入图片描述

删除数据库

要删除一个数据库,可以使用 DROP DATABASE 命令。如果希望在数据库不存在时避免错误,可以添加 IF EXISTS 选项。

DROP DATABASE IF EXISTS 数据库名;

在数据库中执行删除操作的时候,尤其是删除一整个数据库,你应该非常的谨慎,多确认几遍总不是坏事,或者是提前建立好备份。

备份数据库

在MySQL中,备份数据库通常可以通过逻辑备份和物理备份两种方式进行。以下是这两种方法的具体操作:

逻辑备份

逻辑备份是将数据库中的数据以SQL语句的形式导出到文件中。最常用的工具是mysqldump命令。

使用mysqldump命令备份

mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql
  • -u 后跟数据库用户名。
  • -p 表示需要输入密码,系统会提示你输入。
  • 数据库名 是你要备份的数据库名称。
  • 备份文件名.sql 是你想保存的备份文件名,通常以.sql结尾。

使用图形化工具备份

如果你更倾向于图形界面操作,可以使用MySQL Workbench、Navicat等工具:

  1. 连接到你的数据库。
  2. 寻找“备份”或“导出”功能。
  3. 选择数据库和备份格式(通常是SQL)。
  4. 指定备份文件保存的位置和名称。
  5. 开始备份过程。

【示例】在navicat中备份我们刚创建的数据库mysql_study

在这里插入图片描述

物理备份

物理备份是直接复制数据库的物理文件,如数据文件和日志文件。这种方式通常需要数据库处于锁定或非常有限活动的状态,并且操作较为复杂,一般由专业的数据库管理员执行,或者使用像Percona XtraBackup这样的工具来进行热备份(即在数据库运行时备份)。

管理表

对于数据库内部的表操作(如创建、修改表结构、删除表等),则涉及到另一套命令,包括 CREATE TABLE, ALTER TABLE, DROP TABLE 等。

创建表

列名和数据类型使用空格隔开,而不同列之间使用逗号隔开

CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,...PRIMARY KEY (主键列名)
);

NULL

NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,换句话说,在插入或更新行时,该列必须有值。每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定。请看下面的例子:

CREATE TABLE orders
(cust_id int NOT NULL AUTO_INCREMENT,order_date datetime NOT NULL,order_num int NOT NULL,PRIMARY KEY (cust_id )
) ENGINE=InnoDB;

在navicat中,可以通过右键表——>【设计表】来查看和管理表中的字段信息

在这里插入图片描述

主键

主键值必须唯一。即,表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。作为主键的列,不可以有NULL属性。主键可以在创建表时定义(如这里所示),或者在创建表之后定义.

主键在船建表之后的类似的语句定义:

PRIMARY KEY (列名1[,列名2, 列名3...])

AUTO_INCREMENT

在上面创建orders表的命令中,有一行为:

cust_id int NOT NULL AUTO_INCREMENT,

AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量(从而才有这个关键字AUTO_INCREMENT),给该列赋予下一个可用的值。这样给每个行分配一个唯一的cust_id,从而可以用作主键值。

每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。

覆盖AUTO_INCREMENT 如果一个列被指定为AUTO_INCREMENT,则它需要使用特殊的值吗?你可以简单地在INSERT语句中指定一个值,只要它是唯一的(至今尚未使用过)即可,该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。

那么,如何在使用AUTO_INCREMENT列时获得这个值呢?可使用last_insert_id()函数获得这个值,如下所示:

SELECT last_insert_id()

此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。

默认值

如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。

MySQL不允许使用函数作为默认值,它只支持常量。

许多数据库开发人员使用默认值而不是NULL列,特别是对用于计算或数据分组的列更是如此。

引擎类型

上述建表例子中使用的CREATE TABLE语句全都以ENGINE=InnoDB语句结束。

MySQL有一个具体管理和处理数据的内部引擎。在你使用CREATE TABLE语句时,该引擎具体创建表,而在你使用SELECT语句或进行其他数据库处理时,该引擎在内部处理你的请求。多数时候,此引擎都隐藏在DBMS内,不需要过多关注它。

MySQL具有多种引擎。它打包多个引擎,这些引擎都隐藏在MySQL服务器内,全都能执行CREATE TABLE和SELECT等命令。不同的引擎具有各自不同的功能和特性,为不同的任务选择正确的引擎能获得良好的功能和灵活性。

以下是几个需要常用的引擎:

  • InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
  • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
  • MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

在没有特殊需求(全文搜索等)的要求下,使用默认引擎即可,从MySQL 5.5版本开始,InnoDB成为默认存储引擎。也不需要特别指出。在涉及到这些特殊需求的情况下,我会为你详细讲解

修改表结构

添加列、删除列、修改列定义等

-- 添加列
ALTER TABLE 表名
ADD 列名 数据类型;-- 删除列
ALTER TABLE 表名
DROP COLUMN 列名;-- 修改列定义(列名、数据类型、NULL等)
ALTER TABLE 表名
MODIFY 列名 新数据类型;

使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们。类似地,如果删除了不应该删除的列,可能会丢失
该列中的所有数据。

删除表
DROP TABLE IF EXISTS 表名;

删除表没有确认,也不能撤销,执行这条语句将永久删除该表,请谨慎使用。

重命名表

使用RENAME TABLE语句可以重命名一个表:

RENAME TABLE 旧表名 TO 新表名;

RENAME TABLE所做的仅是重命名一个表。可以使用下面的语句对多个表重命名:

RENAME TABLE backup_customers TO customers,backup_vendors To vendors,backup_products TO products;

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

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

相关文章

数据结构(C):二叉树前中后序和层序详解及代码实现及深度刨析

目录 🌞0.前言 🚈1.二叉树链式结构的代码是实现 🚈2.二叉树的遍历及代码实现和深度刨析代码 🚝2.1前序遍历 ✈️2.1.1前序遍历的理解 ✈️2.1.2前序代码的实现 ✈️2.1.3前序代码的深度解剖 🚝2.2中序遍历 ✈…

计算机网络:数据链路层 - 扩展的以太网

计算机网络:数据链路层 - 扩展的以太网 集线器交换机自学习算法单点故障 集线器 这是以前常见的总线型以太网,他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细铜轴电缆。 后来,以太网发展出来了一种使用大规模…

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor

AgentExecutor 顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…

Springboot使用webupload大文件分片上传(包含前后端源码)

Springboot使用webupload大文件分片上传(包含源码) 1. 实现效果1.1 分片上传效果图1.2 分片上传技术介绍 2. 分片上传前端实现2.1 什么是WebUploader?功能特点接口说明事件APIHook 机制 2.2 前端代码实现2.2.1(不推荐)…

计算机组成原理之计算机系统层次结构

目录 计算机系统层次结构 复习提示 1.计算机系统的组成 2.计算机硬件 2.1冯诺依曼机基本思想 2.1.1冯诺依曼计算机的特点 2.2计算机的功能部件 2.2.1MAR 和 MDR 位数的概念和计算 3.计算机软件 3.1系统软件和应用软件 3.2三个级别的语言 3.2.1三种机器语言的特点 3…

★pwn 24.04环境搭建保姆级教程★

★pwn 24.04环境搭建保姆级教程★ 🌸前言🌺Ubuntu 24.04虚拟机🌷VM🌷Ubuntu 24.04镜像 🌺工具🌷可能出现的git clone错误🌷复制粘贴问题🌷攻击🌷编题 🌺美化&…

【AI大模型】Transformers大模型库(五):AutoModel、Model Head及查看模型结构

目录​​​​​​​ 一、引言 二、自动模型类(AutoModel) 2.1 概述 2.2 Model Head(模型头) 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预…

使用 Keras 的 Stable Diffusion 实现高性能文生图

前言 在本文中,我们将使用基于 KerasCV 实现的 [Stable Diffusion] 模型进行图像生成,这是由 stable.ai 开发的文本生成图像的多模态模型。 Stable Diffusion 是一种功能强大的开源的文本到图像生成模型。虽然市场上存在多种开源实现可以让用户根据文本…

【会议征稿,IEEE出版】第三届能源与电力系统国际学术会议 (ICEEPS 2024,7月14-16)

如今,全球能源行业正面临着前所未有的挑战。一方面,加快向清洁、可再生能源转型是遏制能源环境污染问题的最佳途径之一;另一方面,电力系统中新能源发电、人工智能技术、电力电子装备等被广泛应用和期待,以提高能源可持…

transformer - 注意力机制

Transformer 的注意力机制 Transformer 是一种用于自然语言处理任务的模型架构,依赖于注意力机制来实现高效的序列建模。注意力机制允许模型在处理一个位置的表示时,考虑输入序列中所有其他位置的信息,而不仅仅是前面的几个位置。这种机制能…

ATTCK红队评估(五)

环境搭建 靶场拓扑图: 靶机下载地址: 漏洞详情 外网信息收集 确定目标靶机地址: 发现主机192.168.135.150主机是本次攻击的目标地址。探测靶机开放的端口信息: 目标靶机开放了两个端口:80、3306,那没什么意外的话就是…

每天壁纸不重样~下载必应每日图片

下载必应每日图片 必应不知道你用过没有你下载过必应的图片没有你又没搜索过桌面图片你是不是安装过桌面图片软件你是不是为找一个好看的图片下载过很多桌面软件 必应每日图片 必应每天都会有一张不同的风景图片,画质清晰,而且不收费可以下载使用 但…

重生之我要精通JAVA--第八周笔记

文章目录 多线程线程的状态线程池自定义线程池最大并行数多线程小练习 网络编程BS架构优缺点CS架构优缺点三要素IP特殊IP常用的CMD命令 InetAddress类端口号协议UDP协议(重点)UDP三种通信方式 TCP协议(重点)三次握手四次挥手 反射…

sqlmap直接嗦 dnslog注入 sqllibs第8关

dnslog注入是解决注入的时候没有回显的情况,通过dns外带来进行得到我们想要的数据。 我们是用了dns解析的时候会留下记录,这时候就可以看见我们想要的内容。 这个时候我们还要了解unc路径以及一个函数load_file()以及concat来进行注入。看看我的笔记 unc…

sqli-labs 靶场 less-8、9、10 第八关到第十关详解:布尔注入,时间注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 8 SQLI DUMB SERIES-8判断注入点 当输入id为1时正常显示: 加上单引号就报错了 …

零基础非科班也能掌握的C语言知识19 动态内存管理

动态内存管理 1.为什么要有动态内存分配2.malloc和free2.1 malloc2.2 free 3.calloc和realloc3.1 calloc3.2realloc 4.常见的动态内存的错误4.1对NULL指针的解引用操作4.2对动态开辟空间的越界访问4.3对非动态内存开辟的空间free4.4使用free释放⼀块动态开辟内存的⼀部分4.5对同…

在Anaconda中安装keras-contrib库

文章目录 1. 有git2. 无git2.1 步骤12.2 步骤22.3 步骤3 1. 有git 如果环境里有git,直接运行以下命令: pip install githttps://www.github.com/farizrahman4u/keras-contrib.git2. 无git 2.1 步骤1 打开网址:https://github.com/keras-tea…

Vue3【十四】watchEffect自动监视多个数据实现,不用明确指出监视哪个数据

Vue3【十四】watchEffect自动监视多个数据实现&#xff0c;不用明确指出监视哪个数据 Vue3【十四】watchEffect自动监视多个数据实现&#xff0c;不用明确指出监视哪个数据 进入立即执行一次&#xff0c;并监视数据变化 案例截图 目录结构 代码 Person.vue <template>&…

Java----抽象类和接口

欢迎大家来这次博客-----抽象类和接口。 1.抽象类 1.1 抽象类概念 在Java中我们都是通过类来描述对象&#xff0c;但反过来并不是所有的类都是用来描述对象的。当一个类中没有足够的信息来描述一个具体对象&#xff0c;我们就将该类称为抽象类。 如上图中的Shape类&#xff…

通用Mapper基础学习

一、引入 二、快速入门 1.创建测试数据 2.搭建MyBatis+Spring 开发环境 3.集成Mapper 4.第一个操作 Mapper接口源码介绍: 创建测试类: 三、常见操作