今儿个,咱来聊聊数据库里头那个“主键(primary key)”的事儿。这玩意儿,说白,就像咱每个人的身份证号一样,得是独一份儿的,不能跟别人重。
捣鼓前的准备
没啥特别准备的,我就在我那台破电脑上装个 MySQL 数据库,版本号是 8.0 的。然后,我还装个叫 Navicat 的工具,方便我连上数据库,敲敲命令啥的。
开始上手
我琢磨着,这主键到底咋用?想来想去,还是得动手试试。
于是我打开 Navicat,连上我那个 MySQL 数据库,然后新建一张表,叫“学生表”,里头有“学号”、“姓名”、“年龄”这些个字段。
重点来!我得给这张表设个主键。我想想,用“学号”当主键最合适,毕竟每个学生的学号肯定不一样嘛
我在创建表的时候,就这么写:
CREATE TABLE 学生表 (
学号 VARCHAR(20) PRIMARY KEY,
姓名 VARCHAR(50),
年龄 INT
瞧见没,我在“学号”那个字段后面加个“PRIMARY KEY”,这就告诉 MySQL,“学号”是这张表的主键。
鼓捣过程中遇到的那些坑
捣鼓过程中,我也不是一帆风顺的。我曾经试过,想往表里插两条学号一样的数据,结果 MySQL 直接报错,说啥“主键冲突”。这我就明白,主键这玩意儿,还真是严格,保证数据的唯一性。
我还试过,想把主键字段的值改成 NULL,结果也是不行。MySQL 又报错,说主键不能是 NULL 值。看来,主键不仅要唯一,还得有值,不能空着。
组合拳——联合主键
后来我又琢磨起一个事儿。要是遇到一种情况,一个字段没法唯一确定一条记录,咋办?
比方说,有个“选课表”,里头有“学号”和“课程号”两个字段。一个学生可以选多门课,一门课也可以被多个学生选。这时候,单用“学号”或“课程号”当主键都不行。
这时候,就得用上“联合主键”。说白,就是把多个字段组合起来,一起当主键。
我创建“选课表”的时候,就这么写:
CREATE TABLE 选课表 (
学号 VARCHAR(20),
课程号 VARCHAR(20),
PRIMARY KEY (学号, 课程号)
看到没,我把“PRIMARY KEY”放到然后用括号把“学号”和“课程号”括起来,这就表示它俩一起组成这张表的主键。
这么一来,只有当“学号”和“课程号”都一样的时候,MySQL 才会认为这是重复的数据,不让插进去。这样既保证数据的唯一性,又能满足实际需求。
一点小感悟
这回捣鼓主键的经历,让我对数据库的设计有更深的理解。主键这玩意儿,看似简单,还挺重要的。它不仅能保证数据的唯一性,还能加快查询速度,毕竟数据库可以根据主键快速定位到某一条记录。以后设计数据库的时候,可得好好琢磨琢磨,怎么选主键才最合适!