软考数据库---2.SQL语言

主要记忆:表、索引、视图操作语句;数据操作;通配符、转义符;授权;存储过程;触发器

这部分等等整理一下:
“”"
1、 数据定义语言。 SQL DDL提供定义关系模式和视图、 删除关系和视图、 修改关系模式的命令。
数据库 DDL 的全称是 Data Definition Language。
2、 交互式数据操纵语言。 SQL DML提供查询、 插入、 删除和修改的命令。
3、 事务控制。 SQL提供定义事务开始和结束的命令。
4、 嵌入式SQL和动态SQL。 用于嵌入到某种通用的高级语言中混合编程。 其中, SQL负责操纵数据库,
高级语言负责控制程序流程。
5、 完整性。 SQL DDL包括定义数据库中的数据必须满足的完整性约束条件的命令, 对于破坏完整性
约束条件的更新将被禁止。
6、 权限管理。 SQL DDL中包括说明对关系和视图的访问权限。
7、 SQL语言中完成核心功能的9个动词:
(1) 数据查询: Select
(2) 数据定义: Create、 Drop、 Alter
(3) 数据操纵: Insert、 Update、 Delete
(4) 数据控制: Grant、 Revoke

不常用的sql语句
check 为什么不用in?

数据库表的复合属性:是指由两个或更多基本属性组成,用来共同描述一个复杂的数据项的属性。复合属性体现了现实世界中某些实体属性的内在联系与结构化特征,它们不能被进一步拆分为独立的、原子性的属性。在数据库设计中,复合属性有助于更准确、更完整地表示实体的复杂特性,同时也便于数据的一致性和完整性管理。以下是对复合属性的详细说明:

示例与特征
示例:
家庭住址:由省、市、区、街道、门牌号等多个部分构成,这些部分一起构成了一个完整的地址信息。
联系电话:可能包括国家代码、区号、电话号码,甚至分机号,整体构成了一个可拨打的电话联系方式。
时间戳:由年、月、日、时、分、秒组成,共同标识一个精确的时间点。
“”"

发权限

grant 允许;同意
在这里插入图片描述
赋所有权限:GRANT ALL PRIVILEGES

on 表 to人

收权限

revoke 撤回
RESTRICT 限制
CASCADE 垂直
在这里插入图片描述

视图

行级视图:通常指从行的角度来理解和操作矩阵。
列级视图:更强调从列的角度来分析矩阵。

触发器

触发器是一种特殊的数据库对象,它们与特定的表相关联,并且在特定的数据库操作(即事件)发生时自动执行预定义的逻辑。

触发器通常与以下三种数据库操作事件关联:

  1. INSERT:当向表中插入新行时触发。
  2. UPDATE:当修改表中已存在的行时触发。
  3. DELETE:当从表中删除行时触发。

SELECT不使用触发器
这些事件均涉及到对表数据的实际改动,因此触发器可以在这些操作前后执行,以便检查条件、执行额外的数据修改、记录变更历史或其他所需的操作。

行级触发器(Row-Level Trigger): 行级触发器是在对表中的某一行执行 INSERT、UPDATE 或 DELETE 操作时被触发的。每当这样的操作影响到表中的一个具体行时,行级触发器就会被激活并执行一次。这意味着,如果一个 SQL 语句影响到了多行数据(例如,一个批量更新或删除操作),行级触发器会为受影响的每一行单独触发并执行一次。行级触发器可以在触发操作之前(BEFORE 触发器)或之后(AFTER 触发器)执行,适用于需要对每一行变化进行细致控制、日志记录、数据校验、计算派生值等场景。

语句级触发器(Statement-Level Trigger): 语句级触发器则是在执行某个影响表的 SQL 语句时,无论该语句影响了多少行数据,触发器只会被触发一次。也就是说,即使一个 SQL 语句更改了成百上千行,语句级触发器也仅执行一次其定义的逻辑。这类触发器适用于需要对整个操作过程进行统一处理、执行一次性清理或初始化任务、或者在事务层面实施某种策略的情况。

创建触发器时需指定:
(1) 触发器名称
(2) 在其上定义触发器的表
(3) 触发事件: 触发器将何时激发
(3) 触发条件: 满足什么条件时执行触发动作
(4) 触发动作: 指明触发器执行时应做的动作

创建触发器

在这里插入图片描述

更改、删除触发器

在这里插入图片描述

嵌入式SQL

类似于mybatis,能在c、java等其他代码里面,直接调用sql。
例如:在c语言中的使用

#include <stdio.h>
#include <sql.h> /* 假设为某个数据库提供的头文件 */

int main() {
    int emp_id;
    char name[50];
    float salary;
	/*EXEC SQL 调用 sql*/
    EXEC SQL SELECT name, salary INTO :name, :salary FROM employees WHERE id = :emp_id;

    if (sqlca.sqlcode == 0) { /* sqlca 检查SQL执行状态 */
        printf("Employee Name: %s\nSalary: %.2f\n", name, salary);
    } else {
        printf("Error retrieving employee details: %s\n", sqlca.sqlerrm.sqlerrmc); /* 输出错误信息 */
    }
    /* 关闭数据库连接等后续操作 */
    return 0;
}

SQL提供了将SQL语句嵌入到某种高级语言中的方式, 通常采用预编译的方法。
1、 区分主语言与SQL语句的方式:EXEC SQL <SQL语句>
2、 向主语言传递SQL语句执行的状态信息的方式:SQLCA
3、 主变量(共享变量) :
• 主语言通过主变量向SQL语句提供参数, 主变量是由主语言的程序定义的, 并用SQL的DECLARE语句说明。
• 在SQL语句中, 为了与SQL中的属性名区分, 在引用共享变量时, 前面需要加“: ”
在这里插入图片描述

游标

在这里插入图片描述
这是啥,会不了一点,等等再学。

存储过程

存储过程是指保存的SQL语句集合,可以接受和返回用户提供的参数。
存储过程已在服务器注册。
存储过程具有安全特性(例如权限)和所有权链接,以及可以附加到它们的证书。
存储过程可以强制应用程序的安全性。
存储过程允许模块化程序设计。
存储过程是命名代码,允许延迟绑定。
存储过程可以减少网络通信流量。

回顾

学了一大圈,其实要记得语句并不多,在这里总结个背诵版:

参加软考(全国计算机技术与软件专业技术资格(水平)考试)的数据库相关考试,考生需要熟悉和掌握一系列 SQL 语句以应对试题中涉及的数据库操作与查询任务。以下是一些关键的 SQL 语句类别和具体的语法,这些都是备考时应重点复习和理解的内容:

数据定义语言 (Data Definition Language,DDL)

处理数据库、表、索引、视图

数据库和表的操作
  • 创建数据库 (CREATE DATABASE):

    CREATE DATABASE database_name;
    
  • 删除数据库 (DROP DATABASE):

    DROP DATABASE database_name;
    
  • 创建表 (CREATE TABLE):

    CREATE TABLE table_name (
        column1 datatype [column_constraint],
        column2 datatype [column_constraint],
        ...
        [table_constraint]
    );
    
  • 删除表 (DROP TABLE):

    DROP TABLE table_name;
    
  • 修改表 (ALTER TABLE):

    • 添加列:
      ALTER TABLE table_name ADD COLUMN column_name datatype [column_constraint];
      
    • 删除列:
      ALTER TABLE table_name DROP COLUMN column_name;
      
    • 更改列定义:
      ALTER TABLE table_name MODIFY COLUMN column_name new_datatype [column_constraint];
      
    • 重命名列:
      ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
      
    • 添加、修改或删除表约束:
      ALTER TABLE table_name ADD [CONSTRAINT constraint_name] constraint_type ...;
      ALTER TABLE table_name DROP CONSTRAINT constraint_name;
      
索引
  • 创建索引 (CREATE INDEX):

    CREATE [UNIQUE] INDEX index_name ON table_name (column_name [ASC|DESC]);
    
  • 删除索引 (DROP INDEX):

    DROP INDEX index_name ON table_name;
    
视图

关键词:as sql语句

  • 创建视图 (CREATE VIEW):

    CREATE VIEW view_name AS SELECT column_list FROM table_name WHERE condition;
    
  • 修改视图 (ALTER VIEW): 视图修改通常限于重定义视图的查询语句。

    ALTER VIEW view_name AS SELECT column_list FROM table_name WHERE new_condition;
    
  • 删除视图 (DROP VIEW):

    DROP VIEW view_name;
    

数据操纵语言 (DML)

DML是处理数据的,DDL是处理数据库的。

数据操作
  • 插入数据 (INSERT):

    INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
    
  • 更新数据 (UPDATE):

    UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
    
  • 删除数据 (DELETE):

    DELETE FROM table_name WHERE condition;
    
查询数据
  • 基本查询 (SELECT):

    SELECT column_list FROM table_name [WHERE condition] [ORDER BY column_name [ASC|DESC]];
    
  • 联接查询 (JOIN):

    SELECT column_list
    FROM table1
    JOIN table2
      ON table1.column = table2.column
    [WHERE condition];
    -- 包含 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
    
  • 分组与聚合函数 (GROUP BY, HAVING, COUNT, SUM, AVG, MIN, MAX):

    SELECT column1, COUNT(column2), AVG(column3)
    FROM table_name
    GROUP BY column1
    HAVING condition;
    
  • 子查询 (SELECT within SELECT):

    SELECT column_list
    FROM table_name
    WHERE column IN (SELECT subquery_column FROM another_table WHERE condition);
    
  • 集合查询 (UNION, INTERSECT, EXCEPT):

    SELECT column_list FROM table1
    UNION [ALL]
    SELECT column_list FROM table2;
    

数据控制语言 (DCL)

管理权限

权限管理
  • 授予权限 (GRANT):

    GRANT privilege_list ON object TO user [WITH GRANT OPTION];
    
  • 收回权限 (REVOKE):

    REVOKE privilege_list ON object FROM user;
    

事务处理 (BEGIN TRANSACTION, COMMIT, ROLLBACK):

BEGIN TRANSACTION;
-- SQL statements...
COMMIT;
-- 或
ROLLBACK;

触发器 (CREATE TRIGGER):

CREATE TRIGGER trigger_name
[BEFORE|AFTER] event_type ON table_name
FOR EACH ROW
BEGIN
  -- SQL statements...
END;

存储过程 (Stored Procedure)

存储过程是一种预编译的数据库对象,包含一组可重复使用的SQL语句和控制流语句。存储过程封装了复杂的业务逻辑,提高了代码复用性、执行效率和安全性。
类似于python函数,java中定义类

创建存储过程
CREATE PROCEDURE procedure_name 
(
    [IN param1 datatype, OUT param2 datatype, ...] 
)
BEGIN
    -- SQL statements, control flow constructs (IF, CASE, LOOP, etc.)
    -- and other procedures or functions calls
END;
调用存储过程
CALL procedure_name(param_value1, param_value2, ...);
修改存储过程
ALTER PROCEDURE procedure_name
BEGIN
    -- Updated SQL statements and logic
END;
删除存储过程
DROP PROCEDURE procedure_name;

嵌入式SQL (Embedded SQL)

嵌入式SQL是将SQL语句直接嵌入到高级程序设计语言(如C、C++、Java等)源代码中的一种编程技术。

定义与使用主变量
EXEC SQL BEGIN DECLARE SECTION;
int id;
char name[50];
EXEC SQL END DECLARE SECTION;

// ...

EXEC SQL SELECT id, name INTO :id, :name FROM employees WHERE id = 1;
预编译与动态SQL
  • 使用预编译器对嵌入SQL的源代码进行预处理。
  • 使用 EXEC SQL INCLUDEEXEC SQL PREPARE 语句处理动态SQL。

游标 (Cursor)

游标是数据库中用于遍历、检索和操作结果集的一种机制。
虽然游标和存储过程都能使用控制语句,但是游标主要用来处理查询结果,类似于dao层的xml文件,而存储过程处理完会改变表存储。

声明游标
DECLARE cursor_name CURSOR FOR
SELECT column_list FROM table_name WHERE condition;
打开游标
OPEN cursor_name;
使用游标读取数据
FETCH cursor_name INTO variable_list;
关闭游标
CLOSE cursor_name;
游标操作示例
DECLARE employee_cursor CURSOR FOR
SELECT id, name, salary FROM employees WHERE department = 'IT';

OPEN employee_cursor;

LOOP
  FETCH employee_cursor INTO emp_id, emp_name, emp_salary;
  EXIT WHEN NOT FOUND;

  -- Process fetched row
  -- ...
END LOOP;

CLOSE employee_cursor;

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

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

相关文章

基于ssm的大学生租房平台的设计与实现(java源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的大学生租房平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 大学生租房平台的设计与实现的主…

Python数据分析可视化之Pandas的使用

一、项目介绍 数据获取与存储&#xff1a;能够使用Python财经数据接口包tushare下载股票交易数据&#xff0c;并将数据保存到CSV文件或MySQL数据库中。数据处理&#xff1a;能够用Pandas从CSV文件、Excel文件以及MySQL数据库中读取数据。能够使用Pandas对数据进行简单处理和深…

某狗网歌曲接口逆向之加密算法刨析

逆向网址 aHR0cHM6Ly93d3cua3Vnb3UuY29t 逆向链接 aHR0cHM6Ly93d3cua3Vnb3UuY29tL21peHNvbmcvN2dxcGVzNjguaHRtbA 逆向接口 aHR0cHM6Ly93d3dhcGkua3Vnb3UuY29tL3BsYXkvc29uZ2luZm8 逆向过程 请求方式&#xff1a;GET 逆向参数 signature:1898d8f157837fadc9751fdacf1398f9 …

天猫精灵要会员,不能听歌,还能用来干什么呢?榨干它的剩余价值

目录 起因&#xff1a;以听歌为主要功能的设备&#xff0c;却不能听歌了 1.蓝牙音箱 2.控制智能家电 3.万能遥控器&#xff0c;需要一个外接设备 4.倒计时/提醒&#xff0c;闹钟提醒&#xff0c;整点提醒&#xff08;这功能有人不喜欢&#xff0c;闲吵&#xff0c;还不能关…

职场证件照:不只是一张照片那么简单,这些细节请注意

随着毕业季的到来&#xff0c;许多应届生已经开始在各自的岗位上实习&#xff0c;准备迎接转正的挑战。在这个过程中&#xff0c;一张得体的职场证件照将成为你职业生涯中的一张重要名片。在职场中&#xff0c;证件照的应用场景多种多样&#xff0c;从窗口岗位的公示到工作牌上…

Pytorch Windows EOFError: Ran out of input when num_workers>0

关于深度学习的一些学习框架,我使用过pytorch,caffe,caffe2,openchatkit,oneflow等,最近我将长达几十万字的报错手册重新进行了整理,制作出一个新的专栏,主要记录这几种常见的开发框架在安装和使用过程中常见的报错,以及我是如何解决掉的,以此来帮助更多的深度学习开…

紫光展锐T610平台_4G安卓核心板方案定制开发

紫光展锐T610核心板配备Android 11操作系统&#xff0c;采用12nm制程工艺。该处理器CPU由2颗基于Cortex-A75架构的大核心和6颗基于Cortex-A55架构的小核心组成&#xff0c;最高主频为1.8GHz。GPU采用的是614.4MHz的Mali G52&#xff0c;可以流畅播放2400*1080分辨率视频&#x…

maven之pom中的build标签

1、build标签分类 1.1、全局配置&#xff08;project build&#xff09; 针对整个项目的所有情况都有效。 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"htt…

知道智源开源最强语义向量模型BGE是什么吗?

Embedding模型作为大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;的一个重要辅助&#xff0c;是很多LLM应用必不可少的部分。但是&#xff0c;现实中开源的Emebdding模型却很少。北京智源人工智能研究院&#xff08;BAAI&#xff09;开源了BGE系列Emb…

Proxmox VE qm 方式恢复虚拟机

前言 使用qm 恢复Proxmox VE虚拟机&#xff0c;高效便捷。 登录Proxmox VE shell 执行恢复操作 假设备份好的文件在其它主机存储&#xff0c;我们可以下载到Proxmox VE本地目录下&#xff0c;如何执行虚拟化恢复操作--storage local-lvm&#xff08;恢复后存储到的位置&…

【linux】TCP编程{三次握手/四次挥手/API注意点/代码}

文章目录 1.API介绍1.1wc -l dirName1.2inet_pton1.3inet_aton1.4inet_ntop 2.三次握手与四次挥手1.三次握手2.四次挥手3.应用程序和TCP协议层如何交互总结 3.TCP 和 UDP 对比1.宏观2.详细 4.地址转换函数inet_ntoa 5.TCP编程代码Makefiletcp_client.cctcp_server.cctcp_server…

TypeScript学习--day1

一、介绍 TypeScript是JS的超集&#xff0c;为JS添加了类型支持。 1.1 为什么添加类型支持 JS代码的错误大部分是类型错误&#xff0c;增加改Bug时间&#xff0c;影响开发效率。 静态类型&#xff1a;编译期做类型检查 动态类型&#xff1a;执行期做类型检查 TS--静态类型编…

前端保留两位小数

一、保留两位小数&#xff08;四舍五入&#xff09; 解决方案&#xff1a;使用 toFixed(x) 方法可以对小数进行指定位数保留&#xff0c;其中x是要保留的位数用法&#xff1a;num.toFixed(x)&#xff0c;其中num为需要操作的数据&#xff0c;x为要保留的位数示例&#xff1a;1…

力扣LeetCode138. 复制带随机指针的链表 两种解法(C语言实现)

目录 题目链接 题目分析 题目定位&#xff1a; 解题思路 解题思路1&#xff08;粗暴但是复杂度高&#xff09; 解题思路2&#xff08;巧妙并且复杂度低&#xff09; 题目链接 138. 复制带随机指针的链表https://leetcode-cn.com/problems/copy-list-with-random-pointer/ …

双写一致性问题

双写一致性问题&#xff1a;同一份数据&#xff0c;需要写数据库、写缓存。数据库中的数据和缓存中的数据要一致 解决办法&#xff1a;延迟双删 当我们要进行更新操作时&#xff0c;先删除缓存&#xff0c;再更新数据库&#xff0c;延迟几百ms再删除一次redis的缓存数据。 示…

2023年蓝桥杯——日期统计

目录 题目链接&#xff1a;1.日期统计 - 蓝桥云课 (lanqiao.cn) 题目描述 思路 代码思路 定义数据结构&#xff1a; 处理每一个月&#xff1a; 检查日期序列在num100中是否存在&#xff1a; 计数匹配的日期数&#xff1a; 输出结果&#xff1a; 代码实现 总结 题目链…

【Python习题】某景区门票的优惠措施为:购买5张以内门票不打折,5到20张打九折,20张以上打八折。编写程序,根据购买的门票数量,输出总票价。

题干 某景区门票的优惠措施为:购买5张以内门票不打折&#xff0c;5到20张打九折&#xff0c;20张以上打八折。编写程序&#xff0c;根据购买的门票数量&#xff0c;输出总票价。 代码

介绍几个好用的电商(淘宝京东1688)API接口,可测试

以下是几个好用的电商&#xff08;淘宝、京东、1688&#xff09;API接口&#xff0c;这些接口都可以进行测试以确保其稳定性和可用性&#xff1a; taobao.item_get-获取淘宝商品数据接口返回值说明 1.请求方式&#xff1a;HTTP POST GET &#xff08;复制薇&#xff1a;Anzex…

2024.4.13 Python 爬虫复习day01

目录 day01_HTTP协议HTML页面web服务器 各类名词解释 URL统一资源定位符 HTTP协议 HTML页面 知识点: 第一个页面 标题标签和图片标签 注册页面 登录页面 WEB服务器 安装fastapi和uvicorn 原始命令方式 镜像源命令方式 工具方式 快速搭建web服务器 知识点: 示例…

CH254X 8051芯片手册介绍

1 8051CPU 8051是一种8位元的单芯片微控制器&#xff0c;属于MCS-51单芯片的一种&#xff0c;由英特尔(Intel)公司于1981年制造。Intel公司将MCS51的核心技术授权给了很多其它公司&#xff0c;所以有很多公司在做以8051为核心的单片机&#xff0c;如Atmel、飞利浦、深联华等公…