mysql关系

关系

  • 创建成绩表scores,结构如下
    • id
    • 学生
    • 科目
    • 成绩

思考:学生列应该存什么信息呢?

答:学生列的数据不是在这里新建的,而应该从学生表引用过来,关系也是一条数据;

根据范式要求应该存储学生的编号,而不是学生的姓名等其他信息。

同理,科目表也是关系列,引用科目表中的数据。

  • 创建表的语句如下
1
2
3
4
5
6
create table tableName(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5,2)
);

外键

  • 如何保证数据的有效性呢?任何整数都可以吗?
  • 必须是学生表id列中存在的数据,可以通过外键约束进行数据的有效验证
  • 为stuid添加外键约束
1
alter table scores add constraint stu_sco foreign key(stuid) references students(id);
  • 在创建表时可以直接创建约束
1
2
3
4
5
6
7
8
9
10
create table tableName(
id int primary key auto__increment,
stuid int,
subid int,
score decimal(5,2),

#创建约束
foreign key(stuid) refereneces students(id),
foreign key(subid) refereneces subjects(id)
)

外键的级联操作

  • 在删除students表的数据时,如果这个id值在scores表中已经存在,则会抛出异常
  • 推荐使用逻辑删除,不仅可以避免这个问题还能使数据更安全。
    • 逻辑删除,便是给表加一个isdelete字段。该行数据的isdelete列值为某个自定的值时便可以判断删除与否。
文章作者: Luo Jun
文章链接: /2018/04/12/mysqlrelation/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Aning