当前位置:网站首页 > SQL数据库编程 > 正文

mysql中主键和外键(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 (条件);

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

到此这篇mysql中主键和外键(mysql中主键和外键可以是一个吗)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • mysql主键,外键(mysql外键必须是另一个表的主键吗)2026-05-22 16:27:09
  • mysql导入sql文件过大自动断开(mysql导入sql文件报错的原因)2026-05-22 16:27:09
  • plsql注册码(plsql注册码在哪里填)2026-05-22 16:27:09
  • sql数据库文件在哪(sql数据库文件在哪里找)2026-05-22 16:27:09
  • pymysql怎么安装到spyder(pymysql怎么安装到anancoda)2026-05-22 16:27:09
  • goldendb数据库 mysql(goldendb数据库下载)2026-05-22 16:27:09
  • sql文件是什么类型(sql文件用什么打开较好)2026-05-22 16:27:09
  • sqlldr导入导出(sqlldr 导入)2026-05-22 16:27:09
  • 增删改查sql语句是什么(增删改查sql语句是什么意思)2026-05-22 16:27:09
  • pymysql连接数据库失败(pymssql连接数据库 报错)2026-05-22 16:27:09
  • 全屏图片