目录
数据库知识点:
触发器:
作用: 在操作(删除 , 修改)之前的判断等.
模板:
create trigger '触发器名字'
on '基本表'
for (update/delete/insert)
as begin
select --输出
from --输出所在的基本表 (inserted , deleted
if(
select
from
) '判断条件' --rollback 回滚,即不执行操作
print --打印汉字
end
--begin -> end 相当于大括号
--inserted 要添加的数据所存储的表
--deleted 要删除的数据所存储的表
--级联删除的例题
--5、定义一个触发器,实现对books表的级联删除操作
create trigger two_delete_books
on books
for delete
as begin
delete sale_item --连接表
from sale_item , deleted
where sale_item.book_no = deleted.book_no
delete books --被连接表
from books , deleted
where books.book_no = deleted.book_no
end
--级联更新???
--7、定义一个触发器,当修改sale_item表中的销售数量或者价格时,自动更新sales表中的订单金额
create trigger update_sale_item
on sale_item
for update
as begin
update sales
set sales.total_amt = inserted.qty * unit_price
from inserted , sales
where inserted.order_no = sales.order_no
end
数据库作业(触发器:
--1. (简答题) 针对bookshop数据库,完成以下操作:
--1、针对employee表写一个DELETE触发器,显示删除的员工人数。(12分)
create trigger delete_nums
on employee
for delete
as begin
select count(*)
from deleted
end
--2、定义一个触发器,保证新添加的员工的工资不能超过5000元。(12分)
create trigger check_sale
on employee
for insert
as begin
if (
select salary
from inserted
) > 5000 rollback
end
--3、对sale_item表创建一个触发器,当插入一条销售明细记录时,如果该记录的产品数量超过5,则显示“欢迎成为本公司的VIP会员!”(12分)
create trigger insert_sale
on sale_item
for insert
as begin
if(
select qty
from inserted
) > 5 print '欢迎成为本公司的VIP会员!'
end
--4、定义一个触发器,实现对sales表的级联删除操作。(12分)
create trigger two_delete_sales
on sales
for delete
as begin
delete sale_item
from sale_item , deleted
where sale_item.order_no = deleted.order_no
delete sales
from sales , deleted
where sales.order_no = deleted.order_no
end
--5、定义一个触发器,实现对books表的级联删除操作。(12分)
create trigger two_delete_books
on books
for delete
as begin
delete sale_item
from sale_item , deleted
where sale_item.book_no = deleted.book_no
delete books
from books , deleted
where books.book_no = deleted.book_no
end
--6、针对employee表写一个UPDATE触发器,限制每次工资额的变动不能超过原工资的20%。(20分)
create trigger update_employee
on employee
for update
as begin
if(
--select (inserted.salary > 1.2 * deleted.salary)
--from inserted , deleted
select (inserted.salary - deleted.salary) / delected.salarry
from inserted , deleted
) > 0.2 rollback
end
--7、定义一个触发器,当修改sale_item表中的销售数量或者价格时,自动更新sales表中的订单金额。(20分)
create trigger update_sale_item
on sale_item
for update
as begin
update sales
set sales.total_amt = inserted.qty * unit_price
from inserted , sales
where inserted.order_no = sales.order_no
end
leetcode每日一题:
class Solution {
public:
bool detectCapitalUse(string word) {
int a = 0 , b = 0;
for(auto ao : word){
if(ao >= 'a' && ao <= 'z') a ++;
if(ao >= 'A' && ao <= 'Z') b ++;
}
if(a == word.length() || b == word.length()) return true;
if(b == 1 && word[0] >= 'A' && word[0] <= 'Z') return true;
return false;
}
};
牛客:
题意: 给你一个有 m 个托的天平 , 找出 n 件物品里面哪一件与其他物品重量不一样的. (一个托盘上不止能放一件物品. 并且能同时比较托盘上所有(一个托盘一堆)的堆的大小. 求最小的比较次数.
解题: 贪心思想, 有 m 个托盘 , 那么就可以同时比较 m堆相同物件数的堆的重量 和 1堆任意物件数的堆的重量 (m堆分别在m个托盘上 , 剩下的1堆则由托盘上情况来判断 , 若托盘平衡 , 那么不同重量的物件一定在剩下的那一堆物件中 . 若托盘不平衡 , 那么重量不同的物件就在那堆更重的里面). 因为要是最坏情况的最优解 , 所以我们还有一个地方要注意 , 就是尽可能的把最后一堆的均分到前m堆.
#include<bits/stdc++.h>
using namespace std;
signed main(void){
int t; cin >> t;
while(t --){
int n , m , cut = 0; cin >> n >> m;
while(n > m + 1){
int cnt = n / (m + 1);
if(n % (m + 1) == 0) n = cnt;
else n = min(max(cnt + 1 , n - (cnt + 1) * m) , max(cnt , n - cnt * m));
cut ++;
}
if(n) cut ++;
cout << cut << endl;
}
return 0;
}
古今多少事都付笑谈间 , 如今多少花总在风雨中.