【数据库系统概论】第3章 关系数据库标准语言SQL(一)数据定义(超详细)

教材:

数据库系统概论(第6版)王珊,杜小勇,陈红编著

目录

一、SQL概述

1.1 SQL 的产生与发展

1.2 SQL的特点

1.3 SQL的基本概念

二、数据定义

2.1 数据库的定义

2.2 数据表的定义

2.3 模式的定义


一、SQL概述

1974年IBM为关系DBMS设计一种查询语言,先在IBM公司的关系数据库系统System R上实现,当时称为SEQUEL,后简称为结构化查询语言SQL(StructuredQuery Language)。
 

SQL 是用户操作关系数据库的通用语言。
SQL已经成为关系数据库的标准语言, 现在所有的关系数据库管理系统都支持SQL。

1.1 SQL 的产生与发展

标准

篇幅(约)/

发布日期/

标准

大致页数

发布日期/

SQL 86

1986

SQL 2003

3 600

2003

SQL 89(FIPS 127-1)

120

1989

SQL 2008

3 777

2008

SQL 92

622

1992

SQL 2011

3817

2011

SQL 99SQL 3

1700

1999

SQL2016

4035

2016

SQL 86SQL 89是单个文档。

SQL 92SQL 99扩展为一系列开放的部分。例如,SQL 92增加了SQL调用接口、SQL永久存储模块;

SQL 99扩展为框架、SQL基础部分、SQL调用接口、SQL永久存储模块、SQL宿主语言绑定、SQL外部数据的管理和SQL对象语言绑定等

SQL2016扩展到了12个部分,引入XML类型、Window函数、TRUNCATE操作、时序数据以及JSONJavaScript Object Notation)类型等

目前,没有一个关系数据库管理系统能够支持SQL标准的所有概念和特性

1.2 SQL的特点

1.功能综合且风格统一

集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。

2. 数据操纵高度非过程化

SQL只要提出“做什么”,无须了解存取路径 存取路径的选择以及SQL的操作过程由系统自动完成

层次、网状模型的数据操纵语言面向过程,必须指定存取路

3. 面向集合的操作方式

SQL采用集合操作方式

操作对象、查找结果可以是元组的集合

一次插入、删除、更新操作的对象也可以是元组的集合

层次、网状模型采用面向记录的操作方式,操作对象是一条记录

4. 以统一的语法结构提供多种使用方式

SQL独立的语言,能够独立地用于联机交互的使用方式

SQL能够嵌入到高级语言(例如CC++JavaPython)程序中,供程序员设计程序时使用

5.语言简洁且易学易用

SQL功能极强,完成核心功能只用9个动词

SQL 功能

动词

数据定义

CREATEDROPALTER

数据查询

SELECT

数据操纵

INSERTUPDATEDELETE

数据控制

GRANTREVOKE

 缺点:缺少流程控制能力

1.3 SQL的基本概念

SQL支持关系数据库三级模式

外模式是用户能够看见和 使用的数据结构——视图,部分基本表

模式——基本表

内模式——存储文件

(1)基本表

基本表是数据库中直接存储数据的表,用于保存原始数据,是数据的基本存储单元。

  • 关系数据库管理系统中一个关系就对应一个基本表
  • 本身独立存在的表   【独立存在
  • 一个或多个基本表对应一个存储文件   【物理存储数据
  • 一个表可以带若干索引   【索引查询

(2)存储文件

存储文件是数据库的物理结构,包含了数据的实际存储形式。

存储文件的逻辑结构与物理结构组成了关系数据库的内模式

物理文件结构是由数据库管理系统(DBMS)设计确定的

(3)视图

  • 从基本表或其他视图中导出的表,是一个虚表
  • 数据库中只存放视图的定义不存放视图对应的数据    【虚拟存储
  • 用户可以在视图上再定义视图

用户可以对基本表和视图进行查询和其他操作

基本表和视图都是关系

二、数据定义

SQL的数据定义功能:

课本:

操作对象

操作方式

创建

删除

修改

数据库模式

CREATE SCHEMA

DROP SCHEMA

*SQL标准无修改语句

CREATE TABLE

DROP TABLE

ALTER TABLE

视图

CREATE VIEW

DROP VIEW

索引

*CREATE INDEX

*DROP INDEX

*ALTER INDEX

  • 一个关系数据库管理系统的实例中可以建立多个数据库
  • 一个数据库中可以建立多个模式
  • 一个模式下通常包括多个表、视图和索引等数据库对象

2.1 数据库的定义

SSMS 菜单操作将具体在另一篇文章中讲解,本篇重点在SQL 语句

以创建一个名为 "EDUC" 的学籍管理系统数据库为例:

(1)SQL 语句创建数据库

CREATE DATABASE <数据库名>
[ON [PRIMARY] (路径/文件大小)]

CREATE DATABASE:这是用于创建数据库的命令。

<数据库名>:这是要创建的数据库的名称。名称不能与现有数据库的名称重复

ON可选,用于指定数据库的数据文件和日志文件的存储位置。

PRIMARY:这是默认的文件组,用于指定主数据文件的位置。在 SQL Server 中,数据文件可以分布在多个文件组中,PRIMARY 是每个数据库必有的文件组。

(路径/文件大小):用于定义主数据文件的具体位置和大小。

示例:

CREATE DATABASE MyDatabase
ON PRIMARY (NAME = MyDatabase_Data,FILENAME = 'C:\Data\MyDatabase.mdf',SIZE = 10MB,MAXSIZE = 100MB,FILEGROWTH = 5MB
)
LOG ON (NAME = MyDatabase_Log,FILENAME = 'C:\Data\MyDatabase_log.ldf',SIZE = 5MB,MAXSIZE = 50MB,FILEGROWTH = 1MB
);

各参数解释:

NAME:数据文件的逻辑名称

FILENAME:数据文件的物理路径和文件名【存储文件的位置】

SIZE:数据文件的初始大小

MAXSIZE:指定数据文件的最大容量

FILEGROWTH:指定数据文件的增长步长

(2)修改数据库的名称

修改数据库的名称操作的基本语法格式为:

ALTER DATABASE <原数据库名>
MODIFY NAME = <新数据库名>
  • ALTER DATABASE:声明要修改数据库;是 SQL Server 用来修改数据库属性的命令

  • MODIFY NAME:表示要修改数据库的名称。MODIFY:修改现有的数据库属性,NAME:属性中的名称部分

(3)SQL 语句删除数据库

SQL 删除数据库的语法:

DROP DATABASE 数据库名;

如果想一次删除多个数据库,可以在 DROP DATABASE 后面列出多个数据库名称,数据库名称之间用逗号分隔

DROP DATABASE 数据库名1, 数据库名2;

DROP DATABASE永久删除数据库及其所有数据,无法通过 SQL Server 自行恢复数据(除非有备份)

DROP DATABASE <数据库名> [CASCADE | RESTRICT] 是一种更高级的数据库删除方式,在某些数据库管理系统中支持。然而,SQL Server 本身并不直接支持这两个选项(CASCADERESTRICT

在 SQL Server 中,如果你尝试删除一个仍有连接或活动对象的数据库,会得到一个错误。SQL Server 的默认行为等同于 RESTRICT。没有明确的 CASCADERESTRICT 关键字

1. CASCADE级联删除

CASCADE 选项在删除数据库时,会自动删除与该数据库相关的所有对象,包括表、视图、索引、触发器等。执行此操作后,所有相关的数据库对象会一并删除,不可恢复

DROP DATABASE 数据库名 CASCADE;

2. RESTRICT约束式删除)【默认】

RESTRICT 选项会在数据库非空时拒绝删除操作。只有在数据库中没有任何对象(如表、视图、索引等)时,才能删除该数据库。该选项是大多数数据库系统删除操作的默认行为

DROP DATABASE 数据库名 RESTRICT;

在 SQL Server 中,没有显式的 RESTRICT 选项,默认情况下 SQL Server 也是在非空时禁止删除

 

2.2 数据表的定义

在创建一个 SQL 数据库后,接下来可以使用 SQL 语言在数据库中创建基本表。创建表时,必须考虑列的名称、数据类型、长度、小数位数、主键、外键等约束,以保证数据的完整性和高效性

CREATE TABLE 表名 (列名1 数据类型 [列约束],列名2 数据类型 [列约束],...[表级约束]
);
  • 列名:每个列的名称【清晰表达,尽量使用小写或驼峰命名法(firstName )】

  • 数据类型:指定每列可以存储的类型【域的概念

数据类型

含义

CHAR(n), CHARACTER(n)

长度为n的定长字符串

VARCHAR(n),

CHARACTERVARYING(n)

最大长度为n的变长字符串

CLOB

字符串大对象

BLOB

二进制大对象

INT,INTEGER

整数(4字节),取值范围是[-2147483648,2147483647]

SMALLINT

短整数(2字节),取值范围是[-32768,32767]

BIGINT

大整数(8字节),取值范围是[-2^63,2^63-1]

NUMERIC(p, d)

定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字

DECIMAL(p,d), DEC(p, d)

同NUMERIC类似,但数值精度不受p和d的限制

REAL

取决于机器精度的单精度浮点数

DOUBLE PRECISION

取决于机器精度的双精度浮点数

FLOAT(n)

可选精度的浮点数,精度至少为n位数字

BOOLEAN

逻辑布尔量

DATE

日期,包含年、月、日,格式为YYYY-MM-DD

TIME

时间,包含一日的时、分、秒,格式为HH:MM:SS

TIMESTAMP

时间戳类型

INTERVAL

时间间隔类型

  • 列约束:为列设置特定的规则

  • 表级约束:如主键 (PRIMARY KEY) 和外键 (FOREIGN KEY) 的定义完整性约束涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级

案例 "library" 数据库中,三个数据表的关系模式如下所示,使用 SQL语言建立(定义)三个表: 图书(图书编号。图书名,出版社,作者,价格,出版时间); 售书网站(售书网站编号,名称,所在城市,成立时间) ; 售书(图书编号。售书网站编号,数量)

-- 1. 创建数据库
CREATE DATABASE library;
GO-- 2. 使用刚创建的库
USE library;
GO-- 3. 创建图书表 (Books)
CREATE TABLE 图书 (图书编号 CHAR(5) PRIMARY KEY,                     -- 图书编号,5个字符,主键图书名 VARCHAR(50) NOT NULL,                      -- 图书名,最多50个字符,非空出版社 VARCHAR(50),                               -- 出版社,最多50个字符,可空作者 CHAR(20),                                    -- 作者,最多20个字符,可空价格 REAL NOT NULL CHECK (价格 > 0 AND 价格 < 100), -- 价格,浮点数,必须在 0 和 100 之间出版时间 CHAR(10)                                 -- 出版时间,10个字符,可空
);
GO-- 4. 创建售书网站表 (BookStores)
CREATE TABLE 售书网站 (售书网站编号 CHAR(6) PRIMARY KEY,                 -- 售书网站编号,6个字符,主键名称 VARCHAR(255) NOT NULL,                      -- 售书网站名称,最多255个字符,非空所在城市 VARCHAR(100),                          -- 所在城市,最多100个字符,可空成立时间 DATE                                    -- 售书网站成立时间
);
GO-- 5. 创建售书表 (Sales)
CREATE TABLE 售书 (图书编号 CHAR(5),                                -- 图书编号,5个字符售书网站编号 CHAR(6),                            -- 售书网站编号,6个字符数量 INT NOT NULL,                                -- 售书数量,非空PRIMARY KEY (图书编号, 售书网站编号),             -- 联合主键FOREIGN KEY (图书编号) REFERENCES 图书(图书编号) ON DELETE CASCADE,  -- 外键,引用图书表的图书编号,级联删除FOREIGN KEY (售书网站编号) REFERENCES 售书网站(售书网站编号) ON DELETE CASCADE -- 外键,引用售书网站表的售书网站编号,级联删除
);
GO

在 SQL Server 中,GO 是一个批处理终止符,表示执行该批次的 SQL 语句。

USE library 命令将数据库上下文切换到 library 数据库,接下来所有的操作都在这个数据库中进行

约束:PRIMARY KEY,意味着这是图书表的主键,保证每本书的编号唯一

约束条件:CHECK (价格 > 0 AND 价格 < 100),使用 CHECK 来限制字段的值范围。

价格 REAL NOT NULL DEFAULT 50,

 CHECK 约束用于限制表中列的值范围,确保数据符合某些规则或条件。当插入或更新数据时,CHECK 约束会验证列的值是否满足指定条件,如果不满足条件,则会阻止操作

CHECK (条件表达式)CHECK (LEN(名称) >= 3)  --确保 名称 字段的长度不能少于 3 个字符。

DEFAULT 关键字用于为表中的列指定默认值。当在插入新记录时,如果没有为该列提供值,数据库将使用指定的默认值 

列名 数据类型 DEFAULT 默认值

PRIMARY KEY (图书编号, 售书网站编号),这里定义了联合主键

外键和级联删除(ON DELETE CASCADE):FOREIGN KEY 约束用于确保引用完整性。通过 FOREIGN KEY售书 表中的 图书编号售书网站编号 都引用了其他表的主键。这意味着在添加或更新 售书 表中的数据时,必须确保 图书售书网站 中有对应的记录。ON DELETE CASCADE 的作用是,当 图书 表或 售书网站 表中的某一条记录被删除时,相关联的 售书 表中的记录也会被自动删除。这有助于保持数据的一致性,避免孤立的记录。

(2)修改数据表

使用 ALTER TABLE 语句可以对已有的数据表进行结构上的修改

常见的修改操作包括添加列、删除列、修改列的数据类型或约束

-- 1. 修改数据表,添加新列
ALTER TABLE 表名
ADD 列名 数据类型 [约束];           -- 2. 修改数据表,删除列ALTER TABLE 表名
DROP COLUMN 列名;-- 3. 修改数据表,修改列的数据类型ALTER TABLE 表名
ALTER COLUMN 列名 数据类型 [约束];

在 SQL Server 中,当您向一个已有数据的表添加一个新列时,如果该列被定义为 NOT NULL,那么数据库系统会要求您提供一个默认值;否则,它会将新列填充为 NULL

  • 新列默认为 NULL:在添加新列时,如果未定义默认值,数据库会将该新列的所有现有行的值设置为 NULL,即使新列被定义为 NOT NULL

  • 必须提供默认值:如果希望新列能成功添加且不包含 NULL,您必须指定一个默认值。否则,将会导致添加失败

 (3)删除数据表

 使用 DROP TABLE 语句可以删除整个数据表及其包含的所有数据。

删除操作是不可恢复的,因此在执行此操作时要谨慎。

DROP TABLE 表名;

2.3 模式的定义

(1)创建模式

在 SQL 中,模式(Schema)是一种用于组织和管理数据库对象(如表、视图、存储过程等)的结构。

使用 CREATE SCHEMA 语句可以创建一个新的模式。创建模式可以指定模式的名称和授权用户

CREATE SCHEMA 模式名 AUTHORIZATION 用户名;

 示例:为用户 LQ 创建一个名为 S-T 的学生课程模式

CREATE SCHEMA "S-T" AUTHORIZATION LQ;  -- 创建名为 "S-T" 的模式,授权给用户 LQ

双引号用于支持模式名称中包含特殊字符(短横线) 

AUTHORIZATION LQ:指定模式的拥有者为用户 LQ。这意味着该用户将拥有对该模式中所有对象的控制权限。

(2)模式与表
通过使用 SET search_path 语句,您可以定义数据库在查找对象时的搜索顺序。第一个匹配的模式将被使用。在设置了搜索路径后,创建表而不必指定模式名。系统将使用搜索路径中第一个可用的模式。

-- 设置搜索路径,优先使用模式 "S-T"
SET search_path TO "S-T", PUBLIC;-- 在当前搜索路径下创建名为 Student 的基本表
CREATE TABLE Student (StudentID INT PRIMARY KEY,         -- 学生编号,主键Name VARCHAR(50) NOT NULL,        -- 学生姓名,非空Course VARCHAR(50)                 -- 课程名称
);

相应的实验练习:【SQL实验】数据库、表、模式的SQL语句操作-CSDN博客

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

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

相关文章

Docker 搭建mysql

拉取mysql镜像 docker pull mysql # 拉取镜像 [rooteason ~]# docker pull mysql Using default tag: latest latest: Pulling from library/mysql 72a69066d2fe: Pull complete 93619dbc5b36: Pull complete 99da31dd6142: Pull complete 626033c43d70: Pull complete 37d…

用HTML构建酷炫的文件上传下载界面

1. 基础HTML结构 首先&#xff0c;我们构建一个基本的HTML结构&#xff0c;包括一个表单用于文件上传&#xff0c;以及一个列表用于展示已上传文件&#xff1a; HTML <!DOCTYPE html> <html> <head><title>酷炫文件上传下载</title><link …

分布式ID生成策略

文章目录 分布式ID必要性1.UUID2.基于DB的自增主键方案3.数据库多主模式4.号段模式5.Redis6.Zookeeper7.ETCD8.雪花算法9.百度(Uidgenerator)10.美团(Leaf)11.滴滴(TinyID) 分布式ID必要性 业务量小于500W的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分…

浏览器播放rtsp视频流解决方案

方案一: html5 websocket_rtsp_proxy 实现视频流直播 实现原理 实现步骤 服务器安装streamedian服务器 客户端通过video标签播放 <video id"test_video" controls autoplay></video><script src"free.player.1.8.4.js"></script&g…

openresty通过header_filter_by_lua记录特定的请求头和特定的响应头到日志文件

有时我们希望记录特定的请求头信息和特定的响应头信息,以便能够通过关联请求信息和响应头信息,来实现记录请求和响应的对应关系。这里通过逐步尝试和优化的方式进行尝试。具体包括将需要的请求头和响应头组织到一条日志记录,输出到单独的错误日志文件记录等的配置尝试。 1.…

HAL+M4学习记录_8

一、TIM的HAL库用法 这里记录学习HAL库开发TIM 1.1 定时中断基本结构 这里给出定时中断的基本结构 基本步骤如下 开启时钟选择时基单元时钟源配置时基单元配置输出中断控制&#xff0c;允许更新中断输出到NVIC配置NVIC&#xff0c;打开定时器中断通道运行控制编写中断服务函…

为什么九齐单片机中不能使用bit?

如果开发环境不支持bit 定义static unsigned char task_720ms_flag 0;还可以用什么方式替代bit定义标志&#xff0c;使其占用内存空间小。 如果开发环境不支持位定义&#xff0c;可以使用 unsigned char 的多个状态位来替代。可以将多个标志合并到一个 unsigned char 中&…

Vue - Element 选择器 el-select 既可以选择下拉又可以手动输入文本功能(手动输入的值只能是数字 并且支持4位小数)

Vue - Element 选择器 el-select 既可以选择下拉又可以手动输入文本功能&#xff08;手动输入的值只能是数字 并且支持4位小数&#xff09; 备注 filterable 下拉框开启快速搜索功能 no-match-text 当输入的内容在下拉框中找不到时&#xff1b;下拉框提示的文字 handFocus 触发…

软件测试快速入门:测试对象、过程模型、生命周期与测试用例

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

redis集群介绍

Redis集群是一种分布式存储系统&#xff0c;它通过将数据分散存储在多个Redis节点上来实现可扩展性和高可用性。每个节点都是一个独立的Redis服务器实例&#xff0c;它们通过网络相互连接&#xff0c;共同协作以提供数据服务。 在Redis集群中&#xff0c;数据被划分为多个槽&am…

【Vercel】Vercel静态部署踩坑

背景 在现代的软件开发中&#xff0c;自动化部署是一个不可或缺的环节。Vercel作为一个流行的前端部署平台&#xff0c;提供了与GitHub的无缝集成&#xff0c;使得开发者能够在每次提交代码后自动触发部署流程。然而&#xff0c;自动化部署过程中可能会遇到一些挑战&#xff0…

自动化工具:Ansible

目录 一、运维自动化工具有哪些 二、Ansible 概述 1、Ansible 概念 2、Ansible 特点 3、Ansible 工作流程 三、安装部署Ansible 1、环境部署 2、管理节点安装 Ansible 3、查看Ansible相关文件 4、配置主机清单 5、免密管理 ssh-keygen 5.1、测试连通性 5.2、简洁输…

IPC通信-消息队列

使用消息队列实现两个进程的相互通信 #include<myhead.h>//定义结构体存储信息种类和信息正文 typedef struct {long mtype; //信息类型char mtext[128]; //信息正文 }msgbuf;//宏定义信息正文的大小 #define MESIZE sizeof(msgbuf)-sizeof(long)typedef struct sockad…

vscode:创建fastapi项目

1.选择py解释器 或者 uvicorn main:app --reload

java游戏网站源码

题目&#xff1a;java游戏网站源码 编号B22A390 主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Mysql|大数据|SSM|SpringBoot|Vue|Jsp|MYSQL等)、学习资料、JAVA源码、技术咨询 文末联系获取 感兴趣可以先收藏起来&#xff0c;以防走丢&#xff0c;有任何选题、文档编…

雷池WAF自动化实现安全运营实操案例终极篇

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

Unity DOTS中的Archetype与Chunk

Unity DOTS中的Archetype与Chunk 在Unity中&#xff0c;archetype&#xff08;原型&#xff09;用来表示一个world里具有相同component类型组合的entity。也就是说&#xff0c;相同component类型的entity在Unity内部会存储到一起&#xff0c;共享同一个archetype。 使用这样的设…

React是如何工作的?

从编写组件到最后屏幕生成界面&#xff0c;如上图所示&#xff0c;我们现在需要知道的就是后面几步是如何运行的。 概述 这张图解释了 React 渲染过程的几个阶段&#xff1a; 渲染触发&#xff1a;通过更新某处的状态来触发渲染。渲染阶段&#xff1a;React 调用组件函数&…

智能优化算法-生物地理学算法(BBO)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 生物地理学优化算法 (Biogeography-Based Optimization, BBO) 是一种基于生物地理学原理的元启发式优化算法&#xff0c;由Dan Simon于2008年提出。BBO通过模拟物种在不同栖息地之间的迁移过程来搜索最优解&…

Dongle Sentinal在Jenkins下访问不了的问题

背景&#xff1a; 工作站部署的jenkins的脚本无法正常打包&#xff0c;定位后发现是本地获取不了license&#xff0c;但是使用usb over network的远程license都能获取并正常打包 分析&#xff1a; 获取不了license的原因是本地无法识别dongle。根据提供信息&#xff0c;之前…