[MySQL#2] 库 | 表 | 详解CRUD命令 | 字符集 | 校验规则

news2024/10/27 14:20:30

目录

一. 库操作

1. 创建数据库

2. 字符集和校验规则

校验规则对数据库的影响

显示创建数据库时对应的命令

3. 修改数据库

4. 数据库删除

备份和恢复

还原

查看连接情况

二. 表操作

1. 创建表(定义实例化格式

2. 创建表案例 (实例化数据类型

3. 查看表

查看表的结构

查看表的创建信息:

4.修改表

1. 更改表的名字

2. 在user表新增一列,用于保存图片路径

3. 修改列中某一字段

4. 修改列名

5. 删除

删除表

删除某列

show | select


操作导图如下:

一. 库操作

1. 创建数据库

语法:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification] ,
[create_specification] ...
create_specification:
    [DEFAULT] CHARACTER SET charset_name
    [DEFAULT] COLLATE collation_name

说明:

  • 大写的表示关键字
  • []是可选项
  • CHARACTER SET:指定数据库采用的字符集
  • COLLATE:指定数据库字符集的校验规则
  • 本质:在 /var/lib/mysql 下创建一个目录

举例:

理解 数据库 和 文件系统 的关联

创建数据库:本质就是在Linux环境下MySQL特定的路径(数据路径)var/lib/mysql 创建一个目录。

还有一种写法,如果当前没有这个数据库就创建,如果存在就不创建

create database if not exists d1;
  • 创建名为 helloworld 的数据库,使用utf8字符集,并带校对规则
create database helloworld charset=utf8 collate utf8_general_ci;

下面将详细讲解


2. 字符集和校验规则

0. 字符集是什么?

创建数据库的时候,有两个编码集

  • 数据库编码集 – 数据库未来存储数据--写入规则
  • 数据库校验集 – 支持数据库进行字段比较使用的编码,本质也是一种读取数据库中数据采用的编码格式--读取原则

数据库无论对数据做任何操作,都必须保证操作和编码必须是编码一致的

  • 存数据的时候用什么编码,取的时候就得用什么编码去取

1. 查看系统默认字符集以及校验规则

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

博主在安装MySQl时就已经在配置文件中把mysql服务段对应的编码设置成了 utf8。在专栏中的第一篇安装教程中有讲~utf8就可以使用中文

2. 查看数据库支持的字符集

show charset;

数据库写的时候采用什么编码

3. 查看数据库支持的字符集校验规则

show collation;

未来数据已经有了,想怎么读,读的时候怎么知道这是我想要的,所以对数据做特定的解释,然后才做能对比。

现在也知道创建数据库了,也知道编码和校验规则了。两个合并下面就可以创建出指定编码和校验规则的数据库了。

  • 就近原则:下面可以看到创建数据库没有指定,系统就用默认的。

如下就使用 gbk,不适用 utf8 了

create database d3 charset=gbk collate gbk_chinese_ci;

数据库配置文件中配置这个编码有什么意义呢?

  • 因为曾经在配置文件中设置过,所以会影响创建数据库时默认编码和校验规则,编码和校验规则是匹配的。

那问题又来了,今天为什么又要设置数据库编码呢?

  • 因为数据库里是需要存表的,在数据库里可能要建各种各样的表,有存各种各样数据的需求,这些表采用编码和校验规则是继承至它所在的数据库。
  • 数据库默认依赖于mysqld,表依赖于数据库。这样就可以理解为什么要做这样的配置。

校验规则对数据库的影响

不区分大小写--test1

创建一个数据库,校验规则使用utf8_general_ci(不区分大小写)

create database test1 collate utf8_general_ci;

use test1;

create table person(name varchar(20));

insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');

打印

实验

区分大小写--test2

创建一个数据库,校验规则使用utf8_bin(区分大小写)

create database test2 collate utf8_bin;

use test2;

create table person(name varchar(20));

insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');

打印

实验

通过以上实验,我们可以感受到编码规则对数据处理时的影响了


显示创建数据库时对应的命令
show create database db_name;

示例

说明:

  • MySQL 建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
  • /*!40100 default… */ 这个不是注释,表示当前使用mysql版本大于4.01版本,就执行这句话

3. 修改数据库

语法:

ALTER DATABASE db_name
[alter_spacification] ,[alter_spacification]...
alter_spacification:
    [DEFAULT] CHARACTER SET charset_name
    [DEFAULT] COLLATE collation_name
  • 对数据库的修改主要是修改数据库的字符集,校验规则

示例:

只要指明编码是什么,校验码就会自动去匹配。

4. 数据库删除

语法:

DROP DATABASE [IF EXISTS] db_name;

本质:删除目录

  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
  • 注意:不要随意删除数据库

备份和恢复

1. 备份

语法:命令行中执行

mysqldump -P 3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

-B 数据库名

示例:

把test1.sql打开后,可以看到里面是大部分内容我们就见过的,如craete database test1、use test1还有后面插入数据等等。

其实它备份的时候,是把在这个数据库里做的有效操作全备份起来了。

所以说备份的不是只有数据,还把历史上所有有效操作全部备份起来了

还原
mysql> source ~/repository/Study_Test/MySQL/SnowK.sql;

两个注意点:

  • 不用/home/root ,直接/root
  • root 下的文件只有 root 下连接 mysql 才有权限恢复

注意事项

如果备份的不是整个数据库,而是其中的一张表,怎么做?

mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql

同时备份多个数据库

mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
  • 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原
  • 备份时带了 -B 这个备份文件其实是带了create databdase test1,use test1
  • 如果没有带 -B 备份的时候只会把这个数据库里面所有表信息数据信息全部备份出来,如果需要还原需要自己先把数据库建好。

查看连接情况

语法:

show processlist;

示例:

  • 可以告诉我们当前有哪些用户连接到我们的MySQL
  • 如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了
  • 以后发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况

二. 表操作

1. 创建表(定义实例化格式

语法:

CREATE table table_name (
 field1 datatype,
 field2 datatype,
 field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

说明:

  • field:表示列名
  • datatype:表示列的类型
  • character set:字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate:校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准(就近原则

2. 创建表案例 (实例化数据类型

说明:不同的存储引擎,创建表的文件不一样

  • 存储引擎是MyISAM,在数据目中有三个不同的文件
    • Users.frm:表结构
    • Users.MYD:表数据
    • Users.MYI:表索引
  • 存储引擎是InnoDB,在数据目中有两个不同的文件
    • Users.frm:表结构
    • Users.ibd:表数据&表索引

下面先对表进行插入内容 (插入数据

insert into user values (1,'张三','12345','2021-3-22');

这样就形成一张像样的表啦~


3. 查看表

语法:

desc db_name;
查看表的结构

MySQL会记录下来用户的所有操作痕迹的,包括建表、删表等行为都会被记录下来。

查看表的创建信息:

4.修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。

我们还有需求,添加字段,删除字段。这时我们就需要修改表。 不会存在查找 !

ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column
datatype]...);

ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...);

ALTER TABLE tablename DROP (column);
1. 更改表的名字

2. 在user表新增一列,用于保存图片路径
alter table user add image_path varchar(128) comment '用户头像路径' after birthday;
  • add 后面跟的是你想新增那一列,列的类型是什么,描述是什么
  • after 表示你想指定新增到那一列的后面


3. 修改列中某一字段
alter table user modify name varchar(60);
  • modify 后面跟你要改谁,后面在跟新的属性。
  • 我们发现name字段大小确实已经变成60了,也没有影响该字段原有数据。

  • 但是更为重要的是,如果刚才改字段属性就是只改了字段大小,你会发现以前name后面的comment没有了。
  • 说明并不是定向你要改那个字段就给你改那个字段,它是把新的属性直接覆盖把原来创建name字段,属性等全部覆盖掉。
  • 换句话说如果未来你想改某一列,你肯定要把这一列曾经的所有属性全部复制下来,在代码中对要改的字段修改,在重新提交一下。

更改前

更改后

4. 修改列名

将name列修改为xingming

alter table user change name xingming varchar(60) DEFAULT NULL; # 新字段需要完整定义

说明:

  • change后面跟着旧列名 ,再跟新列名和属性。
  • 列名称要改不仅仅需要提供新列名称,这个列的相关属性也需要。相当于把这一列重新设置。
  • 因为修改是覆盖实现的

5. 删除

删除表

语法:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
drop table user;

说明:

  • 像create,drop,show tables 都是在做表操作
  • 但是select并不是操作表结构,操作的是表的内容
    前面学过SQL分类有:DDL、DML、DCL。
  • 像我们目前学到的库的操和表的操作,属于那种类型的SQL呢?DDL 数据定义语言。

删除某列
alter table user drop password;
  • drop后面跟着要删除那一列
  • 注意:删除字段一定要小心,删除字段及其对应的列数据都没了,所有一定要保证这个数据是真的不要了。

show | select

  • show 查 所有
  • select 显示(当前/某个 的)内容
show databases;#查库
use#进入某库
select database();#显示当前库
show tables;#查当前库的所有表
insert#实例化插入表内容
select * from xxx;#显示某表

后续讲解 思路:将 数据库 和 linux 系统 连接起来讲解~

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

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

相关文章

【Fargo】12:参考mediasoup 重构 udpsocket管理、定时器、uv生命周期

udp 发送的包是动态分配的内存,即使考虑rtppacket类型,也是动态分配的内存构造rtppacket,因此应该考虑对这块内存管理起来。之前的实现采用了一个固定分配的内存,可能会节省内存,固定大小虽然不够灵活,但是可以规避频繁分配导致的内存碎片。每次都动态分配一个uv_udp_sen…

vue3+vite 部署npm 包

公司需要所以研究了一下怎么部署安装,比较简单 先下载个vue项目 不用安准路由,pinna 啥的,只需要一个最简单的模版 删掉App.vue 中的其它组件 npm create vuelatest 开始写自定义组件 新建一个el-text 组件, name是重点,vue3中…

【10天速通Navigation2】(三) :Cartographer建图算法配置:从仿真到实车,从原理到实现

前言 往期内容: 第一期:【10天速通Navigation2】(一) 框架总览和概念解释第二期:【10天速通Navigation2】(二) :ROS2gazebo阿克曼小车模型搭建-gazebo_ackermann_drive等插件的配置和说明 本教材将贯穿nav2的全部内容&#xff0c…

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误 测试环境1、 MYODBC 3.51.18 or higher2、分析和解决2.1 解决1,降级MySQL ODBC2.2 解决2,修改FreeSWITCH代码 测试环境 http://myfs.f3322.net:8020/ 用户名:admin,密…

双11必买物品清单有哪些?双11推荐购买清单分享

随着双11购物节的到来,这个由光棍节演变而来的全民狂欢节已经成为了中国乃至全球最大的在线购物盛事。对于精明的购物者来说,双11不仅是一个购物的好时机,更是一个精打细算、囤货备需的黄金时刻。那么双11必买物品清单有哪些?在这…

基于Arduino的LED亮灭按键控制

一、项目简介 通过一个按键控制LED的亮灭,实现按键按一下LED点亮,再按一下LED熄灭,交替循环。 二、控制原理 1. 按键检测原理: 将Arduino的监测端口设置为输入上拉模式(INPUT_PULLUP),用于连…

C++结合图形编程与物联网:你更偏向哪种方式来学习信息学奥赛?

随着信息学奥赛在全国范围内的热度逐年攀升,学生和家长们越来越重视如何有效备赛。传统的编程学习方式侧重于算法和数据结构,但随着科技的发展,图形化编程与物联网(IoT)项目逐渐成为新兴的学习路径。通过C结合图形化编…

直播系统源码技术搭建部署流程及配置步骤

系统环境要求 PHP版本:5.6、7.3 Mysql版本:5.6,5.7需要关闭严格模式 Nginx:任何版本 Redis:需要给所有PHP版本安装Redis扩展,不需要设置Redis密码 最好使用面板安装:宝塔面板 - 简单好用的…

存储过程(SQL)

1.存储过程 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 2.MySQL存储过程创建…

qt QApplication详解

一、概述 QApplication是Qt应用程序的基础类,负责设置和管理应用的环境。它的主要功能包括:初始化应用程序、管理事件循环、处理命令行参数、提供全局设置(如样式和调色板)以及创建和管理主窗口。通常在main函数中创建QApplicati…

基于物联网的智慧考场系统设计(论文+源码)

1. 功能设计 (1)温度监测与控制功能: 系统需要能够实时采集考场内的温度信息,通过DS18B20传感器获取准确的数据,并在OLED屏幕和APP上显示。当温度异常过高时,系统应自动启动继电器,模拟空调开启…

【网络协议栈】Tcp协议(下)的可靠性和高效性(超时重传、快速重传、拥塞控制、流量控制)

绪论: 承接上文,上文写到Tcp协议的结构以及对tcp协议的性能优化的滑动窗口,本章我们将继续了解Tcp协议的可靠性和高效性的具体展示。后面我将继续完善网络协议栈的网络层协议敬请期待! 话不多说安全带系好,发车啦(建议…

普推知产:商标初审已下,商标申请通过如何高些!

近期下来一批商标注册的初步审公告通知书,一些客户对商标下证要求比较高的,普推知产商标老杨发现,要像下证高核心还是在于名称,名称起好备用的多,让商标专业人士经检索后层层过滤后提报,通过会好很多。 普推…

CentOS 7镜像下载

新版本系统镜像下载(当前最新是CentOS 7.4版本) CentOS官网 官网地址 http://isoredirect.centos.org/centos/7.4.1708/isos/x86_64/ http://mirror.centos.org/centos/7/isos/ 国内的华为云,超级快:https://mirrors.huaweiclou…

计算机毕业设计Java银行存取系统 银行交易管理系统 金融数据处理 用户存取管理系统(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

信息安全工程师(55)网络安全漏洞概述

一、定义 网络安全漏洞,又称为脆弱性,是网络安全信息系统中与安全策略相冲突的缺陷,这种缺陷也称为安全隐患。漏洞可能导致机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控性下降、真实性不保等问题。 二、分类 网络安全漏洞可以根据…

Unity(四十八):Unity与Web双向交互

效果 游戏对象绑定脚本 游戏脚本源码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Tent : MonoBehaviour {public Camera camera;// Start is called before the first frame updatevoid Start(){}// Update is called once…

面包种类图像分割系统:多层面改进

面包种类图像分割系统源码&数据集分享 [yolov8-seg-GhostHGNetV2&yolov8-seg-C2f-DCNV3等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Globa…

YOLOv11/10/8算法改进【NO.149】引入新的现代卷积网络系列——多阶门控聚合网络

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 首推…

JAVA基础:多线程 (学习笔记)

多线程 一,什么是线程? 程序:为完成特定任务、用某种语言编写的一组指令的集合,是一段静态的代码进程:程序的一次执行过程。 正在运行的一个程序,进程作为资源分配的单位,在内存中会为每个进程分配不同的…