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

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

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

目录:

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

[25、CREATING AND DROPPING DATABASES------创建和删除数据库](#25、CREATING AND DROPPING DATABASES——创建和删除数据库)

[26、CREATING TABLES------创建表](#26、CREATING TABLES——创建表)

[27、ALTERING TABLES------更改表](#27、ALTERING TABLES——更改表)

[28、CREATING RELATIONSHIPS------创建关系](#28、CREATING RELATIONSHIPS——创建关系)

[29、ALTERING PRIMARY AND FOREIGN KEYS------更改主键和外键约束](#29、ALTERING PRIMARY AND FOREIGN KEYS——更改主键和外键约束)

[30、CHARACTER SETS AND COLLATIONS------字符集和排序规则](#30、CHARACTER SETS AND COLLATIONS——字符集和排序规则)

[31、STORAGE ENGINES------存储引擎](#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

相关推荐
煎饼小狗8 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋25 分钟前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网1 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
网络真危险!!1 小时前
【数据分析】认清、明确
数据挖掘·数据分析
菜鸟的人工智能之路1 小时前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
大白要努力!1 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
菜鸟学Python1 小时前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
EterNity_TiMe_2 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
tatasix2 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。2 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库