数据库系统概论之关系数据库标准语言SQL(一)【超详细】

news2025/1/21 15:29:13

教材:

数据库系统概论(第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)                 -- 课程名称
);

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

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

相关文章

组合式二值编码

论文名称&#xff1a;《A Practical Approach to 3D Scanning in the Presence ofInterreflections, Subsurface Scattering and Defocus》 简介&#xff1a;组合式二值编码&#xff08;包含传统格雷码&#xff0c;XOR-02&#xff0c;XOR-04&#xff0c;minSW&#xff09;&…

Java学习Day25:基础篇15:反射

Java 反射&#xff08;Reflection&#xff09; 1.前置反应 是 Java 编程语言的一个强大特性&#xff0c;它允许程序在运行时检查或修改类的行为。这包括获取类的信息&#xff08;如字段、方法、构造函数等&#xff09;&#xff0c;以及动态地创建对象、调用方法、访问和修改字…

linux的学习第二天

1.vmware的功能&#xff1a; 快照 创建快照&#xff1a; 拍摄此虚拟机的快照&#xff1a;记录保存虚拟机的当前状态&#xff0c;如果系统出现故障&#xff0c;可以通过快照还原&#xff08;错删系统时可以找到快照的系统状态&#xff0c;然后恢复系统&#xff09; 恢复快照…

java项目之精品在线试题库系统设计与实现源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的精品在线试题库系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 精品在线试…

sentinel dashboard分布式改造落地设计实现解释(二)-分布式discovery组件

discovery discovery负责维护app/机器资料库&#xff0c;transport健康检测&#xff0c; transport上下线处理。discovery关键是分布式存储&#xff0c;后续研究一下raft&#xff0c;其复制&#xff0c;状态机&#xff0c;快照技术&#xff0c;但个人觉得&#xff0c;discover…

软件分享 | 截图工具 Snipaste

今天分享&#xff1a; 今日分享的是一款截图界的神器——Snipaste&#xff01; 特点&#xff1a; &#x1f3a8; 超清截图&#xff1a; Snipaste的截图功能&#xff0c;清晰度超乎你的想象。无论是工作文档还是游戏画面&#xff0c;都能一键捕捉&#xff0c;细节尽在掌握。 …

Excel:将一列拆分成多列

实现的效果是&#xff1a; 操作步骤如下&#xff1a; 1.选中列 → 点击菜单栏中的"数据" → 分列 2.选择"分列符号"&#xff0c;点击下一步 3.我想要按照空格分列&#xff0c;就选择空格 4.点击完成&#xff0c;就可以实现分列的效果了

uniapp学习(004-2 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

Shell编程-if判断

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们前面学习了那么多命令&#xff0c;以及涉及到部分逻辑判断的问题。从简单来说&#xff0c;他就是Shell编…

【XYFrame unity框架使用文档】封装unity小框架工具集 —— XYFrame

文章目录 XYFrame介绍优点获取框架源码引入的第三方插件作者信息技术交流群反馈企鹅裙画饼使用文档导入文件目录启动1、单例模式不继承MonoBehaviour的单例模式基类继承MonoBehaviour的单例模式基类 2、Mono管理器3、事件管理系统4、工具类封装unity协程工具&#xff0c;避免 G…

每周心赏|必备AI神器第二弹

大家的假期都是怎么度过的&#xff1f;是已经玩嗨了&#xff1f;还是在家葛优躺&#xff0c;感叹时间飞逝呢&#xff1f; 别急&#xff0c;假期还没完全说拜拜呢&#xff01;赶紧抓住假期最后的尾巴&#xff0c;和AI神器一起&#xff0c;把快乐放大&#xff0c;不留遗憾&#x…

prompt learning

prompt learning 对于CLIP&#xff08;如上图所示&#xff09;而言&#xff0c;对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改&#xff0c;比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

Docker配置网站环境

Mysql 先安装mysql 启动并后台运行&#xff1a;run -d 容器名称&#xff1a;--name 设置端口映射&#xff1a;-p 主机端口&#xff1a;容器端口 环境变量&#xff1a;-e 最后指定镜像名称 sudo docker run -d \--name mysql\-p 3306:3306\-e MYSQL_ROOT_PASSWORD123456\…

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.0 SP1升级到SP3操作方法(x64)

1、首先安装时候选择升级SQLEXPRADV_x64_CHS.exe。 2、接着安装SQLServer2008R2SP1-KB2528583-x64-sp1补丁后10.50.2500.0。 3、接着安装升级SQLEXPRWT_x64_CHS.exe。 4、继续安装SP3&#xff1a;SQLServer2008R2SP3-KB2979597-x64-CHS。 5、最后安装SP3补丁&#xff1a;SQ…

ARM64使能kdump

摘要 需要使用的工具或者配置如下: 使用kdump-defconfig编译后的kdump内核 : https://download.csdn.net/download/weixin_43412488/89886775https://download.csdn.net/download/weixin_43412488/89886775 引导kdump内核加载的ramdisk: https://download.csdn.net/dow…

【通知】红帽认证:RHCE免费补考福利来袭!

现有2024年第四季度红帽RHCE培训补考政策的通知&#xff1a; 为促进红帽第四季度(10月~12月)RHCE的招生及交付&#xff0c;红帽推出免费补考政策如下&#xff1a; 在此期间参加RHCE(EX200/EX294)考试&#xff0c;且考试订单在有效期内&#xff0c;考试如有未能通过的科目&…

移动技术开发:备忘录

1 实验名称 备忘录 2 实验目的 掌握SQLite数据库的基本操作&#xff0c;实现备忘录基本功能。 3 实验源代码 布局文件代码&#xff1a; &#xff08;1&#xff09;activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout …

在IMX6ul中,使用GPT定时器实现高精度延时

在上一节讲解过了。IMX6UL中的EPIT定时器&#xff0c;这一节我们讲解通用寄存器 在STM32中&#xff0c;我们使用过SYSTICK来实现高精度的延时。IMX6U当中没有SYSTICK定时器&#xff0c;但是IMX6U有其他的定时器&#xff0c;前面的EPIT以及这一节我们将要使用的GPT定时器…

算法备案必须做吗?不做有什么风险?

算法备案是一种强制性备案制度&#xff0c;旨在保障算法技术的合法性和合规性。 《互联网信息服务算法推荐管理规定》第二十四条明确规定应当在10个工作日内备案&#xff0c;发生变更的在10个工作日内完成变更&#xff0c;注销的在20个工作日内完成注销。 ​未履行备案的&…

共筑华芯|首届“SEMiBAY湾芯展”龙华区科技创新局助力华芯邦科技携第四代半导体芯星亮相湾区半导体产业生态博览会,诚邀您莅临参观指导

在深圳市政府指导和深圳市发展改革委支持下&#xff0c;深圳市半导体与集成电路产业联盟携手深圳市重大产业投资集团有限公司共同主办的首届“SEMiBAY湾芯展”——湾区半导体产业生态博览会&#xff0c;将于今年10月16日至18日盛大举行。 本次展会以“芯动未来&#xff0c;共创…