MySQL数据分析进阶(十二)设计数据库——PART4

news2025/7/19 17:10:58

;※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!)

【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!icon-default.png?t=N7T8https://www.bilibili.com/video/BV1UE41147KC/?spm_id_from=333.1007.0.0&vd_source=b287f1f4a1fa54cc438e31a0f87ef4e2

目录:

第十二章:设计数据库——PART4

25、CREATING AND DROPPING DATABASES——创建和删除数据库

26、CREATING TABLES——创建表

27、ALTERING TABLES——更改表

28、CREATING RELATIONSHIPS——创建关系

29、ALTERING PRIMARY AND FOREIGN KEYS——更改主键和外键约束

30、CHARACTER SETS AND COLLATIONS——字符集和排序规则

31、STORAGE ENGINES——存储引擎


第十二章:设计数据库——PART4

25、CREATING AND DROPPING DATABASES——创建和删除数据库

如果想成为数据库管理员需要了解这些工具生成的脚本

每次它们生成一个脚本,需要检查,确保它不会对你的数据库产生任何不良影响

学习更多SQL语句,徒手创建或修改数据库,不用依赖于这些视像工具

①创建数据库

CREATE DATABASE:一个没有任何表的空数据库

②再次执行可能会报错,最好加上IF NOT EXISTS

③删除数据库

26、CREATING TABLES——创建表

在sql_store2重建sql_store数据库中的customers表

①逐一添加列比较费时,只添加关键列

②确保每位顾客都有唯一的电子邮件

🔺无法重新只能执行此表,因为数据库中已经有这张表

重建此表方法一

DROP TABLE IF EXISTS customers;

重建此表方法二

CREATE TABLE IF NOT EXISTS customers;

27、ALTERING TABLES——更改表

修改一张已经存在的表

假设忘记添加last_name,或者给定列设定了错误的数据类型

使用ALTER TABLE语句

如果直接执行,这列将被放在末尾

想要把该列放在first_name后:AFTER first_name

一开始就要避免列中有空格,如果出现空格必须使用反引号来表示列名

但列名就不该有空格,这是不雅陋习

在写ALTER TABLE语句时,可以一次进行多项更改(添加、删除更改一列或多列数据类型和属性)

COLUMN关键字可写可不写

不要在生产环境下更改表,会造成非常严重的后果,只在测试数据库上尝试更改

确保执行正常,不会产生任何不良影响以后,再在生产数据库中执行他们

28、CREATING RELATIONSHIPS——创建关系

创建订单表,并在顾客和订单之间添加一组关系

order_id没有NOT NULL

当我们对某列应用主键属性时,MySQL会默认该列不允许出现空值,主键列中存在空值不合理

定义两个表的关系用FOREIGN KEY,对customer_id列应用外键约束

fk_orders_customers(customer_id):orders是子表名,customers是母表名,(customer_id)外键的列

REFERENCES customers(customer_id):告诉MySQL这一列引用customers表的customer_id列

 指定更新和删除行为,级联还是拒绝

想让订单表中对应的顾客记录自动更新CASCADE

不想意外删除订单NO ACTION

有人认为不应该级联更新操作,因为主键不能变,理论上同意,实操中就不一定,有时候主键会变(人为失误、应用BUG)

29、ALTERING PRIMARY AND FOREIGN KEYS——更改主键和外键约束

如何在建表之后再添加外键

使用ALTER TABLE语句,添加或删除给定表的外键

也可以在添加或删除主键

DROP PRIMARY KEY不用打列名

30、CHARACTER SETS AND COLLATIONS——字符集和排序规则

①字符集、排序规则

字符集:将每个字符映射到数字的表

存储一个字符串,MySQL会把使用字符集将每个字符转为为它的数值表示

不同的字符集:仅支持拉丁语/仅支持亚洲语言;支持所有国际语言

此表可以看到当前版本MySQL支持的所有字符集

big5:繁体中文

utf8:存储几乎所有国际语言(MySQL版本5或以上使用的默认字符集)

Default collation(排序规则):决定了某类语言的字符如何排序

utf8排序规则:utf8_general_ci

ci(case-insensitive,不区分大小写):MySQL在排序时大小写同等优先级,多数是我们想要的

多为用户以大写或小写字符输入他们的名字,想要用字母顺序排序时,就不用考虑它们的大小写字母

所以99%的情况,不需要更改排序规则,

Maxlen(最大长度列)

utf8最大长度为3,即MySQL存储每个自负的时候最多保留3个字节

English(1):英文字母占用1个字节

European、Middle-eastern(2):欧洲和中东语言占用2个字节

Asian(3):亚洲语言,中文、日文占用3个字节

多数情况不用考虑用不用更改字符集,保持默认设置就好了

某些情况下,可能要更改字符集来减少数据库大小

🔺假设表中一列的类型是CHAR(10)

CHAR表示固定长度的字符串,所以不管字符1还是字符10,MySQL都会保留10个字符串的空间

使用utf8字符集,MySQL预留的最大字节数时3

如果列的类型是CHAR(10),MySQL会为这一列的每个单元格预留10*3的空间,30字节

要是这张表有一百万条记录,就会配置三千万字节的空间

要是不需要支持国际语言,比如只需支持拉丁语

'latin1:被用于大多数拉丁语语言,预留1个字节

在此情况下,更改这一列、这张表或这个数据库的字符集,可以减少MySQL占用磁盘的字节数

②更改字符集

默认字符集:utf8

可以通过鼠标更改表或列级别的字符集

多数情况为了保持一致性,想要在数据库级别设置字符集,要么可以支持国际语言,要么不支持

❗如何使用SQL在数据库级别更改字符集

方法一

创建数据库时或之后设置字符集和排序规则

方法二

更改现有数据库的字符集

方法三

在表级别更改字符集

如果有一个现有的表

为特定列设置字符集

假设想要为名字列设置字符集——latin1

31、STORAGE ENGINES——存储引擎

MySQL有几个存储引擎:决定了数据图如何被存储,哪些功能可供我们使用

最常用的两个存储引擎MyISAM和InnoDB

MyISAM:旧版存储引擎(版本5.5之前)

InnoDB:更高级的存储引擎,支持事务等功能

目前为止谈论的所有内容都是InnoDB的一部分,MyISAM不支持这些功能(别用MyISAM了)

但有时使用的数据库使用更老版本的MySQL版本搭建的,这种情况可能想升级数据库,改用InnoDB,这样允许添加外键

外键对保持引用完整性非常重要

当在两张表之间添加关系时,不能给外键列添加无效值(外键的好处)

❗如何更换存储引擎

在表级别设置存储引擎,这样在同一个数据库中,就可以使用多个存储引擎

如果此表是基于更来版本的MySQL构建的话,可能就会是MyISAM

使用SQL语句更改一张表的存储引擎

更改一张表的存储引擎可能会花很大功夫,因为MySQL必须重建这张表,在此期间无法访问表,不要在产出阶段更改存储引擎,除非要定期维护

————TBC

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

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

相关文章

基于SpringBoot+VUE的员工绩效考核管理系统(源码+文档+部署)

主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等 业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写…

二级分发域名-子比比

二级分发域名全开源链接 二级分发域名

大数据技术——实战项目:广告数仓(第四部分)

目录 第7章 数据仓库环境准备 7.1 数据仓库运行环境 7.1.1 Hive环境搭建 7.1.2 Yarn环境配置 7.2 数据仓库开发环境 第8章 广告数仓ODS层 8.1 广告信息表 8.2 推广平台表 8.3 产品表 8.4 广告投放表 8.5 日志服务器列表 8.6 广告监测日志表 8.7 数据装载脚本 第7章…

C语言【自定义类型——枚举与联合】详细!!

目录 1、枚举 1.0、什么是枚举 1.1、枚举类型的优点 2、联合体(共用体) 2.0、什么是联合体 2.1、联合体的特点 2.2、联合体大小的计算 2.2.0、联合体节省空间例子 2.3、联合小练习 1、枚举 1.0、什么是枚举 枚举,顾名思义&#…

打造编程学习的“知识宝库”:高效笔记记录与整理指南

如何高效记录并整理编程学习笔记? 在编程学习的海洋中,高效的笔记记录和整理方法就像一张珍贵的航海图,能够帮助我们在浩瀚的知识中找到方向。如何建立一个既能快速记录又易于回顾的笔记系统?如何在繁忙的学习中保持笔记的条理性…

MySQL的字符集配置

MySQL的字符集配置 创建database创建表插入数据查看字符集配置查看字符集的比较规则关于字符集的配置修改字符集总结 创建database create database dbtest1; show databases;use dbtest1;创建表 create table employees(id int,name varchar(15));插入数据 insert into empl…

二分查找专题——基础二分查找

一、题目解析 二、算法分析 找到数组的中心值与target比较,如果中心值大于target则证明target有可能在数组的左边(还有一种情况是不存在),反之在数组的右边。重新设置左右边界,折半数组的长度,如此反复&am…

50kg双电多旋翼大载重无人机技术详解

随着无人机技术的飞速发展,大载重无人机因其在物流运输、应急救援、农业植保、环境监测等领域的广泛应用而备受关注。本文将深入解析一款设计承载量达到50kg级别的双电多旋翼大载重无人机,从机体结构设计、动力系统、飞行控制系统、载重挂载系统、能源管…

docker 部署 遇到的一些问题

1. nacos 部署问题 1.1 问题 springboot 服务器启动失败 AnnotationNacosPropertySourceBuilder - There is no content for NacosPropertySource from dataId[rsa.yaml] , groupId[DEFAULT_GROUP] , properties[{accessKey${nacos.access-key:}, clusterName${nacos.cluster…

宝塔面板如何修改域名和网站名

目录 前言修改域名修改网站名 前言 BT宝塔面板是一款安全高效的服务器运维平台,windows和Linux系统都可以使用,安装也简单,相信很多开发者都在用它。 但当我们创建的网站需要更换新的域名,面板中的网站名官方却没有给修改的地方&…

sql语句优化(mysql select语句)-索引方式

1、上图是mysql user表的一小部分数据,一共有: 100万条数据 2、假如现在需要查询name列的某一条数据(name‘user3’) 3、下图是查询优化器评估的最佳方案,索引我删除了还走索引,还他呀的在,奇怪,就先不研究…

89. UE5 RPG 实现伤害 冷却 消耗技能描述

在上一篇文章里,我们能够通过富文本显示多种格式的文字,并显示技能描述。在这一篇文章里,我们继续优化技能描述,将技能说需要显示的内容显示出来。 实现火球术的基础描述 首先,我们现实现火球术的基础描述&#xff0…

kettle将Excel数据导入oracle

Excel数据导入Oracle示例 Kettle将Excel数据导入Oracle过程记录如下: 3、编辑转换 (1)Excel输入控件 双击Excel输入,重命名控件名称get_data,在文件选项卡浏览选择Excel文件(若不能识别Excel文件&#…

关系,条件和逻辑操作符详解

1关系操作符 C 语言用于比较的表达式,称为 “关系表达式”(relational expression),里面使用的运算符就称 为“关系运算符”(relational operator),主要有下面6个。 • > 大于运算符 • &…

C++之模版初阶

目录 前言 1.泛型编程 2.函数模版 2.1函数模版概念 2.2函数模版格式 2.3函数模版的原理 2.4函数模版的实例化 2.5模版参数的匹配原则 3.类模版 3.1类模版的定义格式 3.2类模版的实例化 结束语 前言 前面我们学习了C的类与对象和内存管理,接下来我们继续学习…

docker资源控制与数据卷

docker数据卷 容器和宿主机之间数据共享---------挂载卷------------容器内的目录和宿主机的目录进行挂载。实现数据文件共享。 容器的生命周期有限,一旦重启所有对容器内部文件数据修改以及保存的数据都会被初始化,为了防止数据的丢失,重要…

uni-app发布安卓app打包时必须在APP模块配置中选中需要的模块

最近尝试开发一个语音对话的app,在调试阶段没有选中“record录音”模块,安卓基座运行在雷电模拟器上是没有问题的,但是直接云打包在手机上运行就不行了,语音输入没有反应。 经过试验发现是manifest.json没有勾选APP模块配置中的“…

在本地电脑部署属于你的AI大模型

前言: 现在的ai很多,让我看得有些眼花缭乱,随着ai的发展,现在已经有很多ai的大模型已经支持开源,所以现在支持部署一个大模型在自己电脑上,数据私人化。 如果不知道自己是否需要或者是否合适配置可以跳到…

Unity(2022.3.38LTS) - 初步学习C#

目录 一. C#简介 二. 配置代码编辑器 三. C#基本语法 四. 创建脚本 创建C#脚本的方式 1. 在文件夹新建 2. 直接在物体组件创建 五. 例子 扩展物体旋转的方式: 一. C#简介 Unity 中使用的 C# 是一种面向对象的编程语言,具有强大的功能和广泛的应用。 特点…

【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)

一.创建新工程 找到"driverlib\empty"空白工程,CTRLC然后CTRLV复制副本 重命名为G3507_RTT 打开KEIL工程 双击empty.syscfg,然后打开SYSCONFIG 我的不知道为啥没有48pin选项,如果你也一样,可以跟着我做,如果…