“21 天好习惯”第一期-21

目录

数据库知识点:

leetcode每日一题:

牛客:


数据库知识点:

触发器:

        作用: 在操作(删除 , 修改)之前的判断等.

        模板:

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;
}

古今多少事都付笑谈间 , 如今多少花总在风雨中.

猜你喜欢

转载自blog.csdn.net/EX_fish/article/details/121306469
21
21)