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

mysql主键与外键(主键 mysql)



1.7.1. 主键

主键就是能唯一标识表中每条记录的字段,不能有null值,主键可以包含一个字段或者多个字段,

主键要短,可唯一标识记录,且永不改变。一般类型设为 INT(最大可表示2亿,一般足够了,要根据具体的需求决定),设为主键后自动变为不可为空,另外还要设定 AI(Auto Incremental)自动递增,这样会方便许多,不需要担心主键唯一性的问题

如何产生主键值:

在业务中一般不会用业务字段作为主键,要使用单独的字段作为主键,主要为了保密业务数据,也方便业务字段的修改,生成唯一主键值可采用以下几种方法:

  1. 主键字段设置为自增
  2. 使用UUID()函数,会产生一个长度为36个字符的字符串且永不重复,适合在集群环境下,一个表被分在多个服务器上也不会有重复主键。
  3. 使用 UUID_SHORT() 函数,产生一个64位的无符号整数且全局唯一。

主键和唯一索引:

主键和唯一索引都要求值是唯一的,但它们之间存在一些不同:

  • 一个表中只能定义一个主键,但是能定义多个唯一索引。
  • 主键中的值不能为 NULL,而索引中的值可以为 NULL。

1.7.2. 外键

什么是外键:

外键用来引用其他表,通过子表的一个或多个字段对应父表的主键或唯一键值,将子表和父表建立关联关系。

外键约束

外键约束能够保证数据的完整和正确。例如,一个国家已经有了城市,就不能轻易的从 country 表删除国家,否则就会造成这个城市数据的不完整。也不能为一个城市设定一个不存在的 country_id,否则这个城市数据就是错误的。

查看一下 city 表定义的外键约束:

 
  
 
  

注意其中的部分:

 
  

这里定义了一个外键:

  • 位于 CONSTRAINT 关键字之后的 fk_city_country 是外键的名字。它是可选的。
  • 位于 FOREIGN KEY 关键字之后的是作为外键的字段名。
  • 位于 REFERENCES 关键字之后的是被引用的表和字段。
  • ON DELETE 和 ON UPDATE 指定了删除或更新父表中的数据时要采取的约束策略。可以使用以下 3 个策略中的一个:
    • CASCADE:如果被引用的表中的一行被删除或更新,该表中匹配行的值会自动删除或更新
    • SET NULL:如果被引用的表中的一行被删除或更新,该表中匹配行的值设置为 NULL。
    • RESTRICT: 如果被引用的表中的一行在该表中有匹配的行,试图删除或更新被引用的表中行时会引发 MySQL 错误。这是默认的策略。

通常,外键所属的表被称作子表,被外键引用的表被称作父表。

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

版权声明


相关文章:

  • mysql查询锁表(mysql查询锁表状态)2025-09-11 22:09:05
  • sqlldr 跳过第一行(sqlldr怎样跳过不需要的行)2025-09-11 22:09:05
  • mysql主键约束怎么写(mysql添加主键约束语句)2025-09-11 22:09:05
  • sqlldr命令详解(sqlldr 命令)2025-09-11 22:09:05
  • sql循环语句的几种写法是什么(sql循环语句的几种写法是什么意思)2025-09-11 22:09:05
  • mysql主键uuid(mysql主键自增怎么设置)2025-09-11 22:09:05
  • mysql 主键(mysql主键)2025-09-11 22:09:05
  • mysql主键可以设置为自动增加吗(mysql 主键设置)2025-09-11 22:09:05
  • sql循环语句的作用和意义(sql循环语句的作用和意义是什么)2025-09-11 22:09:05
  • .sql文件有什么用(sql文件有什么用)2025-09-11 22:09:05
  • 全屏图片