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接口,有很多不明白相当于重新学习了一遍。
评论留言