廖雪峰SQL教程读书笔记(二):关系模型

廖雪峰SQL教程 抓下来打包成了PDF文件, 方便离线观看 这是小白的零基础SQL教程。 什么是SQL?简单地说,SQL就是访问和处理关系数据库的计算机标准语言。也就是说,无论用什么编程语言(Java、 Python、C++……)编写程序,只要涉及到操作关系数据库,比如,一个电商网站需要把用户和商品信息存入数据库, 或者一个手机游戏需要把用户的道具、通关信息存入数据库,都必须通过SQL来完成。 所以,现代程序离不开关系数据库,要使用关系数据库就必须掌握SQL。 在本教程中,你将学到关系数据库的基本概念,如何使用SQL操作数据库,以及一种最流行的开源数据库MySQL的基 本安装和使用方法。 立即下载

关系模型的本质就是若干储存数据的二维表,表的每一行称为记录(Record),记录是一个逻辑意义上的数据;每一列称为字段(Column),同一个表的每一行记录都有相同的若干字段。

字段定义了数据类型,及是否允许为NULL,NULL表示字段数据不存在但并不是0或空‘’。

关系表中,两条记录不能重复。不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,此字段就是主键。

主键是关系表中唯一定位记录的,记录插入到表中后,主键最好不要再修改。

举例,比如身份证号似乎就是一个不错的主键,但是身份证号作为一种业务场景,如果身份证号升位了,作为主键,不得不修改的时候,就会对业务产生严重影响。

所以,身份证号、手机号、邮箱地址这些看上去可以唯一的字段,均不可用作主键。

主键不应该允许NULL。

主键最好是完全与业务无关的字段,此字段一般命名为id。常见的有:

  1. 自增整数类型:数据库在插入数据时自动为每一条记录分配一个自增整数。(INT自增类型上限约21亿,BIGINT自增类型上限922亿亿条记录)
  2. 全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似3hajgd-8942df-9sdfda-egea9-sdgaesdgew8。GUID算法通过网关MAC地址、时间戳、随机数保证人以计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法。

联合主键:两个或更多的字段都设置为主键。允许一列有重复。尽量不使用。

外键:在students表中,通过class_id的字段,可以把数据与另一张表关联起来,这种列称为外键。外键并不是通过列名实现的,而是通过定义外键约束实现的。

# 外键并不是通过列名实现的,而是通过定义外键约束实现的
ALTER TABLE student   # 指定外键所在表格
ADD CONSTRAINT fk_class_id   # 约束外键,名称随意
FOREIGN KEY (class_id)   # 指定class_id作为外键
REFERENCES classes(id)   # 指定此外键将关联到classes表的id列(也就是classes表的主键)
# 删除外键
ALTER TABLE students
DROP FOREIGN KEY fk_class_id   # 删除约束,并不删除列

外键会降低数据库性能,大部分互联网应用程序为了速度并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。此时,class_id只是一个普通的列,通过逻辑关系实现外键的功能。

外键实现一对多。通过一个中间表,将两个一对多放在一起可以实现多对多。

一对一本质是将一个表拆分成两个,便于数据处理。

索引是关系数据库中对某一列或多列的值进行与排序的数据结构。实现数据库不必扫描整个表,直接定位到符合条件的记录,从而加快查询速度。但是会导致更新记录的速度降低。索引列的值离散性越强,价值越大。

唯一索引具有业务含义的、看似唯一的列(身份证号码)不适合做主键,但是适合做唯一索引。

ALTER TABLE students
ADD INDEX idx_name_score(name,score)   # 增加索引
ADD UNIQUE INDEX uni_name(name)   # 添加唯一索引
ADD CONSTRAINT uni_name UNIQUE (name)   # 只对某列添加唯一约束而不创建唯一索引,此时name列没有索引,但是具有唯一性保证。

.
.
.
2019-01-04 13:56:28写于山东

廖雪峰 SQL 教程 廖雪峰 SQL 教程 廖雪峰 SQL 教程 廖雪峰 SQL 教程 ========== 立即下载

相关推荐

STM32 USB AUDIO实战指南——从零构建音频设备

本文详细介绍了如何使用STM32F407构建USB音频设备,从硬件准备到软件配置,再到音频播放和录制功能的实现。通过STM32CubeMX配置和实战代码示例,帮助开发者快速掌握USB Audio Class规范,实现低延迟、高质量的音频传输,适用于语音交互、音乐播放等多种场景。

weixin_42549037的博客 484

SQL学习(一)

一、基本概念 ①基本概念          [1]记录:数据库表内容中的每一行都是一条记录          [2]字段:每条记录中的列称为字段 ②数据类型          [1]主键:能够唯一标识当前记录的字段,为了保证主键值的唯一性,在MySQL中可以使用自增的int型数据作为主键。         [2]MySQL中的常用数据类型          (1)int类型:使用

zuowenzhan的博客 362

6.4 构网型储能的需求与配置

摘要: 构网型储能是新型电力系统的关键支撑技术,通过提供电压/频率形成、惯性和稳定控制能力,解决同步机退出导致的系统稳定性问题。其配置需遵循三大原则:1)容量配置以支撑需求为主导,兼顾能量服务;2)优先布局于电网薄弱点、稳定问题突出区域;3)采用自适应控制策略实现全工况优化。核心应用场景包括新能源送出通道稳定、负荷中心调频、黑启动电源等。规划方法需结合系统分析、量化指标和成本效益评估,实现技术经济最优。未来需重点关注构网/跟网混合系统的临界容量占比及自适应控制技术发展。

技术工作者 1140

二维数据详解

二维数据的格式化和处理单元: 二维数据的表示: 二维数据一般是一种表格形式,由于它的每一行具有相同的格式特点,一般我们采用(列表类型来表达二维数据) 使用列表类型 使用二维列表,本身是一个列表,而列表中的每一个元素又是一个列表,其中每一个元素可以代表二维数据的一行或者一列。若干行和若干列组织起来的外围列表就构成了我们所说的二维列表。 表达二维数据采用二维列表。 ...

超级程序诞生的博客 7683

MatLab Desired port was :31515解决方案

前言:使用的MatLabR2022b今天突然出现了错误,在程序中打不开文件。后尝试了下面的方法,可以解决。后面还有另一种方法,上面方法如果行不通,大家可以尝试一下。搜索栏输入:firewall.cpl。找到相关项,右键属性,设置为允许。

qq_42212501的博客 1340

博图软件V15.1安装教程

博途软件安装

m0_46266496的博客 1万+

SQL学习(廖雪峰)

1.主键:作为主键最好是完全业务无关的字段,我们一般把这个字段命名为id 主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL。 2.联合主键:关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。 3.要组合三个或者更多的条件,就需要用小括号()表示如何进行条件运算。如果不加括号,条件运算按照NOT、AND、...

sinat_29801549的博客 960

手把手调试:如何为高通Hypervisor上的GuestOS添加一个自定义的HAB服务通道

本文详细介绍了如何在高通Hypervisor环境下为GuestOS添加自定义HAB服务通道的全过程。从HAB通信框架的核心概念解析到设备树节点的动态注入机制,再到物理通道的内核层实现和用户层测试,提供了完整的开发案例和调试技巧,帮助开发者高效构建定制化通信服务。

weixin_27066963的博客 371

SQL语句(Mysql、Oracle等数据库)教程归纳

文章目录前言关系模型主键外键索引查询语句基本查询条件查询投影查询排序分页查询聚合查询分组多表查询连接查询 前言 廖雪峰SQL教程参考 SQL语句是很重要的内容 其中尤其以查询语句应用更为广泛 以下是在进行SQL语句学习时用到的需要用到的两张表 学生表 班级表 关系模型 主键 对于关系表,有个很重要的约束,就是任意两条记录不能重复。 不能重复不是指两条记录不完全相同, 而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键。 主键是关系表中记录的唯一标识。 主键的选取非常重要:主键不要带有业务

泡泡龙的博客 703

鲁棒控制理论 --- H∞ 控制(被裁篇)

鲁棒控制理论 --- H∞ 控制

记录老板的每次pua,分享领导每天的毒鸡汤... 6万+

【openGauss实战1】openGauss基于CentOS8的部署

基于openGauss数据库在CentOS8上的安装实践。

IT邦德 3050

SQL笔记——廖雪峰教程板(全篇五千九百字)【薛定谔‘.s cat的笔记】

数据库笔记 (学习完廖雪峰老师的教程后写的笔记。) 一、关系数据库概述 1.数据模型 层次模型 网状模型 关系模型 2.数据类型 名称 类型 说明 INT 整型 4字节整数类型,范围约+/-21亿 BIGINT 长整型 8字节整数类型,范围约+/-922亿亿 REAL FLOAT(别名) 浮点型 4字节浮点数,范围约+/-1038 DOUBLE 浮点型 8字节浮点数,范围约+/-10308 DECIMAL(M,N) decimal (小写) 高精度小数 由用户指定精度的小

m0_47812755的博客 606

【AVRCP】规范精讲[19]: 媒体属性全解析,让你的蓝牙设备显示完整歌曲信息

AVRCP协议中的媒体属性是蓝牙音频设备传输歌曲元数据的关键,包含标题、艺术家、专辑等32位ID标识的键值对信息。规范要求字符串属性必须使用UTF-8编码,但乱码问题频发(如中文显示异常),主因是设备未遵循编码标准或使用GBK等非规范格式。常见问题包括信息不全(仅显示标题)、封面缺失(因带宽限制或格式不支持)及更新延迟(通知机制未启用)。解决方案包括强制UTF-8编码、优化封面大小(如300x300像素JPEG)、主动请求缺失属性。Android示例代码展示了通过广播接收器解析媒体属性的方法。

byte轻骑兵的技术小窝 1万+

廖雪峰SQL教程读书笔记(四):修改数据

关系型数据库的基本操作就是增删改查,即CRUD:Create、Retreive、Update、Delete。分别对应SELECT、INSERT、UPDATE、DELETE语句。 INSERT插入记录 INSERT INTO <表名> (字段1, 字段2, …) VALUES (值1, 值2, …); # 语法 INSERT INTO students (class_id, na...

漫步量化 242

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

廖雪峰SQL教程读书笔记(一):数据库与SQL

数据库与SQL 数据库作为专门管理数据的软件,避免应用程序在数据管理上徒耗精力,只需要使用数据库的接口就可以了,大大简化应用程序的数据读写功能。 数据库一共有三种模型:层次模型(树)、网状模型(路网)、关系模型(二维表格)。 SQL(Structured Query Language,结构化查询语言)是访问和处理关系数据库的计算机标准语言。不管什么编程语言(C++、Java、Python...

漫步量化 744

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰SQL教程读书笔记(三):查询数据

# 基本查询,SELECT查询结果是一个二维表 SELECT * FROM students; # 从students表格中选取所有数据 SELECT 100+200 # 不带FROM可以直接运算得到300,用来检测当前数据库的连接是否有效 ---------------------------------------------------------- # 条件查询,WHERE关键字...

漫步量化 365

廖雪峰SQL教程读书笔记(六):数据库事务&隔离级别

数据库事务:把多条语句作为一个整体进行操作的功能。 数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败。如果事务失败,那么效果就和没有执行这些SQL一样,不会对数据库数据有任何改动。 数据库事务具有ACID这4个特性: A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行; C:Consistent,一致性,事务完成后,所有数据的状态都是一致...

漫步量化 396

廖雪峰SQL教程读书笔记(五):SQl语句小技巧及MySQL中的应用

MySQL 安装完MySQL后,除了MySQL Server,即真正的MySQL服务器外,还附赠一个MySQL Client程序。MySQL Client是一个命令行客户端,可以通过MySQL Client登录MySQL,mysql -u root -p。然后,输入SQL语句并执行。也可以使用可视化图形界面MySQL Workbench管理MySQL。 MySQL Client的可执行程序...

漫步量化 437

【读书笔记】python 数据挖掘与分析实战、深入浅出mysql、廖雪峰数据库sql教程、吴恩达机器学习--讲讲降维

从昨天开始学习吴恩达的机器学习篇,过两天来更新一下学习笔记…

Mr_charm的博客 562

SQL

廖雪峰数据库教学资料读书笔记. 为什么需要有数据库? 因为应用程序需要保存用户的数据,比如Word需要把用户文档保存起来,以便下次继续编辑,或者做传输. 没有数据库的话我们可以将其写入csv文件: id,name,gender,socre 1,小明,M,90 2,小红,F,95 3,小军,M,88 4,小丽,F,88 如果需要保存学校所有班级的信息,就可以写入另一个CSV文件,但是随着应用程序...

weixin_30813225的博客 81

廖雪峰《python3 基础教程》读书笔记——第二十章 访问数据库

第二十章 访问数据库 程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。 而如何定义数据的存储格式就是一个大问题。如果我们自己来定义存储格式,比如保存一个班级所有学生的成绩单: 名字 成绩 Michael 99 Bob 85 Bart 59 Lisa 87 你可以用一个文

专注极致 779

实用SQL语句

廖雪峰数据库教学资料读书笔记. 实用的SQL语句 插入或替换 如果我们希望插入一条新纪录,但是如果记录已经存在,就先删除原纪录.此时可以使用REPLACE语句,这样就不必先查询,再决定是否先插入再删除. (可以看到name字段变色了, 尽量不要使用这种关键字.) REPLACE INTO students (id,class_id,name,gender,score) VALUES (1,1,...

weixin_30677617的博客 78

Python 数据分析 数据挖掘 学习路径图

话不多说,相信看到这篇文章的你一定是对数据分析,数据挖掘有兴趣,或者想从事和方面。本文不再累述python对数据分析的重要,数据分析这门的由来之类的。 在这里,我单刀直入,已我学习数据挖掘3年来的经历告诉大家怎么去学,以让大家少走弯路。纯个人见解,如有不对,还请各位留言指教。 话不多说,直接放图。 一 学好工具 python语言 推荐看 廖雪峰的python3教程 。 数据分析python基础 如list,tuple,dic,set等。我之后的博客会写到。 二 获取数据 p

marraybug的博客 229

python 廖雪峰数据分析统计服_Python 数据分析 数据挖掘 学习路径图

转载:自己学习使用一 学好工具python语言数据分析python基础如list,tuple,dic,set等。我之后的博客会写到。二 获取数据python爬虫推荐一本书:《Python网络数据采集》(web Scraping with Python) Ryan Mitchell 写的,非常好。读完这本书+实战几次爬虫你就算熟练了。我之后写的爬虫博客也会以读这本书时的读书笔记来写。实战推荐...

weixin_39636164的博客 116

SQL 事务

廖雪峰数据库教学资料读书笔记. 事务 在执行SQL语句的时候,因为某些业务需求,一些列操作必须执行完毕, 而不能仅仅 执行一部分. 例如一个转账操作. id为1 的用户 给id为2的用户转账100块 . 这种操作是需要全部执行的. 可能出现的情况: 第一条执行完毕之后 , 第二条执行失败. 第二条执行成功 , 但是第一条执行失败. 这种操作要么就全部执行 , 要么就全部不执行 . UP...

weixin_30483495的博客 76
上一篇: 廖雪峰SQL教程读书笔记(一):数据库与SQL
下一篇: 廖雪峰SQL教程读书笔记(三):查询数据
ikeepo
ikeepo 优质创作者: 数据库技术领域 优质创作者: 数据库技术领域
博客等级 码龄8年 1万+粉丝 1457原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值