仅更新新条目的字段
Update field for new entries only
我正在尝试找出一种方法来更新任何新单位产品的单位代码,但保留已创建的单位产品的原始单位代码。
即如果单位代码在提供主题的年份之间发生变化,我希望单位代码反映创建单位产品时的准确代码。
这是我的表格
CREATE TABLE Units (
UnitsID INT(10) AUTO_INCREMENT,
UnitsName VARCHAR(255) NOT NULL,
UnitsCode VARCHAR(20) NOT NULL UNIQUE,
PRIMARY KEY (UnitsID)
);
CREATE TABLE UnitsOffering (
UOfferingID INT(10) AUTO_INCREMENT,
UOUnits INT(10) NOT NULL,
YIIntake VARCHAR(255) NOT NULL,
YIYear INT(4) NOT NULL,
PRIMARY KEY (UOfferingID),
FOREIGN KEY (UOUnits) REFERENCES Units(UnitsID)
);
我可以用我当前的存储过程更新它,但是当我列出单位产品和单位详细信息时,它反映了新的单位代码,而不是创建产品时数据库中的代码。
CREATE PROCEDURE UpdateUnit(IN vUnitsID VARCHAR (255), IN vUnitsCode VARCHAR (20))
BEGIN
UPDATE Units
SET UnitsCode = vUnitsCode
WHERE UnitsID = vUnitsID;
END;
这是我在创建列表时使用的 select 语句。
SELECT O.UOfferingID, U.UnitsCode, U.UnitsName, O.YIIntake, O.YIYear
FROM (UnitsOffering O
INNER JOIN Units U
ON O.UOUnits = U.UnitsID)
ORDER BY O.UOfferingID;
我不确定这是否真的可以做到。如果可以,我不确定我的表设置方式、我的更新语句或我的列表语句是否有问题。
如有任何帮助,我们将不胜感激。我试图查看一些文档以了解如何完成此操作,但我找不到合适的关键字。
下面是我希望能够列出的示例。对于此示例,如果 2021 年结束后单位代码发生变化,我希望它显示的内容。
COS10000 - Introduction to Programming - Semester 2 2021
INF30011 - Database Implementation - Semester 1 2022
COS10059 - Introduction to Programming - Semester 2 2022
有两种可能的方法:
- 在 UnitsOffering 中创建新记录时,将 UnitCode 值物理写入记录(在新列中),而不是通过 FK
链接到 Units table 中的值
- 重新设计单位 table 以便它保存历史记录,例如所有更改都被视为插入,而不是更新,并且每条记录都有 start/end 日期(或其他一些机制来识别记录何时是当前版本)。然后需要逻辑来确保将正确的值写入 UnitsOffering.UOUnits
我正在尝试找出一种方法来更新任何新单位产品的单位代码,但保留已创建的单位产品的原始单位代码。
即如果单位代码在提供主题的年份之间发生变化,我希望单位代码反映创建单位产品时的准确代码。
这是我的表格
CREATE TABLE Units (
UnitsID INT(10) AUTO_INCREMENT,
UnitsName VARCHAR(255) NOT NULL,
UnitsCode VARCHAR(20) NOT NULL UNIQUE,
PRIMARY KEY (UnitsID)
);
CREATE TABLE UnitsOffering (
UOfferingID INT(10) AUTO_INCREMENT,
UOUnits INT(10) NOT NULL,
YIIntake VARCHAR(255) NOT NULL,
YIYear INT(4) NOT NULL,
PRIMARY KEY (UOfferingID),
FOREIGN KEY (UOUnits) REFERENCES Units(UnitsID)
);
我可以用我当前的存储过程更新它,但是当我列出单位产品和单位详细信息时,它反映了新的单位代码,而不是创建产品时数据库中的代码。
CREATE PROCEDURE UpdateUnit(IN vUnitsID VARCHAR (255), IN vUnitsCode VARCHAR (20))
BEGIN
UPDATE Units
SET UnitsCode = vUnitsCode
WHERE UnitsID = vUnitsID;
END;
这是我在创建列表时使用的 select 语句。
SELECT O.UOfferingID, U.UnitsCode, U.UnitsName, O.YIIntake, O.YIYear
FROM (UnitsOffering O
INNER JOIN Units U
ON O.UOUnits = U.UnitsID)
ORDER BY O.UOfferingID;
我不确定这是否真的可以做到。如果可以,我不确定我的表设置方式、我的更新语句或我的列表语句是否有问题。
如有任何帮助,我们将不胜感激。我试图查看一些文档以了解如何完成此操作,但我找不到合适的关键字。
下面是我希望能够列出的示例。对于此示例,如果 2021 年结束后单位代码发生变化,我希望它显示的内容。
COS10000 - Introduction to Programming - Semester 2 2021
INF30011 - Database Implementation - Semester 1 2022
COS10059 - Introduction to Programming - Semester 2 2022
有两种可能的方法:
- 在 UnitsOffering 中创建新记录时,将 UnitCode 值物理写入记录(在新列中),而不是通过 FK 链接到 Units table 中的值
- 重新设计单位 table 以便它保存历史记录,例如所有更改都被视为插入,而不是更新,并且每条记录都有 start/end 日期(或其他一些机制来识别记录何时是当前版本)。然后需要逻辑来确保将正确的值写入 UnitsOffering.UOUnits