20201015黄春跃

20201015黄春跃

知识点

主键约束

主键约束最显著的特征是主键列中的值是不允许重复的,通过主键约束可强制表的实体完整性。当
创建或更改表时可通过定义 primary key约束来创建主键。一个表只能有一个primary key约束,
且primary key约束中的列不能接受NULL值。
alter table tab_name add constraint pk_name primary key (deptno);

-- 创建表时
CREATE TABLE `table_name` (
`id` int(0) NOT NULL,
`name` varchar(20) ,
PRIMARY KEY (`id`) -- 设置主键
);
-- 设置主键是deptno
ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);

自增长列

并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自增长列是int类
型的,其值是int类型的,其值是由数据库自动维护的,是永远都不会重复的,因此自增长是最适合作为
主键列的。在创建表时,通过auto_increment关键字来标识自增长列,在MySQL数据库中自增长列必
须时主键列。

自增长与主键

CREATE TABLE emp(
empNo INT PRIMARY KEY AUTO_INCREMENT,
job VARCHAR(10),
mgr INT,
sal DOUBLE,
comm DOUBLE,
deptno INT
)CHARACTER SET utf8;

唯一约束

对于非主键列中的值也要求唯一性时,就需要唯一约束

ALTER TABLE dept ADD CONSTRAINT UNIQUE(deptname);

默认约束

为列中的值设置默认值,default ….,如果已经定了值,默认值就无效了

外键约束

表中列的值来自于另外一张表的主键或唯一键的列称为外键FK,将被引用值得表称为主表或父表,将引
用值得表称为从表或子表。

alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES
dept(deptno);

dept 是主表, userinfo 是从表
在 userinfo 表中添加或修改时, dept_no 列的值必须是 dept 表中 deptno 字段中的存在值
删除从表数据可以直接删除
删除主表数据时,会先检查从表中有没有对此数据的关联,如果有不能直接删除
on delete CASCADE/ on update CASCADE 级联删除 / 级联更新

笛卡尔乘积现象

表查询中的笛卡尔乘积现象:多行表在查询时,如果定义了无效连接或者漏写了连接条件,就会产生笛
卡尔乘积现象,所谓的笛卡尔乘积及时每个表的每一行都和其他表的每一行组合。

SELECT * FROM emp,dept;

等值连接查询

通常是在存在主键外键关联关系的表之间的连接进行,使用"="连接相关的表
n个表进行等值连接查询,最少需要n-1个等值条件来约束

--查询每个部门的所有员工
select dept.dname,emp.ename from emp,dept where dept.deptno = emp.deptno;

自连接查询

表表查询不仅可以在多个表之间进行查询,也可以在一个表之中进行多表查询

--查询当前公司员工和所属上级员工的信息
select e1.empno as 员工编号,e1.ename as 员工姓名,e2.empno as 领导编号,e2.ename as 领导
姓名 from emp as e1,emp as e2 where e1.mgr = e2.empNo;

内连接查询

内连接查询使用 inner join 关键字实现, inner 可以省略。内连接查询时,条件用 on 连接,多个条
件使用 () 将其括起来.

--查询每个部门的所有员工
select dept.name,emp.name from emp inner join dept on emp.deptno = dept.deptno;

和等值查询差不多

外连接

外连接分为左外连接( left outer join ) 和右外连接( right outer join )其值 outer 可以省
略。外连接查询时,条件用 on 连接,多个条件使用 () 将其括起来.
左外连接表示以左表为主表,右外连接表示以右表为主表。查询时将主表信息在从表中进行匹配

--查询每个部门的所有员工
select dept.name,emp.name from emp right join dept on emp.deptno = dept.deptno;
select dept.name,emp.name from emp left join dept on emp.deptno = dept.deptno;

总结:

晚上林老师告诉我们下周会迎来第二轮笔试,侧重点在数组 集合 string类 文件 io流 数据库的数据类型

今晚上就看了看集合的set接口,有很多不明白相当于重新学习了一遍。

标签

评论

this is is footer