当前位置: 首页 > news >正文

【数据库原理】(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;

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

注意事项

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

相关文章:

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

SQL 数据定义功能包括定义模式、定义表、定义索引和定义视图,其语句如表所示。 一.创建、删除模式 1.创建模式 (Create Schema) 用途&#xff1a;创建模式是为了在数据库中定义一个新的命名空间&#xff0c;它可以包含多个数据库对象。 语法&#xff1a; CREATE SCHEMA &…...

GnuTLS recv error (-110): The TLS connection was non-properly terminated.

bug 解决方案&#xff1a;参考 GnuTLS recv error (-110): The TLS connection was non-properly terminated. 解决方案&#xff1a; apt-get install gnutls-bin git config --global http.sslVerify false git config --global http.postBuffer 1048576000参考...

hive sql 和 spark sql的区别

Hive SQL 和 Spark SQL 都是用于在大数据环境中处理结构化数据的工具&#xff0c;但它们有一些关键的区别&#xff1a; 底层计算引擎&#xff1a; Hive SQL&#xff1a;Hive 是建立在 Hadoop 生态系统之上的&#xff0c;使用 MapReduce 作为底层计算引擎。因此&#xff0c;它的…...

SparkStreaming基础解析(四)

1、 Spark Streaming概述 1.1 Spark Streaming是什么 Spark Streaming用于流式数据的处理。Spark Streaming支持的数据输入源很多&#xff0c;例如&#xff1a;Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如&#xff1a;map、…...

HTML---JavaScript操作DOM对象

目录 文章目录 本章目标 一.DOM对象概念 二.节点访问方法 常用方法&#xff1a; 层次关系访问节点 三.节点信息 四.节点的操作方法 操作节点的属性 创建节点 删除替换节点 五.节点操作样式 style属性 class-name属性 六.获取元素位置 总结 本章目标 了解DOM的分类和节点间的…...

ChatGPT扩展系列之网易数帆ChatBI

在当今数字化快速发展的时代,数据已经成为业务经营与管理决策的核心驱要素。无论是跨国大企业还是新兴创业公司,正确、迅速地洞察数据已经变得至关重要。然而,传统的BI工具往往对用户有一定的技术门槛,需要熟练的操作技能和复杂的查询语句,这使得大部分的企业员工难以深入…...

1.10号io网络

信号量&#xff08;信号灯集&#xff09; 1> 信号灯集主要完成进程间同步工作&#xff0c;将多个信号灯&#xff0c;放在一个信号灯集中&#xff0c;每个信号灯控制一个进程 2> 每个灯维护了一个value值&#xff0c;当value值等于0时&#xff0c;申请该资源的进程处于阻…...

基于JAVA+SpringBoot的高校学术报告系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 智慧高校学术报告系统…...

单机部署Rancher

上次已经安装完毕了k8s了&#xff0c;但是想要界面化的管理&#xff0c;离不开界面工具&#xff0c;首推就是rancher&#xff0c;本文介绍安装rancher的安装&#xff0c;也可以将之前安装的k8s管理起来。 已经安装完毕docker和docker-ce的可以直接从第三部分开始。 一、基础准…...

linux 命令

ps: 命令用来查看系统上的进程信息。 查看内存 cat /proc/进程id/maps...

MySQL数据库进阶|SQL优化|开发手册

系列专栏&#xff1a;MySQL数据库进阶 前言 在看此篇前&#xff0c;建议先阅读MySQL索引&#xff0c;对索引有个基本了解&#xff1a;MySQL数据库进阶-索引-CSDN博客 在进行SQL优化前&#xff0c;我们必须先了解SQL查询的性能分析&#xff0c;为什么这条SQL慢&#xff0c;慢在…...

一文了解Git(所有命令)附带图片

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 其他…...

Hex2Bin转换软件、Bootloader 、OTA加密升级 、STM32程序加密、其他MCU同样适用

说明&#xff1a;这个工具可以将 Hex 文件 转换为 Bin 格式文件&#xff0c;软件是按自己开发 STM32 OAT 功能需求开发的一款辅助 上位机软件。 文中的介绍时 bootloader boot 文档在补充完善中... 有兴趣的朋友可留言探讨。 1. 软件功能&#xff1a; 1.生成 bin&#x…...

Hadoop之mapreduce参数大全-6

126.指定 Map 任务运行的节点标签表达式 mapreduce.map.node-label-expression 是 Hadoop MapReduce 框架中的一个配置属性&#xff0c;用于指定 Map 任务运行的节点标签表达式。节点标签是在 Hadoop 集群中为节点分配的用户定义的标签&#xff0c;可用于将 Map 任务限制在特定…...

Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍

文章目录 一、前言二、hash模式hashchange 事件&#xff1a; 三、history模式方法&#xff1a;1、history.go()&#xff1a;2、history.back()&#xff1a;3、history.forward()&#xff1a;4、History.replaceState()5、History.pushState()popState 事件 四、nginx配置五、原…...

功能强大的免费SSL证书

一、数据加密的重要性 免费SSL证书的核心作用在于对网站的数据传输进行加密处理。当一个网站部署了SSL证书后&#xff0c;它能够将HTTP协议升级至HTTPS&#xff0c;这意味着所有在客户端&#xff08;如浏览器&#xff09;与服务器之间传输的信息都将被高强度的加密算法所保护。…...

在Vue中使用Web Worker详细教程

1.什么是Web Worker? Web Worker 是2008年h5提供的新功能&#xff0c;每一个新功能都是为了解决原有技术的的痛点&#xff0c;那么这个痛点是什么呢&#xff1f; 1.1 JavaScript的单线程 JavaScript 为什么要设计成单线程&#xff1f; 这与js的工作内容有关&#xff1a;js只…...

四、C#高级特性(动态类型与Expando类)

在C#中&#xff0c;动态类型和ExpandoObject类是两个与运行时类型系统相关的特性&#xff0c;它们提供了更灵活的数据处理能力。 动态类型 动态类型是一种特殊的类型&#xff0c;允许你在运行时解析和操作对象的成员&#xff0c;而不需要在编译时知道这些成员的细节。使用动态…...

贪心算法的“左最优“与“右最优“及其对应的堆处理和预处理方法

1 答疑 1.1 什么是贪心算法的"左最优"与"右最优" "左最优"和"右最优"是贪心算法中的两种策略&#xff1a; 左最优 (Leftmost Greedy): 在每一步选择中&#xff0c;总是选择最左边&#xff08;最早出现的&#xff09;可行的选项。 右…...

【Docker】容器的相关命令

上一篇&#xff1a;创建&#xff0c;查看&#xff0c;进入容器 https://blog.csdn.net/m0_67930426/article/details/135430093?spm1001.2014.3001.5502 目录 1. 关闭容器 2.启动容器 3.删除容器 4.查看容器的信息 查看容器 1. 关闭容器 从图上来看&#xff0c;容器 aa…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...