3.3 数据定义 数据库与系统概论

目录

3.3.1 模式的定义与删除

1. 定义模式

2. 删除模式

CASCADE(级联)

RESTRICT(限制)

3.3.2 基本表的定义、删除与修改

表的定义

2.数据类型

3. 模式与表

4. 修改基本表

5. 删除基本表 

3.3.3 索引的建立与删除

1. 建立索引

2. 修改索引

3. 删除索引

3.3.4 数据字典


SQL的数据定义功能: 定义数据库中的各种对象,模式定义,表定义,视图和索引的定义

现代关系数据库管理系统提供了一个层次化的数据库对象命名机制,一个关系数据库管理系统的实例(Instance)中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。

3.3.1 模式的定义与删除

1. 定义模式

SQL中,模式定义语句如下: CREATE SCHEMA <模式名> AUTHORIZATION <用户名>

[例3.1] 为用户WANG定义一个学生-课程模式S-T

CREATE SCHEMA “S-T” AUTHORIZATION WANG;

如果语句没有指定<模式名>,<模式名>隐含为<用户名>

[例3.2] CREATE SCHEMA AUTHORIZATION WANG;

要创建模式,调用该命令的用户必须拥有数据库管理员权限,或获得了数据库管理员授予CREATE SCHEMA 的权限。

定义模式实际上定义了一个命名空间。在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。

在CREATE SCHEMA中可以接受:CREATE TABLE ,CREATE VIEW ,GRANT子句定义模式

即用户可以在创建模式的同时,在模式定义中进一步创建基本表、视图,定义授权。 

[例3.3]为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1

CREATE SCHEMA TEST AUTHORIZATION ZHANG

CREATE TABLE TAB1 ( COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) );

2. 删除模式

SQL中,删除模式语句如下: DROP SCHEMA <模式名><CASCADE|RESTRICT>

CASCADE(级联)

删除模式的同时把该模式中所有的数据库对象全部删除

RESTRICT(限制)

如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝执行该删除语句。

仅当该模式中没有任何下属的对象时才能执行。

[例3.4] DROP SCHEMA ZHANG CASCADE;  

含义:删除模式ZHANG,同时该模式中定义的表TAB1也被删除

3.3.2 基本表的定义、删除与修改

表的定义

定义基本表,基本格式如下:

CREATE TABLE <表名>

(<列名><数据类型>[<列级完整性约束条件>],<列名><数据类型>[<列级完整性约束条件>],...[<表级完整性约束条件>]);

<表名> :所要定义的基本表的名字

<列名>:组成该表的各个属性(列)

<列级完整性约束条件>:涉及相应属性列的完整性约束条件

<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件 

如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

例子:

CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY, /* 列级完整性约束条件,Cno是主码*/

Cname CHAR(40) NOT NULL, /* 列级完整性约束条件,Cname取值非空*/

Cpno CHAR(4), Ccredit SMALLINT,

FOREIGN KEY (Cpno) REFERENCES Course(Cno) /* 表级完整性约束条件【参照完整性】,外码cpno被参照表为course,被参照列为cno*/

2.数据类型

SQL中域的概念用数据类型来实现

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

选用哪种数据类型,考虑两方面:1.取值范围 如:人的年龄一般在100岁左右,选用短整数;教职工适合年龄 2.要做哪些运算 如,年龄可以用CHAR(3); 计算平均年龄:整数型

3. 模式与表

每一个基本表都属于某一个模式

一个模式包含多个基本表

定义基本表所属模式方法: 3种方法

一:在表名中明显地给出模式名

Create table "S-T".Student(......); /*模式名为 S-T*/

Create table "S-T".Course(......);

Create table "S-T".SC(......);

 方法二:在创建模式语句的同时创建表

方法三:设置所属的模式 (创建表时,表名中无需给出模式名)

创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式

关系数据库管理系统会使用模式列表中第一个存在的模式作为数据库对象的模式名

若搜索路径中的模式名都不存在,系统给出错误

显示当前的搜索路径: SHOW search_path;

搜索路径的当前默认值是:$user,PUBLIC

含义:首先搜索与用户名相同的模式名,如果模式名不存在,则使用PUBLIC模式

数据库管理员也可以设置搜索路径,然后定义基本表 SET search_path TO “S-T” , PUBLIC; Create table Student(......); 结果建立了S-T.Student基本表。

含义:关系数据库管理系统发现搜索路径中第一个模式名S-T,就把该模式作为基本表Student所属的模式。

4. 修改基本表

SQL中,修改基本表一般格式:

5. 删除基本表 

3.3.3 索引的建立与删除

建立索引的目的加快查询速度

B+树索引具有动态平衡的优点,HASH索引具有查找速度快的特点

谁可以建立索引:数据库管理员 或 表的属主(即:建立表的人)

谁维护索引:关系数据库管理系统自动完成

使用索引:关系数据库管理系统自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引

索引属于内模式的范畴

索引占用一定的存储空间,当基本表更新时,索引要进行相应的 维护,会增加数据库负担,根据实际需求有选择的创建索引。 SQL标准中没有涉及索引,但商用关系数据库管理系统一般是支 持索引机制。

1. 建立索引

创建索引语句格式如下:

CREATE [UNIQUE] [CLUSTER] INDEX<索引名>

ON <表名>(<列名>[<次序>]);

<表名>:要建索引的基本表的名字

索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔

<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC

UNIQUE:此索引的每一个索引值只对应唯一的数据记录

CLUSTER:表示要建立的索引是聚簇索引

2. 修改索引

修改索引语句格式如下:

ALTER INDEX<旧索引名> RENAME TO<新索引名>

3. 删除索引

索引一经建立就由系统使用和维护,不需用户干预。如果面临频繁的数据增删改,系统需要花费时间来维护索引, 降低了查询效率。需要删除不必要的索引。删除时,系统会从数据字典中删去有关该索引的描述。

删除索引语句格式如下: DROP INDEX <索引名>;

3.3.4 数据字典

数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息:

关系模式定义、视图定义、索引定义

完整性约束定义

各类用户对数据库的操作权限

统计信息等

关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。

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

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

相关文章

开发者的瑞士军刀:DevToys

DevToys&#xff1a; 一站式开发者工具箱&#xff0c;打造高效创意编程体验&#xff0c;让代码生活更加得心应手&#xff01;—— 精选真开源&#xff0c;释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys&#xff1f;这是微软研发的一项免费实用的系统工具套…

2024-简单点-pandas

pandas pandas to numpy 尽量不用.values提取数据 numexpr 和 bottleneck加速 布尔操作 describe 自定义describe .pipe df.apply 行或者列级别函数级别应用

pod name 传到容器内部环境变量

背景: 部署skywalking需要管理k8s的pod&#xff0c;需要一个参数-Dskywalking.agent.instance_name 要将podname传递给这个参数 -Dskywalking.agent.instance_name{PODNAME} 通过configmap和secret都无法传递。 在容器里通过这两个命令都可以获取到podname 但在env里这样设置或…

模仿羊羊~消消乐

慎玩&#xff01;随机生成、不保证能消完哦&#xff01; 游戏试玩&#xff1a; 链接: https://pan.baidu.com/s/1IwtOd__8Ca0bSouMP8kEzw 提取码: 6yhd

docker配置镜像加速后容器和镜像消失

一、问题描述 根据阿里云给docker配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://gt6j98xi.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl rest…

力扣面试150 Pow(x, n) 快速幂 负指数

Problem: 50. Pow(x, n) 解题方法 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: O ( l o g 2 n ) O(log_{2}n) O(log2​n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public double myPow(double x, int n){if (x 0.0f)return 0.0d;long b…

最长上升子序列问题

题目&#xff1a;1014. 登山 思路 First 这题也可以看作最长上升子序列&#xff0c;只不过这个序列有三种情况。 先上升&#xff0c;后下降先上升&#xff0c;不下降不上升&#xff0c;直接下降 其实这三种情况我们可以归纳为一种情况&#xff1a;先上升后下降。先上升不下…

C++之多态(二)

一.抽象类 纯虚函数&#xff1a;在虚函数后面加上0就是纯虚函数 作用&#xff1a;纯虚函数规范了派生类必须重写&#xff0c;另外纯虚函数更体现出了接口继承 抽象类定义&#xff1a; 包含纯虚函数的类叫做抽象类&#xff08;也叫接口类&#xff09;&#xff0c;抽象类不能…

Scikit-Learn K近邻分类

Scikit-Learn K近邻分类 1、K近邻分类1.1、K近邻分类及原理1.2、超参数K1.3、K近邻分类的优缺点2、Scikit-Learn K近邻分类2.1、Scikit-Learn K近邻分类API1、K近邻分类 K近邻是一种常用的分类算法。K近邻在机器学习知识结构中的位置如下: 1.1、K近邻分类及原理 K近邻(K-Near…

GoogLeNet论文学习笔记

题目&#xff1a;Going deeper with convolutions 下载地址&#xff1a;GoogLeNet论文 代码&#xff1a;GoogLeNet代码 GoogLeNet在2014年的ISCRC分类比赛中第一名。 创新点 引入Inception结构&#xff08;融合不同尺度的特征信息&#xff09;&#xff1b; 使用1*1的卷积核…

AI:Nvidia官网人工智能大模型工具合集(文本生成/图像生成/视频生成)的简介、使用方法、案例应用之详细攻略

AI&#xff1a;Nvidia官网人工智能大模型工具合集(文本生成/图像生成/视频生成)的简介、使用方法、案例应用之详细攻略 目录 Nvidia官网人工智能大模型工具合集的简介 1、网站主要功能包括: Nvidia官网人工智能大模型工具合集的使用方法 1、SDXL-Turbo的使用 2、GEMMA-7B的…

全志A33编译踩坑!

领导给了个新sdk。然后开编。 编译的标准流程是这样 cd lichee ./build.sh config 这还得了&#xff0c;每次都选很烦&#xff08;虽然只需要选一次&#xff09;&#xff0c;于是新写法是这样 ./build.sh -p sun8iw5p1_android -k linux-3.4 -b evb 果断提示 ERROR: inv…

Intellij IDEA构建Android开发环境

Intellij IDEA创建项目时没有Android的选项 进设置&#xff08;Intellij IDEA - Settings - Plugins &#xff09;

vue-cli5多入口项目分项目编译打包并部署nginx

项目准备 假设有两个项目A和B&#xff0c;我们希望访问localhost:9000/projectA来访问项目A&#xff0c;访问localhost:9000/projectB来访问项目B. 项目结构 项目配置 vue.config.js var projectname process.argv[3] function getEntry() {var entries {}if (process.en…

网站升级https教程

现在越来越多的网站开始升级https协议&#xff0c;其实早在2014年百度就已经开始支持https协议了&#xff0c;且对于在开启了https的网站会增加其搜索权重&#xff0c;意思是在同类网站中&#xff0c;开启了https的网站搜索排名会增加优先度&#xff0c;搜索到的排名也会增加&a…

Netty学习——源码篇6 Pipeline设计原理

1 Pipeline设计原理 在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应&#xff0c;它们的组成关系如下图&#xff1a; 通过上图可以看到&#xff0c;一个Channel包含了一个ChannelPipeline&#xff0c;而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的…

云数据库认识

云数据库概述 说明云数据库厂商概述Amazon 云数据库产品Google 的云数据库产品Microsoft 的云数据库产品 云数据库系统架构UMP 系统概述UMP 系统架构MnesiaRabbitMQZooKeeperLVSController 服务器Proxy 服务器Agent 服务器日志分析服务器 UMP 系统功能容灾 读写分离分库分表资源…

PyCharm环境下Git与Gitee联动:本地与远程仓库操作实战及常见问题解决方案

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言下载及安装GitGit的使用设置用户签名设置用户安全目录Git基本操作Git实操操作 Pyc…

设置远程访问 jupyter Notebook Lab

安装Anaconda / Miniconda 进入conda环境&#xff0c;安装jupyter https://jupyter.org/install 生成notebook config C:\Users\***>jupyter notebook --generate-config Writing default config to: C:\Users\***\.jupyter\jupyter_notebook_config.py创建密码 jupyter…

教你怎样根据空行分割TXT文本文档 TXT文本分割 文本拆分实例

比如有一些文本中间用多个空行隔开&#xff0c;需要把隔开的文本分别保存&#xff0c;比如我们要把隔2行或以上空行的文本分别保存成一个文档&#xff0c;如图&#xff1a; 实现方法&#xff1a; 1、先打开首助编辑高手软件&#xff0c;进入【文本批量操作】--【拆分文本】&am…