【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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 边缘计算平台 - 6 TOPS 低功耗 RK3576

RK3576 是瑞芯微第二代 8nm 高性能 AIOT 平台,CPU 采用八核大小核构架(4A72 2.2GHz 4A53 1.8GHz),以及一个 M0 协处理器。其 CPU 算力高达 58K DMIPS,足以应对各种复杂计算任务。搭载 Mali-G52 MC3 GPU,14…

vscode软件上安装 Fitten Code插件及使用

一. 简介 前面几篇文章学习了 Pycharm开发工具上安装 Fitten Code插件,以及 Fitten Code插件的使用。 Fitten Code插件是是一款由非十大模型驱动的 AI 编程助手,它可以自动生成代码,提升开发效率,帮您调试 Bug,节省…

【CS.AI】GPT-4o:重新定义人工智能的新标杆

文章目录 1 序言2 GPT-4o的技术亮点3 GPT-4o与前代版本的对比3.1 热门AI模型对比表格GPT-3.5GPT-4GPT-4oBERTT5 3.2 其他 4 个人体验与感受5 结论 1 序言 嘿,大家好!今天要聊聊一个超级酷的AI新突破——GPT-4o!最近,OpenAI发布了…

【报文数据流中的反压处理】

报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中,经常涉及到报文的数据流处理;为了防止数据丢失,和各模块的流水处理;因此需要到反压机制; 反压机制目前接触到的有两种:一是基…

ARM功耗管理框架之SCP

安全之安全(security)博客目录导读 目录 一、功耗管理框架中的SCP 二、SCP的示例 三、SCP固件 四、SCP启动流程 五、SCP的memory map 六、SCP与AP的通信 思考:功耗管理框架?SCP?PPU?LPI?之间的关系&#xff1f…

(三)React事件

1. React基础事件绑定 语法&#xff1a; on 事件名称 { 事件处理程序 }&#xff0c;整体上遵循驼峰命名法 App.js //项目根组件 //App -> index.js -> public/index.html(root)function App() {const handleClick () > {console.log(button被点击了)}return (<…

测试开发之自动化篇 —— 使用Selenium IDE录制脚本!

今天&#xff0c;我们开始介绍基于开源Selenium工具的Web网站自动化测试。 Selenium包含了3大组件&#xff0c;分别为&#xff1a;1. Selenium IDE 基于Chrome和Firefox扩展的集成开发环境&#xff0c;可以录制、回放和导出不同语言的测试脚本。 2. WebDriver 包括一组为不同…

ATTCK红队评估(五)

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

企业如何运用信息化、智能化、数字化等技术手段规避企业合同风险?

在企业运营中&#xff0c;合同管理是至关重要的一环。它涉及到企业的各个方面&#xff0c;从供应链管理到客户关系&#xff0c;从财务交易到法律合规。然而&#xff0c;传统的合同管理方式往往存在效率低下、风险控制不足等问题。 随着信息化、智能化和数字化技术的发展&#…

go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证

什么是JWT JWT,全名为JSON Web Token&#xff0c;是当下主流的一种服务端通信认证方式&#xff0c;具有轻量,无状态的特点&#xff0c;它实现了让我们在用户与服务器之间传递安全可靠的Json文本信息&#xff0c;它的使用过程主要是这样的&#xff1a; 当用户注册的时候&#x…

Linux——nginx部署

部署Nginx 构建Nginx服务器 &#xff08;实验需要DNS支持&#xff0c;或添加hosts条目&#xff0c;例如&#xff1a; &#xff09; 安装Nginx&#xff08;yum安装即可&#xff09; 安装依赖软件包&#xff1a; 重启、启用服务并查看服务状态&#xff1a; 默认页面&#xff0…

【深度学习】深度学习之巅:在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境

【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境 大家好 我是寸铁&#x1f44a; 总结了一篇【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境✨ 喜欢的小伙伴可以点点关注 &#…

模糊控制器实现对某个对象追踪输入

MATLAB是一个十分便捷的软件&#xff0c;里面提供了许多集成的组件&#xff0c;本文利用simulink实现模糊控制器实现对某个对象追踪输入。 这里的对象根据自己的需求可以修改&#xff0c;那么搭建一个闭环控制系统并不是难事儿&#xff0c;主要是对于模糊控制器参数的设置&…

海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(21)Yolov9s测试

四天前yolov9的作者终于开源了yolov9s和yolov9t模型。这个作者之前一直没开源t,s,只有c开始的,而且onnx转换后数据大小特别大,当时直接就放弃测试了。 另外之前代码有很明显的抄v5的痕迹。所以印象很不好。 现在总算是开源t,s模型,而且这里评估的结果上来看是好于yolov8的…

IDEA创建Mybatis项目

IDEA创建Mybatis项目 第一步&#xff1a;创建库表 -- 创建数据库 create database mybatis_db;-- 使用数据库 use mybatis_db;-- 创建user表 CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,email VARC…

Django API开发实战:前后端分离、Restful风格与DRF序列化器详解

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

项目-五子棋双人对战:游戏房间的管理(5)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 之前我们已经实现了玩家匹配的功能, 我们都知道, 匹配完过后就可以进入游戏房间进行对战了, 所以我们下一步关注的重点就是对于游戏房间的管理. 模块详细讲解 功能需求 通过匹配的方式, 自动给玩家加入到一个游戏房间…

通过fiftyone按分类下载open-images-v7数据集,并转成yolov5可直接训练的格式

import osimport fiftyone as fo import fiftyone.zoo as foz import yamlclasses [Person, # 人 - 0Car, # 轿车 - 1Taxi, # 出租车 - 2Ambulance, # 救护车 - 3Bus, # 公共汽车 - 4Bicycle, # 自行车 - 5Motorcycle, # 摩托车 - 6Dog, # 狗 - 7Cat, # 猫 - 8M…

配置免密登录秘钥报错

移除秘钥&#xff0c;执行 ssh-keygen -R cdh2即可 参考&#xff1a;ECDSA主机密钥已更改,您已请求严格检查。 - 简书

构建第一个ArkTS应用之@卡片事件能力说明

ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件&#xff0c;仅在卡片中可以调用。 接口定义&#xff1a;postCardAction(component: Object, action: Object): void 接口参数说明&#xff1…