SQL 语言:基本概述和数据定义

文章目录

    • 1. 数据库语言
    • 2. SQL 概述
      • 2.1 SQL 的特点
      • 2.2 SQL 语言支持三级模式结构
      • 2.3 SQL 的基本组成
    • 3. 数据定义
      • 3.1 数据类型
      • 3.2 创建表
      • 3.3 修改和删除表
      • 3.4 创建和删除索引
      • 3.5 创建和删除视图

1. 数据库语言

数据结构化语言 (Structured Query Language,SQL),在关系数据库中最普遍使用的语言,是一种通用的、功能强大的关系数据库标准语言。

主要功能:数据查询 (Data Query)、数据操纵 (Data Manipulation)、数据定义 (Data Definition)、数据控制 (Data Control)

基本表:实际存储在数据库中的表;

视图:由若干个基本表或其它视图导出的表,是一个虚表;

SQL 用户:可以是应用程序,也可以是终端用户;

任何一个数据库系统都应向用户提供一种数据库语言,其中包括数据定义语言和数据操纵语言;SQL 语言是集数据定义和数据操纵为一体的典型数据库语言。数据库语言与数据模型密切相关,基于不同的数据模型,数据库语言也不同。

数据定义语言 (Data Definition Language,DDL) :用来定义数据库模式,包括数据库模式定义、数据存储结构和存取方法定义,数据库模式的修改和删除功能。

数据操纵语言 (Data Manipulation Language,DML) :用来表示用户对数据库的操作请求,通常数据操纵语言 DML 能进行的操纵有插入、删除、修改、查询数据库中的信息,简称增删改查。

SQL 可以作为独立语言在终端以交互的方式使用,也可以作为程序设计的子语言使用,即嵌入到高级语言中使用,这种方式下使用的 SQL 称为嵌入式 SQL ,嵌入式 SQL 的高级语言称为宿主语言。

在 DBMS 中,对宿主型数据库语言 SQL 采用两种方法处理:第一种方法是采用预编译;第二种方法是修改和扩充主语言,使之能处理 SQL 语句。

2. SQL 概述

2.1 SQL 的特点

  • 综合统一。非关系模型的数据语言分为模式定义语言和数据操纵语言,其缺点是当要修改模式时,必须停止现有数据库的运行,转储数据,修改模式编译后再重装数据库。SQL 集数据定义、数据操纵和数据控制功能于一体,语言风格统一,可独立完成数据库生命周期的所有活动。
  • 高度非过程化。当进行数据操作时,只要指出“做什么”,无须指出“怎么做”,存储路径对用户来说是透明的,提高了数据的独立性。
  • 面向集合的操纵方式。非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。而 SQL 语言采用面向集合的操作方式,其操作对象、查找结果可以是元组的集合。
  • 两种使用方式。第一种方式,用户可以在终端输入 SQL 命令,对数据库进行运行操作,称为自含式语言;第二种方式,将 SQL 语言嵌入到高级程序中 (Python等),称为嵌入式语言。
  • 语言简洁、易学易用。
    • 数据查询:SELECT ,该动词是 SQL 中用得最多的动词。
    • 数据定义:CREATEDROPALTER,用于创建新表、修改表和删除表。
    • 数据操作:INSERTUODATEDELETE,用于数据的插入、修改和删除。
    • 数据控制:GRANTREVORK,用于数据库对象访问的权限授予和回收。

2.2 SQL 语言支持三级模式结构

SQL 语言支持关系数据库的三级模式结构 (外模式、模式、内模式),其中,视图对应外模式、基本表对应模式、存储文件对应内模式。

2.3 SQL 的基本组成

  • 数据定义语言。SQL DDL 提供定义关系模式和视图、删除关系和视图、修改关系模式的命令。
  • 交互式数据操作语言。SQL DML 提供查询、插入、删除和修改的命令。
  • 事务控制 (Transaction Control)。SQL 提供定义事务开始和结束的命令。
  • 嵌入式 SQL 和动态 SQL ( Embedded SQL and Dynamic SQL )。用于嵌入到某种通用的高级语言 (C、C++、Java、Python、PL/I、COBOL 和 VB 等) 中混合编程。其中,SQL 负责操作数据库,高级语言负责控制程序流程。
  • 完整性 ( Integrity )。SQL DDL 包括定义数据库中的数据必须满足的完整性约束条件的命令,对于破坏完整性约束条件的更新将被禁止。
  • 权限管理 ( Authorization )。SQL DDL 中包括说明关系和视图的访问权限。

3. 数据定义

3.1 数据类型

SQL 支持的内部基本类型如下:

image

3.2 创建表

语句格式:

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

列级完整性约束有 NULL (空) 和 UNIQUE (取值唯一) ,如 NOT NULL UNIQUE 表示取值唯一,不能取空值。

示例1. 建立一个供应商、零件数据库。其中关系供应商 S(Sno,Sname,Status,City) 属性名分别表示供应商代码、供应商名、供应商状态和供应商所在城市;关系零件 P(Pno,Pname,Color,Weight,City) 属性名分别表示零件号、零件名、颜色、重量及产地。该数据库要满足如下要求:

(1)供应商代码不能为空,且值是唯一的,供应商的名也是唯一的。

(2)零件号不能为空,且值是唯一的;零件名不能为空。

(3)一个供应商可以供应多个零件,而一个零件可以由多个供应商供应。

分析:(1)表示 Sno 非空唯一约束,Sname 唯一约束;(2)表示 Pno 非空唯一约束,Pname 非空约束;(3)表示供应商和零件之间是多对多的联系,在关系数据库中,多对多联系必须生成一个关系模式,而该模式的码是该联系两端实体的码加上联系的属性构成的,若该联系名为SP,那么关系模式为SP(Sno, Pno,Qty),另外供应商和零件分别要建立一个关系模式。

CREATE TABLE S
(Sno CHAR(5) NOT NULL UNIQUE,Sname CHAR(30) UNIQUE,Status CHAR(8),City CHAR(20),PRIMARY KEY(Sno)
);
CREATE TABLE P
(Pno CHAR(6),Pname CHAR(30) NOT NULL ,Color CHAR(8),Weight NUMERIC(6,2),City CHAR(20),PRIMARY KEY(Pno)
);
CREATE TABLE SP
(Sno CHAR(5) NOT NULL UNIQUE,Pno CHAR(6) NOT NULL UNIQUE,Qty NUMERIC(9),PRIMARY KEY(Sno,Pno),FOREIGN KEY(Sno) REFERENCES S(Sno),FOREIGN KEY(Pno) REFERENCES P(Pno)
);

PRIMARY KEY(Pno) 已经定义了 Pno 为主码,所以 Pno CHAR(6) NOT NULL UNIQUE 语句中的 NOT NULL UNIQUE 可以省略。

3.3 修改和删除表

修改表语法格式:

ALTER TABLE <表名>[ADD COLUMN <新列名> <数据类型> [完整性约束条件] [DROP COLUMN <列名>][DROP [CONSTRAINT]<完整性约束名>][MODIFY <列名> <数据类型>];

删除表语法格式:

DROP TABLE <表名>;

示例2. 向“ 供应商” 表S 增加Zap “ 邮政编码”;将 Status 字段改为整型;删除供应商表。

# 向“ 供应商” 表S 增加Zap “ 邮政编码”
ALTER TABLE S ADD Zap CHAR(6);
# 将 Status 字段改为整型
ALTER TABLE S MODIFY Status INT;
# 删除供应商表
DROP TABLE S;

3.4 创建和删除索引

数据库中的索引与书籍中的目录页面类似,利用目录页面可以快速查找信息,在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。数据库中的索引是某个表中一列或者若干列的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

索引作用如下:

  • 通过创建唯一索引,可以保证数据记录的唯一性。
  • 可以大大加快数据检索速度。
  • 可以加快表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
  • 在使用 ORDER BY 和 GROUP BY 子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
  • 使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。

索引分为聚集索引非聚集索引。聚集索引时指索引项的顺序与表中记录的物理顺序一致的索引。

创建索引语法格式:

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

参数说明如下:

  • 次序:可选择 ASC (升序) 或 DESC (降序) ,默认值为 ASC。
  • UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。
  • CLUSTER:表明要建立的索引是聚集索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织,默认。
  • NONCLUSTER:表示建立的索引是非聚集索引。

删除索引语法格式:

DROP INDEX <索引名> ON <表名>;

示例3. 假设供应销售数据库中有供应商S、零件P、工程项目J、供销情况SPJ 关系,希望建立4个索引。其中,供应商S中Sno按升序建立索引;零件P中Pno按升序建立索引;工程项目J中Jno按升序建立索引;供销情况SPJ中Sno按升序,Pno按降序,Jno按升序建立索引。删除其中一个索引。

CREATE UNIQUE INDEX SNS-O ON S(Sno);
CREATE UNIQUE INDEX P-PNO NO P(Pno);
CREATE UNIQUE INDEX J-JNO ON J(Jno);
CREATE UNIQUE INDEX SPJ-NO ON SPJ(Sno ASC, Pno DESC, JNO ASC);
DROP INDEX SNS-O ON SNS-O;

3.5 创建和删除视图

视图是从一个或者多个基本表或视图中导出的表,其结构和数据是建立在对表的查询基础上的;视图不是真实存在的基本表,而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。

视图的优点和作用如下:

  • 可以使视图集中数据、简化和定制不同用户对数据库的不同数据要求。
  • 可以屏蔽数据的复杂性,用户不必了解数据库的结构,就可以方便地使用和管理数据,简化数据权限管理和重新组织数据以便输出到其他应用程序中。
  • 可以使用户只关心他感兴趣的某些特定数据和所负责的特定任务,而那些不需要的或者无用的数据则不在视图中显示。
  • 大大地简化了用户对数据的操作。
  • 可以让不同的用户以不同的方式看到不同或者相同的数据集。
  • 在某些情况下,由于表中数据量太大,因此在表的设计时常将表进行水平或者垂直分割,但表的结构的变化对应用程序产生不良的影响。
  • 提供了一个简单而有效的安全机制。

创建视图语法格式:

CREATE VIEW 视图名(列表名)
AS SELECT 查询子句
[WITH CHECK OPTION];

视图的创建,必须遵循如下规定:

(1)子查询可以是任意复杂的 SELECT 语句,但通常不允许含有 ORDER BY 子句和 DISTINCT 短语。

(2)WITH CHECK OPTION 表示对 UPDATE,INSTER,DELETE 操作时保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

(3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由 SELECT 子查询目标列的主属性组成。

删除视图语法格式:

DROP VIEW 视图名;

示例4. 若学生关系模式为 Student(Sno,Sname,Sage,Sex,SD,Email,Tel),建立“计算机系”(CS表示计算机系)学生的视图,并要求进行修改、插入操作时保证该视图只有计算机系的学生。

CREATE VIEW CS_STUDENT
AS SELECT Sno,Sname,Sage,Sex
FROM Student
WHERE SD = 'CS'
WITH CHECK OPTION;DROP VIEW CS_STUDENT;

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

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

相关文章

【机器学习】——线性模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

面试被问到不懂的东西,是直接说不懂还是坚持狡辩一下?

大家好&#xff0c;我是瑶琴呀。 面试被问到不懂的东西&#xff0c;是直接说不懂还是坚持狡辩一下&#xff1f;这个问题可以转变一下&#xff0c;如果你顺利拿到 offer&#xff0c;公司安排的工作跟你之前的技术和经验不匹配&#xff0c;你还愿意干下去吗&#xff1f; 转变一…

太速科技-FMC125-两路125Msps AD,两路160Msps DA FMC子卡

FMC125-两路125Msps AD&#xff0c;两路160Msps DA FMC子卡 一、板卡概述 板卡可实现2路14bit 125Msps AD 和2路16bit 160MspsDA功能&#xff0c;FMC LPC连接器用于扩展到xilinx用于模拟信号、中频信号采集&#xff0c;信号发出等应用。 二、性能指标 板卡功能 参…

幻影成像制作中,哪些技术细节不可忽视?

在当今多媒体展厅设计的潮流中&#xff0c;幻影成像技术以其立体的数字影像和卓越的视觉效果&#xff0c;脱颖而出&#xff0c;成为备受瞩目的焦点。它不仅吸引了众多参观者的目光&#xff0c;更在社交媒体上掀起了热烈的讨论。然而&#xff0c;要想在多媒体展厅中精心打造一场…

2024可信赖的企业级生成式 AI 白皮书

来源&#xff1a;COPU&IBM&#xff1a; 近期历史回顾&#xff1a;

k8s devops实战教程+生产实践+可就业

k8s devops实战教程 简介教程涉及到内容教程获取学习教程后的收货助学群 简介 越来越多的企业应用云原生化&#xff0c;催生很多应用的部署方式也发生了很多变化。 从物理机部署应用过度到虚机部署应用再到应用容器化&#xff0c;从单应用再到服务拆分为微服务&#xff0c;靠人…

是他将计算机从“一屋子”变成“一柜子”——量子前哨缅怀小型机之父 戈登·贝尔

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;6000字丨15分钟阅读 5 月 21 日&#xff0c; 美国贝尔实验室资深人士 John Mashey 发布消息称&#xff0c;计算机先驱戈登贝尔&#xff08;Gordon…

机器人系统ros2-开发学习实践15-模拟用 URDF 建模 步行机器人行走示例

目标&#xff1a; 本教程将向您展示如何建模行走机器人、将状态发布为tf2消息并在 Rviz 中查看模拟。首先&#xff0c;我们创建描述机器人组件的 URDF 模型。接下来&#xff0c;我们编写一个节点来模拟运动并发布 JointState 和变换。然后我们使用robot_state_publisher将整个…

spring cloud alibaba sentinel 配置过程 流控 降级热点 授权

目录 1.基础理论 2.配置 3.加入依赖和配置文件 4.流控 1.基础理论 Sentinel是阿里开源的项目&#xff0c;提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 丰富的应用场景 &#xff1a;Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心…

未授权访问:Jupyter Notebook 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用terminal命令执行 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章…

cpolar内网穿透工具—无需部署,远程访问网址

文章目录 cpolar介绍安装教程隧道管理VIP客户cpolar介绍 cpolar是一种安全的内网穿透服务,它将局域网下面的本地服务器通过加密隧道暴露至公网,使得公网用户可以正常访问内网服务。 只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序…

全域运营平台的优缺点各有哪些?听听使用者怎么说!

作为多个创业者交流群内的热点话题&#xff0c;关于全域运营平台优缺点的分析和点评不断涌现&#xff0c;为许多创业者更多信息的同时&#xff0c;也让他们的选择过程变得非常艰难。而在众多的全域运营平台中&#xff0c;被分析和点评次数最多的&#xff0c;当属全域运营平台。…

css3实现0.5px边框

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css3实现0.5px边框</title><s…

电商API接口助力直播带货选品||助力电商平台搭建选品

如今&#xff0c;直播带货如火如荼。直播带货的核心是卖货、品牌盈利&#xff0c;那想要带货效果更好&#xff0c;选品及定价是最关键的环节。 事实上&#xff0c;品牌企业可以直接使用API接口工具来辅助自身选品及定价&#xff0c;这主要是因为比价工具在直播带货选品环节能起…

dubbo复习:(4) 和springboot 整合时,客户端负载均衡的配置

需要在DubboReference注解指定loadbalance属性。示例如下&#xff1a; package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Ser…

Java+IDEA+SpringBoot药物不良反应ADR智能监测系统源码 ADR智能化监测系统源码

JavaIDEASpringBoot药物不良反应ADR智能监测系统源码 ADR智能化监测系统源码 药物不良反应&#xff08;Adverse Drug Reaction&#xff0c;ADR&#xff09;是指在使用合格药品时&#xff0c;在正常的用法和用量下出现的与用药目的无关的有害反应。这些反应往往因药物种类、使用…

【全开源】排队叫号系统源码(FastAdmin+GatewayWorker)

一款基于FastAdminGatewayWorker开发的多项目多场景排队叫号系统&#xff0c;支持大屏幕投屏&#xff0c;语音播报叫号&#xff0c;可用于餐厅排队取餐、美甲店排队取号、排队领取、排队就诊、排队办理业务等诸多场景&#xff0c;助你轻松应对各种排队取号叫号场景。 ​打造高…

03. Spring 事务管理

文章目录 1. Spring 事务管理简介2. Transactional 注解属性信息3. Transactional 简单使用4. Transactional 使用注意事项4.1 正确指定事务回滚的异常类型4.1.1 Java 异常继承体系 4.2 Transactional 注解应用在 public 方法或类上才有效4.3 正确设置 Transactional 的 propag…

西门子smart line触摸屏软件安装 WinCC Flexible Smart V4SP1 V3

提示&#xff1a;Wincc flexible smart软件为西门子Smart line系列触摸屏的专用组态软件&#xff0c;这款屏不能用博途来组态&#xff0c;只能用这个软件来组态。西门子Smart line系列触摸屏的常用型号为SMART 700 IE V3/V4&#xff0c;SMART 1000 IE V3/V4。 Wincc flexible …

类和对象(上)【有关类的全面学习】【this指针的学习】

类和对象&#xff08;上&#xff09; 1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C语言注重过程&#xff1a; C是基于面向对象的&#xff0c;关注的是对象&#xff0…