学习了黑马程序员JavaWebP19-P。
学习内容: 一、约束
二、数据库设计概念:限制加入表的数据保证正确性、有效性和完整性。
约束的分类:非空not null,唯一unique,主键primary key(要求非空且唯一),检查check,默认default,外键foreign key。# MySQL不支持检查约束
creat table emp( id int primary key auto_increment, #员工id,主键且自增长 ename varchar(50) not null unique, #员工姓名,非空且唯一 joindate date not null, #入职日期,非空 salary double(7,2) not null, #工资,非空 bonus double(7,2) default 0 #奖金,如果没有奖金默认为0 设置为null就是null );auto_increment 自增长 需要唯一的数值序列,不连续的时候从最后一条记录的值开始增长
外键约束:
语法:
添加外键约束:
constraint 外键名称 foreign key(外键列名) references 主表(主表列名)#创建时 alter table 表名 add constraint 外键名称 foreign key(外键列名) reference 主表(主表列名) #创建后删除外键约束:alter table 表名 frop foreign key 外键名称
三、多表查询概念:建立表结构以及表于表之间的关系
设计步骤:需求分析、逻辑分析(E-R图)、物理设计(把逻辑设计转化成物理设计)、维护设计(对新的需求进行建表、优化)
表关系:一对一(多用于表拆分,如把个人信息分为常用和不常用)、一对多(多对一)、多对多
表关系实现:
一对一:把任意一方加入外键关联另一方,并且设置外键唯一。
一对多:在多的那方建
立外键指向一的主键,即1加到m。
多对多:建立中间表,在中间表里建立外键指向两边的主键。
四、事务连接查询:
内连接:相当于查询A B交集的数据,如果有一个为null则查不出来那个。
语法:select 字段列表 from 表1,表2 where 条件; #隐式内连接
select t1.name,t2.gender,t2.dname from emp t1,dept t2 where t1.dep_id = t2.did; #给表emp起别名为t1,dept起别名为t2select 字段列表 from 表1 inner join 表2 on 条件; #显式内连接
外连接:
左外连接:查询A表所有数据和交集部分数据
语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
右外连接:查询B表所有数据和交集部分数据
语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
子查询:查询里嵌套查询
子查询根据查询结果不同作用不同:
单行单列:作为条件值,使用= != > <判断
select 字段列表 from 表 where 条件 = (子查询)
select * from dept where dname = (select name from dec where name = 'wanggang');多行单列:作为条件值,使用in等关键字进行条件判断
select * from emp where dep_id in (select did from dept where dname = 'caiwubu' or dname = 'shichangbu');多行多列:作为虚拟表
#查询入职日期是2011-11-11之后的员工信息和部门信息 需要使用内连接进行查询 #对员工信息进行一个筛选,把筛选后的表与部门信息表一起进行查询,条件是部门信息的id和筛选后的员工信息所属的部门id相同 select * from (select * from emp where join_date > '2011-11-11') t1,dept where t1.dep_id = dept.did;案例:
#查询员工编号、姓名、工资、职务id、职务名称、职务描述 select emp.id,emp.ename,emp.salary,job.id,job.jname,job.description from emp left join job on emp.job_id = job.id; #查询员工编号、姓名、工资、职务id、职务名称、职务描述、部门名称、部门位置 select emp.id,emp.ename,emp.salary,job.id,job.jname,job.description,dept.dname,dept.loc from emp left join job on emp.job_id = job.id left join dept on emp.dept_id = dept.id; #查询员工姓名和工资和薪资等级 薪资等级跟员工表没有关系但是可以通过比较员工的工资在哪个薪资等级的最高和最低工资里来判断员工属于哪个薪级 select emp.ename,emp.grade,t2.grade from emp,salarygrade t2 where emp.salary between t2.losalary and t2.highsalary; #查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级 select emp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc,t2.grade from emp,job,dept,salarygrade t2 where emp.job_id = job.id and emp.dept_id = dept.id and emp.salary between t2.losalary and t2.highsalary; select emp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc,t2.grade from emp left join job on emp.job_id = job.id left join dept on emp.dept_id = dept.id left join t2 on emp.salary between t2.losalary and t2.highsalary; #查询部门编号,部门名称,部门位置,部门人数 select dept.id,dept.dname,dept.loc,count(selcect * from emp where dept_id) from dept,emp where emp.dept_id = dept.id group by emp.dept_id;#错误案例 select dept.id,dept.dname,dept.loc,t1.count from dept,(selcect dept_id,count(*) as count from emp group by emp.dept_id) t1 where t1.dept_id = dept.id;#先分组
事务简介:是一种机制,一个操作序列,包含了一组数据库操作命令
一组数据库命令要么同时成功要么同时失败
是一个不可分割的工作逻辑单元
步骤:开启事务 start transaction或begin、回滚事务(出异常) rollback、提交事务 commit
MySQL默认自动提交 检查方式为 select @@autocommit 为1则是设置自动提交为0手动
修改方法:set @@autocommit = 0;
四大特性:A 原子性、C 一致性、I 隔离性、D 持久性
学习时间:
2022/7/11 0:44- 7/12 21:38
学习产出:
- CSDN 技术博客 1 篇


![【Java项目学习 Day03】JavaWeb [02] 【Java项目学习 Day03】JavaWeb [02]](http://www.mshxw.com/aiimages/31/1014528.png)
