数据库-列的完整性约束-PRIMARY KEY -主键

发布于:2024-06-14 ⋅ 阅读:(121) ⋅ 点赞:(0)

引言

为啥需要主键
因为无法确定身份信息,就拿人的公民身份证号码 如果某个人的名字相同,为啥需要身份证信息?
那是因为无法“确定我就是我 ”,这个是社会现象,比如说假设,钟璃是钟离的儿子 突然间去世 那么
医院如何知道,钟璃是钟离的儿子 最快的方式身份证 ? 还是DNA认证,当然是身份证 为啥不是DNA认证麻烦呗,最快好几天,才能验证何必呢,所以身份证最快的 而且每个人身份证都不一样 找一样的根本不存在 以下是个人研究成果:公民身份证编号 - 哈希值 通过哈希值找到对应的个人信息 对应的钟离 :4xxxxxxxxxxxx - 98 -搜索结果 显示 再来根据身份证来 搜索户口 搜索结果- 查看 证明OK 你可以去准备一下 …通过这个例子 你看到了啥 嘿嘿 原神, 等等,逍遥风雨声 ,带刀归来 我的名字叫 枫原万叶 :海鸥桑不要再乱叫,我怎么本能玩起原神的梗!可能玩原神玩的, 哈哈 好了收回来 证明身份信息非常简单
,但难在实现 确保身份证是仅此一位 所以数据库出现了居然怎么难 我帮你们实现 ,你们只要用我的PRIMARY KEY 就行 他不可能存在相同的,因为存在就会认为是错误 我报错,只要哪怕存在一个错误,都不行 这位就像傲娇的“贵族”一样,只能说娇生惯养真是可怕1
PRIMARY KEY 形容成傲娇非常明确

PRIMARY KEY - 主键 实例

单字段主键

# 列的完整性约束 primary Key
 create  database primaryKeyStudy;

use primaryKeyStudy;

#原神玩家信息
create table GenshinImpactPlayerInfor(id int ,name varchar(64));

#插入 两条相同ID不同的玩家
insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华...忠实粉丝");

insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华的狗");

select * from GenshinImpactPlayerInfor;
#请问若没有主键作为唯一的标识修改(1000000,"我是神里绫华的狗" )玩家会影响 这位(1000000,"我是神里绫华...忠实粉丝"),玩家吗?


update GenshinImpactPlayerInfor set name ='小森' where id=1000000;
#Query OK, 2 rows affected (0.01 sec)
#Rows matched: 2  Changed: 2  Warnings: 0
# 答案如变 有没有发生变化呢 全改那么 如何防止这种情况发生 这就好比原神中的角色 前代草神 大慈树王
# 在世界树里面彻底没有了 让世界彻底遗忘我 唉 世界树就是现实的大数据 当然也可以认为数据库


#原神玩家信息
create table GenshinImpactPlayerInfor(id int primary key ,name varchar(64));


#插入 两条相同ID不同玩家
 insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华的狗");

 #插入    相同的ID 检查是否有相同的
 insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华...忠实粉丝");
 # ERROR 1062 (23000): Duplicate entry '1000000' for key 'genshinimpactplayerinfor.PRIMARY'
 # 错误1062(23000):键“genshinimpactplayerinfor”的重复条目“1000000”。主要的
 # genshinimpactplayerinfor 中插入或更新数据时,遇到了一个重复的主键值。具体来说,这个错误指出尝试插入或更新的记录中有一个字段的值为 '1000000',而这个值已经存在于该表的主键列中。

  insert into  GenshinImpactPlayerInfor values(1000001,"我是神里绫华...忠实粉丝");

# Query OK, 1 row affected (0.04 sec)
      
select * from GenshinImpactPlayerInfor;
/*
+---------+-------------------------+
| id      | name                    |
+---------+-------------------------+
| 1000000 | 我是神里绫华的狗        |
| 1000001 | 我是神里绫华...忠实粉丝 |
+---------+-------------------------+
*/

单字段主键用法

1-在创建直接写

#原神玩家信息
create table GenshinImpactPlayerInfor(id int primary key ,name varchar(64));


2- 后面追加

create table GenshinImpactPlayerInfor1(id int  ,name varchar(64),constraint UID_PK primary key(id))
;
constraint  我要使用约束 的交出名字 使用啥约束 primary key 主键(给那个成员做主键) 在只有一个为主键环境下 默认PRIMARY KEY (`id`) 可以使用show create table GenshinImpactPlayerInfor;查看所有的完整性约束

单字段主键整合

# 列的完整性约束 primary Key
 create  database primaryKeyStudy;

use primaryKeyStudy;

#原神玩家信息
create table GenshinImpactPlayerInfor(id int ,name varchar(64));

#插入 两条相同ID不同的玩家
insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华...忠实粉丝");

insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华的狗");

select * from GenshinImpactPlayerInfor;
#请问若没有主键作为唯一的标识修改(1000000,"我是神里绫华的狗" )玩家会影响 这位(1000000,"我是神里绫华...忠实粉丝"),玩家吗?


update GenshinImpactPlayerInfor set name ='小森' where id=1000000;
#Query OK, 2 rows affected (0.01 sec)
#Rows matched: 2  Changed: 2  Warnings: 0
# 答案如变 有没有发生变化呢 全改那么 如何防止这种情况发生 这就好比原神中的角色 前代草神 大慈树王
# 在世界树里面彻底没有了 让世界彻底遗忘我 唉 世界树就是现实的大数据 当然也可以认为数据库


#原神玩家信息
create table GenshinImpactPlayerInfor(id int primary key ,name varchar(64));


#插入 两条相同ID不同玩家
 insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华的狗");

 #插入    相同的ID 检查是否有相同的
 insert into  GenshinImpactPlayerInfor values(1000000,"我是神里绫华...忠实粉丝");
 # ERROR 1062 (23000): Duplicate entry '1000000' for key 'genshinimpactplayerinfor.PRIMARY'
 # 错误1062(23000):键“genshinimpactplayerinfor”的重复条目“1000000”。主要的
 # genshinimpactplayerinfor 中插入或更新数据时,遇到了一个重复的主键值。具体来说,这个错误指出尝试插入或更新的记录中有一个字段的值为 '1000000',而这个值已经存在于该表的主键列中。

  insert into  GenshinImpactPlayerInfor values(1000001,"我是神里绫华...忠实粉丝");

# Query OK, 1 row affected (0.04 sec)
      
select * from GenshinImpactPlayerInfor;
/*
+---------+-------------------------+
| id      | name                    |
+---------+-------------------------+
| 1000000 | 我是神里绫华的狗        |
| 1000001 | 我是神里绫华...忠实粉丝 |
+---------+-------------------------+
*/


# primary key 第一种的方式
create table GenshinImpactPlayerInfor(id int primary key ,name varchar(64));

# primary key 第二种的方式

create table GenshinImpactPlayerInfor1(id int  ,name varchar(64),constraint UID_PK primary key(id));
Query OK, 0 rows affected (0.06 sec)

# 查看 表结构
 desc GenshinImpactPlayerInfor1; 
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(64) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

desc GenshinImpactPlayerInfor;    
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(64) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
# 可以看到 key是 PRI 并且键的约束也不能为空
# 就像 原神的国家 一样  蒙德若没有哪个少年组织的人民反抗高塔孤王 跟随的风之精灵怎么会继承王座 那位少年去世 利用王座的力量 成为魔神巴巴托斯  从此成为风神  

mysql> show  create table GenshinImpactPlayerInfor;
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table                    | Create Table
                 |
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GenshinImpactPlayerInfor | CREATE TABLE `genshinimpactplayerinfor` (
  `id` int NOT NULL,
  `name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

# id PRIMARY KEY (`id`) ....
 
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table                     | Create Table
                   |
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GenshinImpactPlayerInfor1 | CREATE TABLE `genshinimpactplayerinfor1` (
  `id` int NOT NULL,
  `name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
GenshinImpactPlayerInfor1 好像没有更改 哪个(`id`)
 # 在这里面 CONSTRAINT关键字用于定义一个约束,UID_PK是这个约束的名称,PRIMARY KEY指定了id字段是表的主键。主键用于唯一标识表中的每一行记录,确保每条记录的id值都是唯一的。
 

多字段主键

也就是两个可以一样但不同产品就有不同的一样
能想起来?


网站公告

今日签到

点亮在社区的每一天
去签到