MySQL:库表操作

MySQL:库表操作

    • 库操作
      • 查看
      • 创建
        • 字符编码集
      • 删除
      • 修改
      • 备份
    • 表操作
      • 创建
      • 查看
      • 删除
      • 修改


库操作

查看

  • 查看存在哪些数据库:
show databases;

示例:

在这里插入图片描述

  • 查看自己当前处于哪一个数据库:
select database();

示例:

在这里插入图片描述

此处由于我不处于任何一个数据库中,此处值为NULL

  • 查看当前有哪些用户连接到了MySQL
show processlist;

示例:

在这里插入图片描述


创建

  • 创建一个数据库

语法:

create database [if not exists] 数据库名;

[if not exists]:如果数据库存在,就不创建该数据库。

示例:

在这里插入图片描述

此时就创建了blog_db数据库,可以通过show databases查看。

一个数据库,对操作系统而言,本质就是一个目录,在我的ubuntu主机下,数据库存储在了/var/lib/mysql目录下,这个路径会因为MySQL版本以及操作系统而不同。

此时我的/var/lib/mysql目录下,也同步出现了blog_db目录:

在这里插入图片描述


字符编码集

MySQL中,数据库有两种字符编码集合:

字符集:字符存储时,采用的编码方式
校验集:字符读取时,采用的编码方式

查看系统支持的字符集

show charset;

示例:

在这里插入图片描述

  • 查看系统支持的校验集
show collation;

示例:

在这里插入图片描述

此时系统就列出了支持的各种集合,比如utf8

可以在创建数据库时,指定使用的字符集与校验集

  • 指定字符集
create database [if not exists] 数据库名 charset=xxx;
create database [if not exists] 数据库名 character set xxx;

以上两种方式,都可以指定字符集为xxx

  • 指定校验集
create database [if not exists] 数据库名 collate xxx;

示例:

执行create database db_1 charset=utf8 collate utf8_general_ci

在这里插入图片描述

该指令创建了数据库db_1,并指定字符集utf8校验集utf8_general_ci

在数据库对应的目录中,会存在一个文件dp.opt,其内部存储了数据库对应的校验集字符集

在这里插入图片描述

当然,如果你不指定字符集校验集,此时会使用系统默认的。

查看系统默认的字符集

show variables like 'character_set_database';

示例:

在这里插入图片描述

即默认的字符集utf8

  • 查看系统默认的校验集
show variables like 'collation_database';

示例:

在这里插入图片描述

即默认的校验集utf8_general_ci


删除

  • 删除数据库:
drop database [if exists] 数据库名;

示例:

在这里插入图片描述


修改

修改数据,主要是指修改数据库使用的字符集校验集

  • 修改字符集
alter database 数据库名 charset=xxx;

示例:

在这里插入图片描述

  • 修改校验集
alter database 数据库名 collate xxx;

示例:

在这里插入图片描述


备份

  • 拷贝数据库指令
mysqldump -P 端口号-u 用户名 -p 密码 -B 数据库名 > 数据库备份存储的文件路径

注意:该指令要在bash中执行,而不是数据库中。

比如备份bit_index数据库:

mysqldump -B bit_index > ~/test/bit_index.sql

上述指令指定了一个名为bit_index 数据库,将其保存在路径~/test/bit_index.sql

此时在对应路径下,就产生了对应.sql文件:

在这里插入图片描述

通过vim查看一下sql内部的数据:

在这里插入图片描述

可以发现:.sql文件并不是简单的拷贝一份数据库,而是保留了整个数据库的SQL语句

  • 还原数据库
source 路径.sql;

该指令要在MySQL内部执行,而不是命令行。


表操作

接下来学习如何操作一个数据库内部的表。

  • 进入/切换 数据库:
use 数据库名;

示例:

在这里插入图片描述

如图,我创建了一个名为box_he的数据库,随后执行use box_he进入了该数据库,通过select database()查看当前所处的数据库,可以看到当前确实处于box_he中。


创建

  • 创建一个表:
create table [if not exists] 表名 (field1 datatype,field2 datatype,field3 datatype
) character set 字符集 collate 校验集 engine 存储引擎;
  • [if not exists] :可省略,如果不存在这个表,才创建
  • field:列名
  • datatype:该列的数据类型
  • character set:指定字符集,若没有指定,与数据库使用的字符集一致
    • 也可写为:charset=字符集
  • collate:指定校验集,若没有指定,与数据库使用的校验集一致
  • engine:指定存储引擎
    • 也可写为:engine=存储引擎

注意事项:

  1. 每一个列后面都有一个逗号,但是最后一个没有
  2. 整个语句末尾有分号

示例:

在这里插入图片描述

我创建了一个表t1,内部有id列,类型是intname列,类型是varchar(20);字符集为utf8;校验集为utf8_general_ci;存储引擎是MyIsam

此时在/var/lib/mysql下的boe_he目录下,出现了三个文件:t1.frmt1.MYDt1.MYI这三个文件共同维护了t1这张表。

在这里插入图片描述

可见:数据库中的表的本质,就是多个文件

而不同存储引擎,对一张表的存储形式不同,比如创建一个同样结构的表,使用InnoDB存储引擎:

在这里插入图片描述

路径/var/lib/mysql/box_he下:

在这里插入图片描述

可以看到,同样的表结构InnoDB,存储t2只使用了两个文件t2.frmt2.ibd。关于存储引擎的具体内容会在索引部分讲解。现在只需要了解:不同存储引擎,对表的存储存在差别即可。


查看

  • 查看当前数据库下有哪些表:
show tables;

示例:

在这里插入图片描述

此处的t1t2也就是刚刚创建的两个表。

  • 查看表的结构:
desc 表名;

示例:

在这里插入图片描述

各个字段含义如下:

  • Field:列名
  • Type:列的数据类型
  • Null:该列是否允许为空
  • Key:索引类型
  • Default:默认值
  • Extra:扩充
  • 查看建表时的语句:
show create table 表名;

示例:

在这里插入图片描述

执行语句后,展示了创建表t1时的语句,直接执行该语句,格式比较混乱,一般来说建议将末尾的分号;改为\G

show create table 表名 \G

这个\G可以将数据以更加直观的方式展示出来:

在这里插入图片描述

建表的语句与我们输入的语句略有出入,这是因为MySQL会对输入的语句进行优化,比如说MySQL建议将关键字全部大写,我们就算是以小写的语句创建表格,底层还是会被转化为大写

不过我个人认为小写的语句更加直观,可以很快分辨出是哪一个单词,而且因为有语句优化,最后存储时还是大写,所以我使用小写。

再比如每一列后面都有一个DEFAULT NULL,表示默认值为NULL,这个也是MySQL的优化,如果我们不指定默认值,就会自动设置默认值为NULL。具体如何指定默认值,会在《MySQL:表的约束》博客中讲解。


删除

  • 删除一个表:
drop table [if exists] 表名 [, 表名, ...];
  • [if exists]:如果表存在,才删除它
  • [, 表名, ...]:可以一次性删除多个表,表名之间用逗号,分隔

示例:

在这里插入图片描述

当我把t1t2删除后,此时执行show tables,就显示Empty set即一个空的数据库。


修改

由于刚刚把t1t2都删掉了,此处我重新创建这两个表,方便展示后续操作:

在这里插入图片描述

  • 修改表名:
alter table 旧表名 rename [to] 新表名;
  • rename [to]:此处的to可省略,效果一样

示例:

在这里插入图片描述

此处我将t1t2分别改名为table_1table_2

  • 插入新的列
alter table 表名 add 列名 类型 comment 描述 after xxx;
  • comment:相当于备注,用于表示这一列数据的含义
  • after:指定新增的列插入到哪一列后面,如果不指定,默认插入到最后一列

示例:

在这里插入图片描述

语句alter table table_1 add age int comment '年龄' after id的作用,就是在id列后面,插入age列,类型是int

对比前后的desc table_1,确实多出了age列。

  • 删除列
alter table 表名 drop 列名;

示例:

在这里插入图片描述

以上指令,删除了age

  • 修改列
alter table 表名 change 旧列名 新列名 类型;

示例:

在这里插入图片描述

我把id列改为stu_id列,并把类型从int改为了smallint。由于我把数据类型变小了,此时有可能会发生数据精度丢失,一般不建议这样操作。


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

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

相关文章

全国区块链职业技能大赛国赛考题前端功能开发

任务3-1:区块链应用前端功能开发 1.请基于前端系统的开发模板,在登录组件login.js、组件管理文件components.js中添加对应的逻辑代码,实现对前端的角色选择功能,并测试功能完整性,示例页面如下: 具体要求如下: (1)有明确的提示,提示用户选择角色; (2)用户可看…

图像分类算法概述:深度学习方法

图像分类算法概述:深度学习方法 图像分类是计算机视觉中的一个基本任务,近年来随着深度学习的发展,图像分类算法取得了巨大的进步。本文将概述主要的深度学习图像分类算法。 #mermaid-svg-hRUH32Xj8pn0L9ug {font-family:"trebuchet ms…

【MySQL-20】关于触发器,你需要知道这些——>定义(创建&查看&删除) 触发器,将变更日志插入日志表中

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

记录一下在Hyper-v中动态磁盘在Ubuntu中不完全用到的问题(扩展根目录)

在之前给hyper虚拟机的Ubuntu分配磁盘有20G; 后来在Ubuntu中查看磁盘发现有一个分区没用到: 贴的图片是完成扩展后的 之前这里是10G,然后有个dev/sda4的分区,也是10G,Type是Microsoft Basic Data; …

植物神经紊乱?别担心,跟我一起轻松锻炼放松吧!

🌼哈喽,小伙伴们!最近我遇到了一个小问题,就是植物神经紊乱,搞得我整个人都不好了😣。但是,我可是个爱生活、爱自己的小太阳,怎么可能轻易被打败呢?🌞 &#…

私家车位共享系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,车辆信息管理,车辆类型管理,车位信息管理,订单信息管理,系统管理 微信端账号功能包括:系统首页,车辆信息&a…

分享 2 个 .NET EF 6 只更新某些字段的方法

前言 EF 更新数据时,通常情况下,是更新全部字段的,但实际业务中,更新全部字段的情况其实很少,一般都是修改其中某些字段,所以为了实现这个目标,很多程序员通常会这样作: 先从数据库…

NFT革命:数字资产的确权、营销与元宇宙的未来

目录 1、NFT:数字社会的数据确权制度 2、基于低成本及永久产权的文化发现 3、PFP:从“小图片”到“身份表达”,再到社区筛选 4、透明表达:NFT 在数字化营销中的商业价值 5、可编程性:赋予 NFT 无限可能的应用 5.…

【Vue3】组合式 API

【Vue3】组合式 API 背景简介开发环境开发步骤及源码setup 语法糖setup 扩展组件总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪…

HCIP笔记[第4章-重发布+路由策略]

重发布 作用: 在两种路由协议之间,或者一个协议的不同进程之间,借助ASBR(同时工作在两种协议或者协议的不同进程中)学习到两个网络的路由信息,并且通过重发布进行路由共享,最终实现全网可达。 …

PYTHON学习笔记(四、pyhton数据结构--列表)

(1)list列表 列表的含义是指:(1)一系列的按特定顺序排列的元素组成。(2)python中内置的可变序列。(3)在python中使用[]定义列表,元素与元素之间使用英文的逗…

NNOM训练环境搭建(Windows)

目录 一、安装Anaconda 二、安装nnom编译环境 1. 创建并激活虚拟环境 2. 统一安装所有安装包 三、编译NNOM 一、安装Anaconda windows版本:Anaconda3-2019.10-Windows-x86_64.exe 勾选添加进系统环境变量,其他使用默认选项进行安装。 二、安装nnom…

pycharm报错:No module named pip/No module named pytest

1、问题概述? 今天在执行一个python脚本的时候,控制台提示:No module named pytest,就是没有pytest模块,于是我使用pip命令进行安装,命令如下; pip install pytest 结果又提示No module named pip,说我没有pip模块,没办法,再安装pip 2、安装pip-方式1 在pycharm的T…

【python基础知识】整除

熟练使用你所常用的开发语言是一个非常基本的要求。如果你日常需要使用Python,但是你对向上取整,向下取整,以及Python中的默认实现方式是什么都不知道的话,那么我就需要怀疑你的专业能力了。 1. 整除 讲解这个整除的知识&#xf…

因果推断 | 双重机器学习(DML)算法原理和实例应用

文章目录 1 引言2 DML算法原理2.1 问题阐述2.2 DML算法 3 DML代码实现3.1 策略变量为0/1变量3.2 策略变量为连续变量 4 总结5 相关阅读 1 引言 小伙伴们,好久不见呀。 距离上次更新已经过去了一个半月,上次发文章时还信誓旦旦地表达自己后续目标是3周更…

【BUG】已解决:AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘

AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘ 目录 AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘ 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)

基础介绍 Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:网络地址转换(Network Address Translate)数据包内容修改以及数据包过滤的防火墙功能。Netfliter框架不仅仅在ipv4中有应用,bridge,ipv4&#…

ipv6 基础学习(一)

IPv6 为什么要有IPV6? IPv4地址空间有限:IPv4使用32位地址,最多可提供约43亿个地址。随着互联网设备数量的爆炸式增长,这些地址已经几乎耗尽。 IPv6地址空间庞大:IPv6使用128位地址,可以提供大约3.410^3…

操作系统安全:Windows隐藏账户的安全问题与实战操作。

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 Windows系统的…

VulnHub:insomnia

靶机下载地址 信息收集 主机发现和端口扫描 攻击机网段192.168.31.0/24。 # 主机发现 nmap 192.168.31.0/24 -Pn -T4 # 靶机ip:192.168.31.207 端口扫描 nmap 192.168.31.207 -A -p- -T4 经过nmap扫描发现目标主机有http服务,端口是8080。 目录扫描 访问http…