数据库原理

表的基本操作

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

交,并

减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', 'john.doe@example.com');

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

sql 复制代码
UPDATE users SET email = 'new.email@example.com' WHERE id = 1;

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


关系模式

元素集,用括号表示。

基本函数依赖:

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

闭包:

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

候选码:

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

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

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

三级范式+BCNF

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

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

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

BCNF:候选码只包含L。


E-R图

主体:长方形

属性:圆形

对应关系:菱形

基础概念

两段锁协议

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

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

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

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

相关推荐
薛晓刚35 分钟前
当MySQL的int不够用了
数据库
SelectDB技术团队1 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光1 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12011 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色1 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
颜颜yan_2 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库
lichenyang4532 小时前
管理项目服务器连接数据库
数据库·后端
沙振宇2 小时前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql
杨云龙UP3 小时前
CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC详细图文教程
数据库·oracle
ezl1fe3 小时前
RAG 每日一技(十八):手写SQL-RAG太累?LangChain的SQL智能体(Agent)前来救驾!
数据库·人工智能·后端