SE day19笔记

本文详细介绍了数据库操作的基础知识,包括表的创建、修改、删除,序列的使用,数据的插入、更新、删除,以及事务和约束的管理。通过具体示例,讲解了如何使用SQL语句进行数据库的日常维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.数据库表功能介绍:

  1. create table 表名(–字段名 类型(长度) 约束
    2.表的注释:单引号内加入注释,例: comment on table tb_user is ‘用户表’;
    3.拷贝已有表的结构: create table 表名 as select 字段列表 from 已有表 where 1!=1;
    create table copy_emp as select * from emp where 1!=1; – 只拷贝结构不拷贝数据
    create table copy_emp2 as select empno,ename,sal from emp; --结构和数据全部拷贝
    4.删除表drop:例: drop table copy_emp2;–drop table 表名 cascade constraints
    5.创建表:例: create table tb_student(
    –学号 主键 唯一+非空
    sid number(5),
    –学生名字不能为空
    sname varchar2(30),
    –年龄不能超过18~150
    sage number(3),
    –不是男就是女
    sgender char(3),
    –唯一的
    sqq varchar2(30)
    6.表的约束:
    1.字段后直接给约束|字段后指定约束名字添加约束
    例: create table tb_student(
    –学号 主键 唯一+非空
    –sid number(5) primary key,
    sid number(5) constraints pk_student_sid primary key,
    –学生名字不能为空
    –sname varchar2(30) not null,
    sname varchar2(30)constraints sname_notnull not null,
    –年龄不能超过18~150
    sage number(3) check(sage between 18 and 150),
    –不是男就是女
    sgender char(3) check(sgender=‘男’ or sgender = ‘女’),
    –唯一的
    sqq varchar2(30) unique)

  2. 表结构最后定义约束
    例: create table tb_student(
    –学号 主键 唯一+非空
    sid number(5),
    –学生名字不能为空
    sname varchar2(30),
    –年龄不能超过18~150
    sage number(3),
    –不是男就是女
    sgender char(3),
    –唯一的
    sqq varchar2(30),
    classid number(3),

    –定义约束 指定名字,指定约束 ,指定字段
    constraints pk_student_sid primary key(sid),
    constraints sname_notnull check(sname is not null),
    constraints ck_sage check(sage between 18 and 150),
    constraint fk_student_classid_classid foreign key(classid) references clazz(classid) on delete set null --on delete cascade )
    3.–表结构后面追加约束
    alter table tb_student add constraints student_sqq unique(sqq);
    –删除约束
    alter table tb_student drop constraints student_sqq;
    7.存在主外键关系:
    –删除数据:1.先删除从表中引用主表中当前这条数据的那些数据,然后再删除主表中的数据 —默认
    2.直接删除主表中的数据,一起把从表中引用了当前要删除的主表中的数据的这些子记录删除–on delete cascade 级联删除
    3.在删除主表中数据的时候,从表中引用了这个数据的子记录设置为null
    4.删除主表:1.先删除从表,再删除主表2.直接删除主表,级联删除主从表之间约束
    8.序列:
    –create sequence 序列名 start with 起始值 increment by 步进;
    create sequence seq_classid start with 100 increment by 2;
    –1)、currval :当前值
    –2)、nextval:下个值
    select seq_classid.nextval from dual;
    select seq_classid.currval from dual;
    insert into clazz values(seq_classid.nextval,‘27期’,‘java’);
    –drop sequence 序列名
    drop sequence seq_classid;
    –insert into 表名 values(和表结构顺序和个数和类型一致的数据可以手写也可以从别的表中获取的);
    insert into tb_student values(4,‘hah’,18,‘男’,21324324,null);
    insert into tb_student(sid,sname) values(seq_classid.nextval,(select ename from emp where sal=800));
    –insert into 表名 select 查询列 from 源表 where 过滤数据;
    insert into copy_emp select * from emp;
    select * from copy_emp;

–update 表名 set 字段=值 [,…] where 过滤行记录;
update clazz set subject=‘大数据’;
update clazz set subject=‘py’ where classid=106;
–delete [from] 表名 where 过滤行记录
delete from clazz;
delete tb_student where sid=3;
9. 删除数据 delete会开启事务
delete from tb_student;
delete from clazz;
–数据截断 truncate 如果存在主从表关系,检查整个表结构是否有被引用,如果有结构上的引用就不能删除 不会开启事务
truncate table tb_student;
truncate table clazz;
事务的开启: 还行DML语句时候 insert update delete
事务的结束: 提交 1.ddl语句 2.正常执行完 DCL 语句 C 3.正常退出客户端 4.commit
失败: 1.rollback 2.非法退出客户端

### 苍穹外卖项目 Day3 学习笔记 #### 删除菜品的业务逻辑 在苍穹外卖项目的 Day3 学习笔记中,重点涉及了删除菜品的业务逻辑。首先需要判断菜品是否是起售状态,起售状态的菜品不能够被删除。此外,如果菜品包含在一个套餐中也是不能被删除的。只有在满足删除条件的情况下,才能执行删除操作[^1]。 #### 删除菜品的同时删除对应口味 在删除菜品的过程中,还需要删除与该菜品相关的所有口味信息。这是因为每个菜品可能有多个不同的口味选项,这些口味信息存储在另一个表中。因此,在删除菜品的同时,必须同步删除其对应的所有口味记录,以保持数据的一致性和完整性[^1]。 #### 示例代码:删除菜品及其口味 以下是一个示例代码,展示了如何实现删除菜品及其相关口味的功能: ```java public void deleteDish(Long dishId) { // 查询菜品的状态 Dish dish = dishMapper.getById(dishId); if (dish == null) { throw new NoSuchElementException("菜品不存在"); } // 判断菜品是否处于起售状态 if (dish.getStatus() == Status.ENABLED) { throw new IllegalStateException("起售状态的菜品不能删除"); } // 检查菜品是否包含在套餐中 boolean isInSetmeal = setmealMapper.checkIfInSetmeal(dishId); if (isInSetmeal) { throw new IllegalStateException("菜品包含在套餐中,不能删除"); } // 删除菜品 dishMapper.deleteById(dishId); // 删除菜品对应的口味 flavorMapper.deleteByDishId(dishId); } ``` 在这个示例代码中,首先通过 `dishMapper.getById` 获取菜品的信息,然后检查菜品是否存在以及是否处于起售状态。接着,使用 `setmealMapper.checkIfInSetmeal` 方法检查该菜品是否包含在任何套餐中。如果以上条件都不满足,则调用 `dishMapper.deleteById` 删除菜品,并通过 `flavorMapper.deleteByDishId` 删除与该菜品相关的所有口味信息。 #### 扩展功能 除了基本的删除功能外,还可以考虑添加一些扩展功能,例如日志记录、事务管理等,以确保数据操作的安全性和可靠性。此外,还可以为用户提供更详细的错误提示信息,帮助用户更好地理解为什么某些菜品无法被删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值