【数据库】MySQL库与表的基本操作

目录

一、数据库概述

1. SQL分类

2. 存储引擎

二、库的操作

1. 创建数据库

2. 字符集与校验规则

3. 查看数据库

4. 修改数据库

5. 删除数据库

6. 查看连接情况

三、表的操作

1. 创建数据表

2. 查看数据表

3. 修改数据表

4. 删除数据表


一、数据库概述

1. SQL分类

  • DDL【Data Definition Language】数据定义语言,用来维护存储数据的结构,                  如:create、drop、alter
  • DML【Data Manipulation Language】数据操纵语言,用来对数据进行操作,                          如:insert、delete、update、select(由DML有细分为DQL负责查询)
  • DCL【Data Control Language】数据控制语言,负责权限管理和事务,                                  如:grant、revoke、commit

2. 存储引擎

存储引擎定义:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎,InnoDB是默认存储引擎。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

二、库的操作

1. 创建数据库

-- 创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specifiction ...]

create_specifiction:
    [DEFAULT] CHARACTER SET charset_name
    [DEFAULT] COLLATE collation_name

-- []是可选项
-- 大小表示关键字
-- CHARATER SET 指定数据库采样的字符集
-- COLLATE 指定数据库字符集的校验规则

2. 字符集与校验规则

-- 查看当前数据库默认的字符集与校验规则
show variables like 'character_set_database';
show variables like 'collation_database';

-- 查看MySQL支持的字符集与校验规则
show charset;
show collation;

-- 查看当前数据库的字符集与校验规则
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
FROM information_schema.SCHEMATA 
WHERE SCHEMA_NAME = 'db_name';
# 我们也可以在数据库的配置文件里查看字符集和校验规则
root@ubuntu:/var/lib/mysql/d1_mytest# cat db.opt 
default-character-set=utf8
default-collation=utf8_unicode_ci
-- 字符集指定了用什么编码方式来存储数据,负责数据的写入
-- 校验规则指定了怎么比较和读取数据,负责数据的读取

-- 有些字符集支持中文编码,有些不支持,utf8 和 gbk 是支持中文的
-- 在 utf8 字符集中,一个中文字符占3字节,但是从数据库的角度来看也只是一个字符

-- 同一个字符集的不同校验规则有可能有不同的排序和查询规则
-- 以 utf8_general_ci 和 utf8_bin 为例,
-- utf8_general_ci 是默认的校验规则,排序和查询不区分大小写
-- utf8_bin 排序和查询会区分大小写

3. 查看数据库

-- 查看数据库
show databases;

-- 显示数据库创建语句
show create database d1_mytest;
show create database d1_mytest\G

-- MySQL 建议我们关键字使用大写,但是不是必须的,小写更直观
-- 数据库名称可用 `` 反引号括住,是为了防止使用的数据库名刚好是关键字

4. 修改数据库

-- 修改数据库
ALTER DATABASE d1_mytest [alter_specification ...]

-- 对数据库的修改主要是指对数据库的字符集、校验规则进行修改
-- 即 alter_specification 是重置字符集和校验规则
mysql> alter database d1_mytest charset=gbk;
Query OK, 1 row affected (0.00 sec)

mysql> SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
    -> FROM information_schema.SCHEMATA 
    -> WHERE SCHEMA_NAME = 'd1_mytest';
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| gbk                        | gbk_chinese_ci         |
+----------------------------+------------------------+
1 row in set (0.00 sec)

5. 删除数据库

-- 删除数据库
DROP DATABASE [IF EXISTS] db_name;

-- 执行删除操作之后:
-- 数据库内部看不到对应的数据库
-- 对应的数据库文件夹被删除,联级删除,里面的数据表全部删除

-- 不要轻易删除数据库!!!
-- 即便是要删除,也一定要做好备份

-- 数据库备份,备份的本质是将构造数据库的 SQL 语句装载进入备份文件
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份的文件路径
-- 在数据库名后面跟多个名字,可以同时备份多个数据库
-- 如果在备份数据库的时候没有加上 -B 选项,那么在恢复数据库时不会自动创建数据库

-- 数据库恢复
mysql> source 数据库备份的文件路径;

-- 如果不备份整个数据库,而是备份其中的一张表,怎么做?
# mysqldump -u root -p 密码 数据库名 表名1 表名2 > 数据表备份的文件路径

6. 查看连接情况

-- 查看连接情况
show processlist;
-- 一个数据库可用由多个用户连接
-- 但是在查看连接情况的时候,只能看到自己权限内的用户连接
-- root 用户可以查看到全部用户的连接

当数据库访问缓慢时,可以查看连接情况进行检查是否是因为数据库遭受非法入侵。

三、表的操作

1. 创建数据表

-- 创建表
CREATE TABLE [IF NOT EXISTS] table_name (
    field1 datatype1,
    field2 datatype2,
    filed3 datatype3
)[engine=InnoDB charset=utf8 collate utf8_general_ci];
-- 在创建表的时候,可以对表的字段进行一些约束,也可以省略
-- 若不指定表的引擎、字符集和校验规则,表会继承数据库的配置

-- 创建表测试
CREATE TABLE IF NOT EXISTS test01 (
    id int,
    name varchar(32),
    age int
)engine=InnoDB charset=utf8 collate utf8_general_ci;

CREATE TABLE IF NOT EXISTS test02 (
    id int,
    name varchar(32),
    age int
)engine=MyISAM charset=gbk;
-- 不同的存储引擎,在数据库目录中的文件个数不同,原因是不同引擎存储的底层数据结构不同
root@ubuntu:/var/lib/mysql/d1_mytest# ll
total 136
drwxr-x--- 2 mysql mysql  4096 Mar 19 23:47 ./
drwx------ 6 mysql mysql  4096 Mar 19 20:58 ../
-rw-r----- 1 mysql mysql    59 Mar 19 23:21 db.opt
-rw-r----- 1 mysql mysql  8614 Mar 19 23:40 test01.frm
-rw-r----- 1 mysql mysql 98304 Mar 19 23:40 test01.ibd
-rw-r----- 1 mysql mysql  8614 Mar 19 23:47 test02.frm
-rw-r----- 1 mysql mysql     0 Mar 19 23:47 test02.MYD
-rw-r----- 1 mysql mysql  1024 Mar 19 23:47 test02.MYI
root@ubuntu:/var/lib/mysql/d1_mytest# 

# 在文件系统中,MyISAM 和 InnoDB 都有 .frm 文件,这个文件存储了表结构
# 在 InnoDB 中,表索引和表数据都存储在 .idb 文件中
# 在 MyISAM 中,表索引和表数据分别存储在 .MYI 和 .MYD 中

2. 查看数据表

-- 查看表
show tables;

-- 查看表结构
desc 表名;
mysql> desc test01;
+--------+--------------+--------+-------+---------+-------+
| Field  | Type         | Null   | Key   | Default | Extra |
+--------+--------------+--------+-------+---------+-------+
| id     | int(11)      | YES    |       | NULL    |       |
| name   | varchar(32)  | YES    |       | NULL    |       |
| age    | int(11)      | YES    |       | NULL    |       |
+--------+--------------+--------+-------+---------+-------+
3 rows in set (0.00 sec)

-- 字段名   字段类型   是否允许为空  索引类型   默认值    扩充

3. 修改数据表

在实际项目中,有可能我们会需要修改表的结构,如字段名称、字段大小、字段类型,或者修改表的配置,如表的字符集、存储引擎等等,或者是增添、删除字段。

但是修改表带来的风险是和删除表相当的,所以在进行修改的时候,特别是涉及到字段的修改,一定要慎重,为了避免修改表带来的风险,最好的方式就是在定义表的时候就决定好表的结构。

-- 修改表名
ALTER TABLE table_name RENAME TO new_name;
-- 修改表名之后,其数据库中对应的文件名也会修改

-- 修改列名
ALTER TABLE table_name CHANGE old_field new_field datatype [DEFAULT expr] ...;
-- 修改列名的时候,新列名需要完整定义,可以重新定义的时候修改列属性

-- 添加字段
ALTER TABLE table_name ADD (column datatype [DEFAULT expr], ...);

-- 修改字段
ALTER TABLE table_name MODIFY (column datatype [DEFAULT expr], ...);

-- 删除字段
ALTER TABLW table_name DROP (column);
mysql> desc test01;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(32) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table test01 add class int comment '班级' after id;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table test01 modify name char(16);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test01;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  |     | NULL    |       |
| class | int(11)  | YES  |     | NULL    |       |
| name  | char(16) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

4. 删除数据表

-- 删除表
DROP [TEMPORARY] TABLE table_name [IF EXISTS] table_name [, table_name] ...;

-- 示例
drop table test_table;

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

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

相关文章

(一)Linux+Windows下安装ffmpeg

一丶前言 FFmpeg是一个开源的音视频处理工具集,由多个命令行工具组成。它可以在跨平台的环境中处理、转换、编辑和流媒体处理音视频文件。 FFmpeg支持多种常见的音视频格式和编解码器,可以对音视频文件进行编码、解码、转码、剪辑、合并等操作。它具有广…

如何在Tomcat中的webapp中手动发布

这里写目录标题 首先进入Tomcat文件夹进入webaaps中,编写Java代码最后进入浏览器打开就看可以进入这个界面了 首先进入Tomcat文件夹 如图: 进入webaaps中, 编写Java代码 最后进入浏览器打开 就看可以进入这个界面了

PX4|基于FAST-LIO mid360的无人机室内自主定位及定点悬停

目录 前言环境配置运行fast-lio修改px4位置信息融合方式编写位置坐标转换及传输节点 前言 在配置mid360运行环境后,可使用mid360进行室内的精准定位。 环境配置 在livox_ros_driver2的上级目录src下保存fast-lio的工程 git clone https://github.com/hku-mars/F…

AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频

第一部分:文本生成视频 1. 文本生成视频概述 随着人工智能(AI)技术的飞速发展,视频制作领域也迎来了创新的浪潮。文本生成视频是其中的一项令人激动的进展,它利用自然语言处理技术将文本内容转化为视频。这项技术在广…

redis和rabbitmq实现延时队列

redis和rabbitmq实现延时队列 延迟队列使用场景Redis中zset实现延时队列Rabbitmq实现延迟队列 延迟队列使用场景 1. 订单超时处理 延迟队列可以用于处理订单超时问题。当用户下单后,将订单信息放入延迟队列,并设置一定的超时时间。如果在超时时间内用户…

默写单词cpp(初学者版本)

笔摔坏了直接使用版:yum:仔细学习版:yum:1.直接使用版:yum:(文件使用规范)(1)文件(2)使用规范 2.仔细学习版。将会讲各个函数的功能和细节。今天太晚了,明天再写。 笔摔坏了 在一个阳光明媚的早晨,我愉快的奋笔疾书,抄…

基于VMware虚拟机安装MacOS BigSur系统

这周用VMWare搞了个MacOS虚拟机,也算是完成初中高中时候的梦想了吧~~(那时候我的电脑配置还很拉跨,带不动虚拟机)~~ 写一篇博客记录一下,当然这也是yonagi04.github.io建站的第一篇新博客 准备工作(VMWare…

c++ 常用函数 集锦 整理中

c 常用函数集锦 目录 c 常用函数集锦 1、string和wstring之间转换 2、经纬度转 xyz 值 互转 3 、获取 根目录下的文件地址 1、string和wstring之间转换 std::string convertWStringToString(std::wstring wstr) {std::string str;if (!wstr.empty()){std::wstring_convert<…

31-Java前端控制器模式(Front Controller Pattern)

Java前端控制器模式 实现范例 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是用来提供一个集中的请求处理机制&#xff0c;所有的请求都将由一个单一的处理程序处理该处理程序可以做认证/授权/记录日志&#xff0c;或者跟踪请求&#xff0c;然后把请求传给…

LabVIEW NV色心频率扫描

LabVIEW NV色心频率扫描 通过LabVIEW软件开发一个能够实现对金刚石氮空位&#xff08;Nitrogen-Vacancy&#xff0c;NV&#xff09;色心的频率扫描系统。系统通过USB协议与硬件设备通信&#xff0c;对NV色心进行高精度的频率扫描&#xff0c;满足了频率在2.6 GHz到3.2 GHz范围…

云原生:重塑未来应用的基石

随着数字化时代的不断深入&#xff0c;云原生已经成为了IT领域的热门话题。它代表着一种全新的软件开发和部署范式&#xff0c;旨在充分利用云计算的优势&#xff0c;并为企业带来更大的灵活性、可靠性和效率。今天我们就来聊一聊这个热门的话题&#xff1a;云原生~ &#x1f4…

DevEco Studio 项目创建

安装DevEco Studio后开始使用&#xff0c;双击桌面DevEco Studio 快捷方式弹出界面&#xff1a; 选择Application —> Empty Ability&#xff0c;点击Next 项目配置 Project name&#xff1a;工程的名称&#xff0c;可以自定义&#xff0c;由大小写字母、数字和下划线组成。…

解锁编程潜能:ChatGPT如何革新软件开发

目录 一、背景 二、功能描述 三、总结 一、背景 在这个飞速发展的数字时代&#xff0c;软件开发的效率和质量成了衡量一个开发者能力的重要标准。随着人工智能技术的不断进步&#xff0c;越来越多的开发者开始寻找能够提升工作效率的新方法。我就是其中之一&#xff0c;最近…

【RabbitMQ | 第一篇】消息队列基础知识

文章目录 1.消息队列基础知识1.1什么是消息队列&#xff1f;1.2消息队列有什么用&#xff1f;&#xff08;结合项目说&#xff09;1.2.1异步处理1.2.2削峰/限流1.2.3降低系统耦合性1.2.4实现分布式事务 1.3消息队列的缺点1.4JMS和AMQP1.4.1 JMS的两种消息模型&#xff08;1&…

海外社交营销为什么用云手机?不用普通手机?

海外社交营销作为企业拓展海外市场的重要手段&#xff0c;正日益受到企业的青睐。云手机以其成本效益和全球性特征&#xff0c;成为海外社交营销领域的得力助手。那么&#xff0c;究竟是什么特性使得越来越多的企业选择利用云手机进行海外社交营销呢&#xff1f;下文将对此进行…

【微服务】Gateway服务网关

文章目录 1、为什么需要网关2、gateway示例1&#xff09;创建gateway服务&#xff0c;引入依赖2&#xff09;编写启动类3&#xff09;基础配置和路由规则4&#xff09;重启测试5&#xff09;网关路由流程图6&#xff09;总结 3、断言工厂4、过滤器工厂4.1.路由过滤器的种类4.2、…

[Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…

unity 学习笔记 4.坐标系

下载源码 UnityPackage 目录 1.基础知识 1.1.世界坐标和局部坐标 1.2.屏幕坐标 2.坐标系转换 3.练习&#xff1a;判断鼠标单击的位置 1.基础知识 1.1.世界坐标和局部坐标 1.2.屏幕坐标 2.坐标系转换 3.练习&#xff1a;判断鼠标单击的位置 步骤&#xff1a; 将脚本挂载到小…

32串口学习

基于之前的GPIO等工程&#xff0c;后面的上手难度就简单多了&#xff0c;主要是相关寄存器的设置。 void USART1_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART1 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph…

在Ubuntu20.04(原为cuda12.0, gcc9.几版本和g++9.几版本)下先安装cuda9.0后再配置gcc-5环境

因为自己对Linux相关操作不是很熟悉&#xff0c;所以因为之前的代码报错之后决定要安cuda9.0&#xff0c;于是先安装了cuda9.0。里面用到的一些链接&#xff0c;链接文件夹时直接去copy它的路径&#xff0c;就不那么容易错了。 今天运行程序之后发现gcc环境不太匹配cuda9.0&am…
最新文章