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 (条件);
其中,"表名称" 是要添加约束的表名,"约束名称" 是约束的名称(可以自定义),"条件" 是定义约束的条件表达式。