为表property(资产表)编写一个触发器,以实现以下完整性业务规则: 如果pro_type =
时间: 2024-05-23 09:15:10 浏览: 28
'房产',则pro_price必须大于等于50000;如果pro_type='车辆',则pro_price必须大于等于100000。
可以使用以下 SQL 语句编写触发器:
CREATE TRIGGER check_pro_price
BEFORE INSERT ON property
FOR EACH ROW
BEGIN
IF NEW.pro_type = '房产' AND NEW.pro_price < 50000 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'pro_price must be greater than or equal to 50000 for properties!';
END IF;
IF NEW.pro_type = '车辆' AND NEW.pro_price < 100000 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'pro_price must be greater than or equal to 100000 for vehicles!';
END IF;
END;
这个触发器在每次向property表中插入新行之前执行,检查新的pro_price值是否符合完整性业务规则。如果不符合,触发器会引发一个错误,导致插入操作失败。注意,这个触发器只对INSERT操作生效,UPDATE操作需要另外编写触发器来检查pro_price值。
相关问题
为投资表property实现业务约束规则-根据投资类别分别引用不同表的主码
实现业务约束规则的一种方法是使用触发器。在这种情况下,我们可以创建一个触发器,每当插入一条新记录时,根据投资类别自动引用不同表的主码。
以下是一个示例触发器的代码:
```sql
CREATE TRIGGER tr_check_investment_category
BEFORE INSERT ON property
FOR EACH ROW
BEGIN
IF NEW.investment_category = 'Stocks' THEN
SET NEW.investment_id = (SELECT MAX(id) + 1 FROM stocks);
ELSEIF NEW.investment_category = 'Bonds' THEN
SET NEW.investment_id = (SELECT MAX(id) + 1 FROM bonds);
ELSEIF NEW.investment_category = 'Real Estate' THEN
SET NEW.investment_id = (SELECT MAX(id) + 1 FROM real_estate);
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid investment category';
END IF;
END;
```
在这个例子中,我们创建了一个名为 `tr_check_investment_category` 的触发器,它在每次插入新记录之前执行。如果投资类别是股票,它将引用 `stocks` 表中的最大 ID 值加 1;如果投资类别是债券,它将引用 `bonds` 表中的最大 ID 值加 1;如果投资类别是房地产,则引用 `real_estate` 表中的最大 ID 值加 1。如果投资类别无效,则触发器会引发一个错误。
这个触发器可以确保每个投资类别都引用了正确的主码,并且可以防止无效的投资类别被插入到 `property` 表中。
class Person: def __init__(self, name, age=0): self._name = name self._age = age @property def name(self): return self._name @name.setter def name(self, value): self._name = value @property def age(self): return self._age @age.setter def age(self, value): self._age = value
抱歉,由于排版原因,我之前的代码示例可能没有显示完整。以下是完整的代码示例:
```python
class Person:
def __init__(self, name, age=0):
self._name = name
self._age = age
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
@property
def age(self):
return self._age
@age.setter
def age(self, value):
self._age = value
```
请问还有其他问题吗?
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)