mysql中的主键与外键

MySQL中的主键
主键的定义

主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

use scholldb;
create table student(
学号 char(10) not null primary key, //设置主键为学号,且是唯一主键
姓名 char(10) not null
);
联合主键

关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。对于联合主键,允许一列有重复,只要不是所有主键列都重复即可。

use scholldb;
create table student(
学号 char(10) not null ,
课程号 char(10) not null ,
成绩 float(5,2) ,
primary key(学号,课程号)   //联合外键为学号课程号
);
查询表中主键的命令:desc (表名);
MySQL中外键

保持数据的一致性、完整性。在一个库中使用多表中的主键定义一个外键,保持数据的完整性。

引用全部在一个表时数据太多太杂,所以拆为多个表,在表中设置唯一关字,然后作为表的主键,作为其他表的外键,当多表联合查询时作为关键字段

为了一张表记录的数据不要太过冗余。这和软件project的模块化思想差点儿相同类似,仅仅只是在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。假如一张学生表中把成绩和学生信息放在一张表中就太冗余了,成绩全然能够以学生的id作为区分标识。

列:在一个数据库中定义A表的外键来自B表中的C字段,此时A表作为B表的父表

创建表时创建外键
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
//
1、
create table student(
学号 char(11) not null foreign key,   
//在定义主键时添加外键。(在添加外键约束之前,必须确保引用表中的主键列已经定义)
姓名 char(10) not null 
);
​
2、
FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
create table student(
学号 char(11) not null,
姓名 char(10) not nll,
foreign key (学号) references course(学号)
//创建数据表student,并在表student上创建外键约束,让它的键 学号 作为外键引表到 course表中 的学号字段
);
对已有表创建外键

单个主键

ALTER TABLE student
ADD FOREIGN KEY (班级编号) REFERENCES class(班级编号);
//将表student中的班级编号字段作为外键引用class中的班级编号作为主键

多个主键

alter table score
add foreign key (学号) references student(学号),
add foreign key (课程号) references student(课程号);
check完整性约束

Check完整性约束是一种用于限制表中数据值的约束。它定义了一个条件,该条件必须在插入或更新数据时得到满足。如果数据不符合约束条件,操作将被拒绝并抛出错误。

通过使用Check完整性约束,可以确保表中的数据满足特定的条件,例如范围、数据类型、格式等。这样可以防止非法或无效的数据进入表中,提高数据的准确性和一致性。

以下是创建Check完整性约束的一般语法:

ALTER TABLE 表名称
ADD CONSTRAINT 约束名称 CHECK (条件);

其中,"表名称" 是要添加约束的表名,"约束名称" 是约束的名称(可以自定义),"条件" 是定义约束的条件表达式。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值