【数据库原理】(10)数据定义功能

SQL 数据定义功能包括定义模式、定义表、定义索引和定义视图,其语句如表所示。
在这里插入图片描述

一.创建、删除模式

1.创建模式 (Create Schema)

用途:创建模式是为了在数据库中定义一个新的命名空间,它可以包含多个数据库对象。

语法

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;

只有获得了授权的用户才能创建模式。

示例

用户 Li 定义一个数据库模式“教学管理”EM:

CREATE SCHEMA "EM" AUTHORIZATION Li;

如果没有指定模式名,那么模式名隐含为用户名,请看下面的例子:
用户 Li 定义一个数据库模式“Li”

CREATE SCHEMA AUTHORIZATION Li;

2.删除模式 (Drop Schema)

用途:删除一个现有的模式以及其包含的所有数据库对象。

语法

DROP SCHEMA <模式名> <CASCADE|RESTRICT>

其中 CASCADE 和 RESTRICT 必选其一。

选项

  • CASCADE:(级联)删除模式及其包含的所有对象。
  • RESTRICT:(限制)仅当模式中没有关联对象时,才能删除模式。

示例

  • 删除模式 “EM” 及其所有对象:
DROP SCHEMA "EM" CASCADE;

注意事项

  • 权限:只有具有相应权限的用户才能创建或删除模式。
  • 影响:删除模式可能会影响到依赖于该模式中对象的其他数据库组件。
  • 数据库系统差异:不同的数据库系统对模式的支持可能会有所差异,尤其是在命名约定和权限管理方面。

二.创建、删除、修改基本表

**1.创建基本表

目的:在数据库中定义一个新表,包括列名、数据类型及可能的完整性约束条件。

格式

CREATE TABLE <基本表名>(
	<列名 1><数据类型> [列名 1的列级完整性约束条件]
	[,<列名 2><数据类型> [列名 2 的列级完整性约束条件]
	...
	,<列名 n> <数据类型>[列名 n 的列级完整性约束条件]]
	[
		,<表级完整性约束条件 1 >
		[,<表级完整性约束条件 2>]
		...
		[,<表级完整性约束条件 m>]
	]
  • 表名:要定义的新表的名称。
  • :由列名、数据类型和可选的列级完整性约束组成。
  • 完整性约束:保证数据的准确性和可靠性,如主键、外键等。

示例

创建课程表 C

- 包含课程编号、名称、学分和前导课程编号。
- 课程编号为主键,不允许为空且唯一;课程名称唯一。
CREATE TABLE C( 
	Cno CHAR(3) NOT NULL UNIQUE,/* 列级完整性约束条件,Cno 不空且唯一 */
	Cname CHAR(20) UNIQUE,/* 列级完整性约束条件,Cname 唯一*/
	Cpno CHAR(3),
	Ccredit INT
	);

系统执行上面的 CREATE TABLE 语句后,就在数据库中建立了一个新的空的“课程表”C,并将有关“课程表”的定义及有关约束条件存放在数据字典中。

定义表的各个属性时需要指明其数据类型及长度。

建立一个“课程表”C 的同时先行课是自身的外码。

CREATE TABLE C( 
	Cno CHAR(3) PRIMARY KEY, /* 表级完整性约束条件 */
	Cname CHAR(20) UNIQUE, /*表级完整性约束条件 */
	Cpno CHAR(3),/*先行棵*/
	Ccredit INT,
	FOREIGN KEY (Cpno) REFERENCES C(Cno) /* 表级完整性约束条件 */
);

创建学生表 S

  • 包含学号、性别、年龄和班级。
  • 学号为主键。
CREATE TABLE S(
	Sno CHAR(10) PRIMARY KEY,/*列级完整性约束条件,Sno 是主码 */
	Ssex CHAR(1),
	Sage INT,
	Sclass CHAR(6)
);

创建选修表 SC

  • 包含学号、课程编号和成绩。
  • 学号和课程编号联合主键,分别引用学生表和课程表。
CREATE TABLE SC(
	Sno CHAR(10),
	Cno CHAR(3),
	Grade INT,
	PRIMARY KEY(Sno,Cno),
	FOREIGN KEY(Sno) REFERENCES S(Sno),/* 表级完整性约束条件 */
	FOREIGN KEY(Cno) REFERENCES C(Cno)/* 表级完整性约束条件 */
)

2.修改基本表

目的:

对已存在的表结构进行调整,包括增加列、修改列定义或删除完整性约束。

ALTER TABLE <表名>
	[ ADD<新列名><数据类型>[完整性约束]]
	DROP <完整性约束名>]
	[ MODIFY <列名><数据类型>];
  • 表名:指定需要修改的表。
  • ADD:用于增加新列或完整性约束。
  • DROP:用于删除指定的完整性约束。
  • MODIFY:用于修改列的数据类型。

示例

向表 C 增加列

  • 增加名为 Ctype 的列,数据类型为定长字符串。
ALTER TABLE C ADD Ctype CHAR(16);

删除列级完整性约束

  • 删除课程名称 Cname 的唯一性约束。
ALTER TABLE C DROP UNIOUE Cname;

修改列的数据类型

  • 将选修表 SC 中的 Grade 列的数据类型改为浮点型。
ALTER TABLE SC MODIFY Grade FLOAT(4);

3.删除基本表

目的:从数据库中完全移除一个表及其数据。

删除表的一般格式

DROP TABLE <表名>[<CASCADE|RESTRICT>];
  • 表名:指定要删除的表。
  • CASCADE:删除表及其相关的所有依赖对象(如视图、触发器等),谨慎使用。
  • RESTRICT:缺省情况是 RESTRICT,仅在没有任何依赖关系时允许删除表。

示例
删除名为 C 的表:

DROP TABLE C;

注意事项

  • 使用 CASCADE 选项时需格外小心,因为它会删除所有依赖于该表的数据库对象,可能导致数据丢失或完整性问题。
  • RESTRICT 选项确保在表有任何外部依赖(如外键引用、视图或存储过程)时阻止删除操作,以保持数据库的完整性。
  • 不同的数据库系统对 CASCADERESTRICT 的实现可能略有差异,因此在使用时应参考特定数据库系统的文档。

三.创建、删除、修改索引

建立索引是加快表的查询速度的有效手段。索引就像书的目录一样。可以直接定位到要查找的内容。SQL语言支持用户根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。

1.建立索引(Create Index)
目的:为数据库表的一个或多个列创建索引,以加速查询操作。

格式

CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名 1> [<次序>][,<列名 2>[<次序>]]... );

其中,<表名>指定要建索引的基本表的名字。索引可以建在该表的一列或多列上,各列名之间用逗号分隔。每个<列名>后面还可以用<次序>指定索引值的排列次序,包括ASC(升序)或 DESC(降序),默认值为 ASC。

UNIQUE 为唯一性索引,表示此索引的每一个索引值只对应唯一的数据记录。

CLUSTER 为聚簇索引,指索引项的顺序与表中记录的物理顺序一致的索引组织。

例如CREATE CLUSTER INDEX Cname ON C(Cname); 将会在表 C的Cname 列建一个聚簇索引,而且表中的记录将按照 Cname 值的升序存放。

示例

为课程表 C 按课程号升序建立唯一性索引。

CREATE UNIOUE INDEX idxCno ON C(Cno);

为学生表 S 按学号升序建立聚簇索引

CREATE CLUSTER INDEX CidxSno ON S(Sno);

创建一个复合索引,以加快基于这些字段的查询速度。我们将使用 UNIQUECLUSTER 关键字,并指定列的排序次序。

CREATE UNIQUE CLUSTER INDEX idxOrders ON Orders(OrderID ASC, CustomerID DESC, OrderDate ASC);

这条 SQL 语句执行以下操作:

  • CREATE INDEX: 创建一个新索引。
  • UNIQUE: 确保索引列的组合值在表中是唯一的。
  • CLUSTER: 索引的顺序将决定表中数据的物理存储顺序。
  • idxOrders: 为新索引指定的名称。
  • ON Orders: 指定索引将创建在 Orders 表上。
  • OrderID ASC, CustomerID DESC, OrderDate ASC: 索引包含三列,其中 OrderID 按升序排列,CustomerID 按降序排列,而 OrderDate 按升序排列。
    2.删除索引 (Drop Index)

目的:删除已存在的索引。

格式

DROP INDEX <索引名>;

示例

  • 删除课程表 C 的 idxCno 索引:
DROP INDEX idxCno;

删除索引时,系统会同时从数据字典中删去有关该索引的描述。

注意事项

  • 聚簇索引:因为聚簇索引影响数据的物理存储顺序,所以在经常更新的列上创建聚簇索引可能会影响性能。
  • 索引维护:创建和删除索引时,数据库会自动更新数据字典中的相关信息。
  • 索引选择:选择在哪些列上创建索引需要谨慎考虑,以平衡查询速度和更新成本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

万界星空科技MES系统中的设备管理模块

随时工厂数字化建设的大力推进&#xff0c;设备管理的效率得到了很大的提升&#xff0c;特别是作为机加工企业&#xff0c;设备是整个企业非常重要的核心资产。 MES系统主要包含了生产计划、生产过程管理、质量管理、物料管理、设备维护等多个模块&#xff0c;各个模块之间相互…

深度学习中的自动化标签转换:对数据集所有标签做映射转换

在机器学习中&#xff0c;特别是在涉及图像识别或分类的项目中&#xff0c;标签数据的组织和准确性至关重要。本文探讨了一个旨在高效转换标签数据的 Python 脚本。该脚本在需要更新或更改类标签的场景中特别有用&#xff0c;这是正在进行的机器学习项目中的常见任务。我们将逐…

safari缓存清理

safari缓存清理 点击顶端Safari浏览器–>点击偏好设置 点击隐私–>管理网站数据 全部移除

数据库初始化脚本(用 truncate 命令一键清空某个数据库中全部数据表数据)

数据库初始化脚本&#xff08;用 truncate 命令一键清空某个数据库中全部数据表数据&#xff09; 1.执行下面的sql语句生成“清空数据库的sql脚本”2.执行“清空数据库的sql脚本” 在开发中&#xff0c;当数据表结构有变动或者数据库中有脏数据时&#xff0c;想要清空数据表中的…

深度学习(Pytorch版本)

零.前置说明 1、code 2、视频 数据预处理实现_哔哩哔哩_bilibili

探讨一下WebINFO 下的一些思考

在平时的开发中&#xff0c;我们经常看到一个/WEB-INF 这个目录&#xff0c;这个是web 容器初始化加载的一个标准路径。官方解释&#xff1a;WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问&#xff0c;只有服务端可以访问的目录。也就是说&#xff0c;这…

Unity游戏内相机(主角头部视角)的旋转问题:“万向节锁定”(Gimbal Lock)

前言&#xff1a; 在Unity中&#xff0c;相机的正前方是Z正半轴&#xff0c;相机的正右方是X正半轴&#xff0c;相机的正上方是Y正半轴。这个很好理解。 现在&#xff0c;我想要相机看向左前上方45&#xff0c;你会觉得要怎么做呢&#xff1f; 如果是我的话&#xff0c;我的第一…

鹿目标检测数据集VOC格式500张

鹿&#xff0c;一种优雅而神秘的哺乳动物&#xff0c;以其优美的外形和独特的生态习性而备受人们的喜爱。 鹿的体型通常中等&#xff0c;四肢细长&#xff0c;身体线条流畅。它们的头部较小&#xff0c;耳朵大而直立&#xff0c;眼睛明亮有神。鹿的毛色因品种而异&#xff0c;…

RocketMQ MQClientInstance、生产者实例启动源码分析

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

第11章 GUI Page462~476 步骤二十三 步骤二十四 Undo/Redo ①为Undo/Redo做准备工作,弹出日志窗口

step23和step24合起来学习 工程一 1.主窗口类中添加新的私有成员数据&#xff1a; 2 主窗口构造函数中&#xff0c;最后一行加入&#xff0c;用于调试的Log功能 3 鼠标弹起函数&#xff0c;添加Undo动作 4 编译之后报错&#xff1a;ActionLink不是一个类型 5 新增一个头文件…

2024年自动化测试面试题分享(含答案)

1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编程语言来实现&#xff1…

20240105移远的4G模块EC20在Ubuntu 20.04.6 LTS下使用联通5G卡上网的步骤

20240105移远的4G模块EC20在Ubuntu 20.04.6 LTS下使用联通5G卡上网的步骤 2024/1/5 10:11 缘起&#xff1a;需要在Firefly的AIO-3399J开发板上调试移远的4G模块EC20&#xff08;Android10/11/12&#xff09;&#xff0c;需要现在先测试EC20的好坏&#xff01; 陶老板告诉我找一…

书生浦语大模型训练营第一课笔记:全链路开源体系

AI 的研究方向&#xff0c;从专业模型转变为通用模型。 上海人工智能实验室的开源历程 覆盖了轻量级、中量级、重量级的模型&#xff1b; 7B 20B 都是免费开源的&#xff0c;可商用。 从模型到应用 开源了全链路工具。 ![

Linux第20步_在虚拟机上安装“Visual Studio Code”

1、双击windows系统桌面上的“FileZilla Client.exe”&#xff0c;打开FTP客户端&#xff0c;点击03软件下的Visual Studio Code&#xff0c;发现code_1.50.1-1602600906_amd64。 2、点击“文件”&#xff0c;然后点击“站点管理器”&#xff0c;见下图操作&#xff1a; 3、点…

excel统计分析——两因素无重复方差分析

参考资料&#xff1a;生物统计学 从严格意义上讲&#xff0c;两因素试验都应当设置重复观测值&#xff0c;以便检验交互作用是否真实存在&#xff0c;对试验误差有更准确的估计&#xff0c;从而提高检验效率。但根据专业知识或先前的试验已经证明两个因素不存在交互作用时&…

【Turtle库】圣诞树

在寒冷的冬季&#xff0c;没有什么比一棵亮丽的圣诞树更能带给我们温暖和快乐。而现在&#xff0c;我们将使用Python编程语言来绘制这样一棵美丽的圣诞树。 首先&#xff0c;我们需要导入Python的turtle模块&#xff0c;它可以帮助我们绘制图形。然后&#xff0c;我们可以定义一…

高性价比的高速吹风机/高速风筒解决方案,基于普冉单片机开发

高速吹风机是近些年非常火的一款产品&#xff0c;快速崛起并颠覆了传统吹风机&#xff0c;高速吹风机也成为了传统吹风机替代的一个大趋势。高速吹风机是利用高转速产生的大风量来快速吹干头发&#xff0c;由于其精巧的外观设计、超低的噪声、出色的干发效果&#xff0c;高速吹…

苹果Mac图像修图软件Photomator和Pixelmator Pro 有什么区别?

同为一个团队设计的Mac修图软件Photomator和Pixelmator Pro有哪些区别呢&#xff1f;有哪些不一样的功能&#xff1f; Photomator和Pixelmator Pro区别如下&#xff1a; 1、用途不同 Photomator 和 Pixelmator Pro 是两个功能强大的应用程序&#xff0c;具有两个不同的用途。…

【docker】一文讲完docker搭建私有仓库

一、docker搭建私有仓库方法总结 搭建Docker私有仓库主要有以下几种方式&#xff1a; 使用Docker官方提供的Registry镜像&#xff1a;Docker官方提供了一个用于构建私有镜像仓库的Registry镜像&#xff0c;只需将镜像下载并运行容器&#xff0c;然后暴露5000端口即可使用。可以…

呼叫 Mac 用户 | Navicat Premium 原生支持在搭载 Apple Silicon 芯片的电脑上使用

作为桌面端数据库管理开发软件&#xff0c;Navicat Premium 与 Navicat for MongoDB 16.3 (或更高版本) 已原生支持搭载 Apple Silicon 芯片的 Mac 电脑上使用。这是一次重要的技术改进&#xff0c;通过原生技术将大幅提升 Mac 用户在使用 Navicat 过程中的响应速度、流畅性以及…