MySQL数据库第二天

约束

1.主键约束
设置主键的三种方法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:删除整张表,重现构建一张新表(表结构会发生改变)

外键约束:

  1. 就是因为关系型数据库,表与表之间存在的关系
    2.作用:把表与表之间进行关联
    3 foreign key==>关键字
    注意事项:1. 设置到两张表 : 主表(一的一方) teacher 从表(多的)外键是设置在多的一方
    2.主表的主键对应从表的外键
    3.主键的大小以及长度必须与外键的相同
    4.增加数据的时候,必须先增加主表里的数据 ,删除的时候,需要先删除从表,再删除主表的信息(保证数据的完整性)

  2. 设置外键的语法: alter table 表名 add [constraint fk_stu] 设置外键名称 foreign key(外键的列) references 主表(主键)

    删除外键: alter table student drop foreign key fk_stu ==> alter table 表名 drop foreign key 外键的名称 (只能删除外键,并不能删除外键的索引)

  3. 表与表之间存在的关系:
    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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值