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

这篇具有很好参考价值的文章主要介绍了【数据库原理】(10)数据定义功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQL 数据定义功能包括定义模式、定义表、定义索引和定义视图,其语句如表所示。
【数据库原理】(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;

注意事项文章来源地址https://www.toymoban.com/news/detail-782418.html

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

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

**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)数据定义功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据库Microsoft SQL Server】实验一 数据库的定义与单表查询

    一、实验目的 1.要求学生熟悉掌握在DBMS中用SQL语言定义数据库、表、主码及外码。 2.熟悉关系数据库中常用数据类型,为关系表各属性定义合理的数据类型。 3.在建立好的数据库表中输入部分虚拟数据,实现基于单表的sql查询并分析查询结果。 二、实验环境与实验准备工作

    2024年02月05日
    浏览(61)
  • 【Python开发】FastAPI 10:SQL 数据库操作

    在 FastAPI 中使用 SQL 数据库可以使用多个 ORM 工具,例如 SQLAlchemy、Tortoise ORM 等,类似 Java 的 Mybatis 。这些 ORM 工具可以帮助我们方便地与关系型数据库进行交互,如 MySQL 、PostgreSQL等。本篇文章将介绍如何使用 SQLAlchemy 来完成数据库操作,以便让我们在 FastAPI 项目中方便地进

    2024年02月14日
    浏览(41)
  • 《数据库原理》实验六 SQL数据查询实验

    本系列传送门: 实验二 SQL Server SSMS工具创建和管理数据库及数据表 实验三 SQL Server SSMS工具添加数据 实验四 SQL的数据定义语句 实验五 数据库完整性约束的实现与验证 实验六 SQL数据查询实验 实验六(2) SQL数据查询—连接查询 实验七 SQL的数据更新和视图 实验八 T_SQL编程

    2024年02月03日
    浏览(100)
  • 达梦数据库 SQL 错误 [22000]:列[xxx]长度超出定义——笔记

    今天碰到一个看表结构字段长度是够的;但是执行sql的时候报字段长度不够的问题;记录一下 大概场景就是新增一条数据,在插入数据库的时候,一个varchar字段在报 SQL 错误 [22000]:列[xxx]长度超出定义 把这个字段拿出来单独查 LENGTH() 函数,长度是在字段长度范围内的; 后来

    2024年02月08日
    浏览(86)
  • 数据库原理及应用实验报告-实验10-触发器

     实验题目   实验 10触发器    10.1 实验目的 通过实验使学生加深对数据完整性的理解,学会理解、创建和使用触发器。 10.2 实验内容   (用实验9的Teacher表) (1) 为 Teacher 表建立触发器T1,当插入或使更新表中的数据时,保证所操作的纪录的 Tage 值大于0。 (2) 为 Teacher 表建立

    2024年02月05日
    浏览(56)
  • 数据库原理及应用实验报告-实验4-SQL的视图

    实验目的 熟悉SQL支持的有关视图的操作,能够熟练使用SQL语句来创建需要的视图,对视图进行查询和删除视图。 实验内容 定义常见的视图形式,包括: 行列子集视图 WITH CHECK OPTION的视图 基于多个基表的视图 基于视图的视图 带表达式的视图 分组视图 通过实验考察WITH CHEC

    2023年04月26日
    浏览(58)
  • 数据库原理与应用(SQL)——2、关系数据库(E-R图、关系模式、关系运算、关系代数)

      目录 关系  关系运算   元组、域关系演算表达式  题目  关系代数表达式——例 元组演算表达式——例  域演算表达式——例         关系数据库是以 二维表 形式组织数据,应用数学方法处理数据库组织的方法。目前关系数据库系统在数据管理中已占据了主导地位

    2023年04月08日
    浏览(46)
  • 因为数据库正在使用,所以无法获得对数据库的独占访问权。 (3101)[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]RES

    SQL server 数据库还原时,遇到问题。 [RES] Database restore start [RES] (Full)  [2022-06-27 22:12:15.000] [ERR] [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]因为数据库正在使用,所以无法获得对数据库的独占访问权。 (3101) [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]RESTORE DATABASE 正在异

    2024年02月12日
    浏览(57)
  • 【手写数据库toadb】SQL字符串如何被数据库认识? 词法语法分析基础原理,常用工具

    ​ 专栏内容 : 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学

    2024年02月08日
    浏览(51)
  • Mysql-------SQL:DDL数据定义语言、DDM数据操作语言、DQL数据库查询语言、DQL数据控制语言

    SQL语言可以分为: DDL(Data Definition Language)语言:数据定义语言,用于 创建或更改数据库中的表、视图、索引等对象 DML(Data Manipulation Language)语言:数据操作语言,用来对 数据库表中的数据进行增删改查操作; DQL(Data Query Language)语言: 数据查询语言,用来查询数据库

    2024年02月13日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包