数据库原理

表的基本操作

交、并、减、乘、除、选择、投影、连接

交,并

减S-A:去除S中所有A的元素

乘SxA:

选择、投影

等值连接、自然连接

数据库

建表、视图、增、删、改、查、并

设某公司的信息管理系统中有三个基本表:

职工表 E(E#,ENAME,AGE,SEX, ECITY),其属性是职工编号、姓名、年龄、性别和籍贯。

部门表 C(C#,CNAME,TELE),其属性是部门编号、部门名称和电话号码

工作表 W(E#,C#,SALARY),其属性是职工编号、部门编号和工资。

(1) 用 SQL 语言建立 W 表,要求满足以下完整性约束条件的定义:

① 定义关系的主码,② 定义参照完整性,③ SALARY≥1000。

例题

sql 复制代码
-- 首先创建职工表E
CREATE TABLE E (
    E# INT PRIMARY KEY,    -- 职工编号为主码
    ENAME VARCHAR(100),    -- 姓名
    AGE INT,              -- 年龄
    SEX CHAR(1),          -- 性别
    ECITY VARCHAR(100),     -- 籍贯
    CHECK AGE>0            --约束
);

-- 然后创建部门表C
CREATE TABLE C (
    C# INT PRIMARY KEY,    -- 部门编号为主码
    CNAME VARCHAR(100),    -- 部门名称
    TELE VARCHAR(20)       -- 电话号码
);

-- 最后创建工作表W,并定义主码、外码和工资约束
CREATE TABLE W (
    E# INT,                -- 职工编号
    C# INT,                -- 部门编号
    SALARY DECIMAL(10, 2), -- 工资,使用DECIMAL类型以精确表示小数
    PRIMARY KEY (E#, C#),  -- 主码为职工编号和部门编号的组合
    FOREIGN KEY (E#) REFERENCES E(E#),  -- 外码E#引用职工表E的主码
    FOREIGN KEY (C#) REFERENCES C(C#),  -- 外码C#引用部门表C的主码
    CHECK (SALARY > 1000)  -- 工资必须大于1000
);

(2) 查询年龄大于 25 岁的女职工的职工编号。

sql 复制代码
SELECT E#
FROM E
WHERE AGE > 25 AND SEX = 'f';

(3) 为每个部门中超过 50 岁的女职工加薪 1000 元。

sql 复制代码
UPDATE W
JOIN E ON W.E# = E.E#
SET W.SALARY = W.SALARY + 1000
WHERE E.AGE > 50 AND E.SEX = 'f';

(4) 请为女职工信息建立一个视图 E_W,属性包括职工编号 E#, 职工姓名 ENAME, 所在部门编号 C#,所在部门名称 CNAME,工资 SALARY。

sql 复制代码
CREATE VIEW E_W AS
SELECT 
    E.E# AS 职工编号,
    E.ENAME AS 职工姓名,
    W.C# AS 所在部门编号,
    C.CNAME AS 所在部门名称,
    W.SALARY AS 工资
FROM 
    E
JOIN W ON E.E# = W.E#   --并表
JOIN C ON W.C# = C.C#
WHERE 
    E.SEX = '女'
ORDER BY W.SALARY ASC;  --排序

sql 复制代码
INSERT INTO users (name, email) 
VALUES ('John Doe', '[email protected]');

sql 复制代码
DELETE FROM users WHERE id = 1;

sql 复制代码
UPDATE users SET email = '[email protected]' WHERE id = 1;

sql 复制代码
SELECT * FROM users WHERE id = 1;


关系模式

元素集,用括号表示。

基本函数依赖:

元素之间依赖关系,用括号表示。

闭包:

根据所给元素,推其最大元素集

候选码:

函数依赖进一步分L、R。

消除L、R公共元素,只在L中出现的必为候选码,只在R中出现的必不是候选码,其余元素进一步确认。

从L中候选码开始试,加入适当的其余集中的元素,直到可以推出全集。此时的元素为候选码集。

三级范式+BCNF

第一范式:所有数据项均为原子,不可再分,且无重复。

第二范式:第一范式+非主属性对主键必须完全依赖,不允许部分依赖。

第三范式:第一范式+第二范式+所有依赖关系必须为直接依赖,不允许传递依赖。

BCNF:候选码只包含L。


E-R图

主体:长方形

属性:圆形

对应关系:菱形

基础概念

两段锁协议

两段锁协议是数据库并发控制的核心机制,通过约束锁的获取与释放顺序,确保事务调度的可串行性。

事务被明确划分两个阶段,通过"先加锁,后解锁"的强制操作,避免并发冲突。

加锁阶段,事务读、写前申请锁,禁止释放任何锁

解锁阶段,释放已经持有的锁,但不能再申请新锁。(若多个事务互相等待对方释放资源,将引发死锁)

相关推荐
星星点点洲2 小时前
【缓存与数据库结合最终方案】伪从技术
数据库·缓存
小黑屋的黑小子2 小时前
【MySQL】MySQL索引与事务
数据库·mysql·oracle
OK_boom5 小时前
Dapper的数据库操作备忘
数据库
艺杯羹5 小时前
JDBC之ORM思想及SQL注入
数据库·sql·jdbc·orm·sql注入
blackA_6 小时前
数据库MySQL学习——day4(更多查询操作与更新数据)
数据库·学习·mysql
极限实验室7 小时前
Easysearch 迁移数据之 Reindex From Remote
数据库
朴拙数科7 小时前
基于LangChain与Neo4j构建企业关系图谱的金融风控实施方案,结合工商数据、供应链记录及舆情数据,实现隐性关联识别与动态风险评估
数据库·langchain·neo4j
小李学不完7 小时前
Oracle--SQL事务操作与管理流程
数据库
qq_441996057 小时前
为何 RAG 向量存储应优先考虑 PostgreSQL + pgvector 而非 MySQL?
数据库·mysql·postgresql
Ivan陈哈哈8 小时前
Redis是单线程的,如何提高多核CPU的利用率?
数据库·redis·缓存