约束
1.主键约束:
设置主键的三种方法1.在创建表的时候,给其设置
- CREATE TABLE p1(
pid INT(4) PRIMARY KEY,
pname VARCHAR(20));
2.CREATE TABLE p2(
pid INT(4),
pname VARCHAR(20),
PRIMARY KEY(pid));
3.不在创建表的时候给其设置
alter table + 表名 add constraint 主键的名称 + primary key(指定的列(主键一般是id))设置联合主主键==>单独的一列是可以重复的,但联合的内容就不能重复了
CREATE TABLE p4(
pid INT(4),
pname VARCHAR(20),
PRIMARY KEY(pid,pname)
);
4.删除主键
alter table 表名 drop primary key 因为表里的主键只有一个
ALTER TABLE p4 DROP PRIMARY KEY
5.自增长策略:
1.一般针对于整形
2.一般是给主键设置自增长 auto_increment
3.在插入的时候自增长不需要进行插入(i++,也就是每次自增长1)
2.非 null约束
给其字段加上非null约束,这个字段是不能为null,但是可以重复 not null
3.唯一约束
唯一,不能重复 unique
主键约束的区别:1.主键约束在表里只能有一个,唯一约束是可以有多个
2.主键约束不能为null,唯一约束是可以为null
创建唯一约束的三种写法: 1.在创建表的时候创建:
create table p6(
pid int(4) primary key ,
pname varchar(20) unique );
2.第二种写法:
create table p8(
pid int(4),
pname varchar(20),
pwd varchar(20),
unique(pname) );
第三种写法: alter table p10 add constraint u_p9 unique(pname)
alter table 表名 add constraint 唯一约束的名字(可以省略) unique(列的名字)
删除唯一约束: alter table p11 drop index u_p11 ==alter table + 表名 + drop index(索引)+(名字)
delete 与truncate 区别: delete 只删除数据,不影响表的结构
truncate:删除整张表,重现构建一张新表(表结构会发生改变)
外键约束:
-
就是因为关系型数据库,表与表之间存在的关系
2.作用:把表与表之间进行关联
3 foreign key==>关键字
注意事项:1. 设置到两张表 : 主表(一的一方) teacher 从表(多的)外键是设置在多的一方
2.主表的主键对应从表的外键
3.主键的大小以及长度必须与外键的相同
4.增加数据的时候,必须先增加主表里的数据 ,删除的时候,需要先删除从表,再删除主表的信息(保证数据的完整性) -
设置外键的语法: alter table 表名 add [constraint fk_stu] 设置外键名称 foreign key(外键的列) references 主表(主键)
删除外键: alter table student drop foreign key fk_stu ==> alter table 表名 drop foreign key 外键的名称 (只能删除外键,并不能删除外键的索引)
-
表与表之间存在的关系:
1.需要把电脑办公修改成服装 ==> 影响的行数是3 ==》效率低 ==>如图
2. 修改10000个这个数据 ==> 影响的行数是10000
设置表要遵循三大范式: 第一大 :每一个列都是一个原子单位: (不能进行再拆分)
第二大: 每一列都是描述的一种事务,每一个字段都只能与主键产生依赖关系
第三大:不能出现传递的依赖(局部依赖) a–>b–>c(错误) 学生编号 <== 学生所有院校 <== 学生所在 院校的名称 局部依赖
三大范式 五大约束: 主键 唯一 非null 外键约束 默认约束
多表进行查询
等值查询 : 语法: select * from 表名 别名1,表2,别名2 where 关键的id
select * from product p ,category c where p.cid = c.cid
与非等值查询(没有)
内连接查询:inner join(左表与右表可以互换位置) on 匹配的条件
#查询参加了考试的同学信息(学号、学生姓名(学生表)、科目编号、分数(分数表))
select s.studentNo,s.studentName, r.subjectNo,r.studentResult from result r
inner join student s on s.studentNo=r.studentNo
左外连接: 以左表为基准,右表一一匹配,能匹配上的,都正常显示,不能匹配,左表数据依然显示, 右表的数设置为null
关键 字:left join on
查询出了所有同学,不考试的也查出来 ==>不管是否参加考试,都需要查询
select s.studentNo,s.studentName,r.subjectNo,r.studentResult from
student s left join result r on s.studentNo = r.studentNo
#查一下缺考的同学
select s.studentNo,s.studentName,r.subjectNo,r.studentResult from
student s left join result r on s.studentNo = r.studentNo where r.studentResult is null。