主键的特点和三种创建方式

-- 第一种添加主键的方式
CREATE DATABASE javaee20;
USE javaee20;
CREATE TABLE student(
sid INT PRIMARY KEY,

sname VARCHAR(30)

);

-- constraint 约束 主键的第二种添加方式
-- 图书的类别表category
CREATE TABLE category(
id INT,
 NAME  VARCHAR(20),
CONSTRAINT pk_id PRIMARY KEY(id));

 

 

-- 第三种添加主键约束

CREATE TABLE teacher(
tid INT,
tname VARCHAR(50)
);
-- 添加主键
ALTER TABLE teacher ADD CONSTRAINT pk_tid PRIMARY KEY(tid);

 


-- 联合主键 把两列设置成一个主键
CREATE TABLE book(
bid INT,
bname VARCHAR(100),
author VARCHAR(30),
CONSTRAINT pk_bid_bname PRIMARY KEY(bid,bname)
);
INSERT INTO book VALUES(1,'人生','路遥');
INSERT INTO book VALUES(2,'人生','路遥1');

 

### 数据库主键特点及作用 #### 主键的定义 主键是数据库表中用于唯一标识每一行记录的一个或多个字段。主键具有唯一性非空性,确保表中的数据不会重复,并且为其他表提供外键关联的基础。 #### 主键特点 1. **唯一性**:主键值在表中必须是唯一的,不能存在重复值[^1]。 2. **非空性**:主键字段不允许为空(NULL),以确保每条记录都能被唯一标识[^1]。 3. **不可变性**:主键值一旦确定,通常不建议更改,以避免影响外键关联数据完整性[^3]。 4. **高效性**:主键通常与索引结合使用,能够加速数据查询检索操作[^4]。 5. **全局唯一性**:对于分布式系统或跨表设计,主键需要具备全局唯一性,例如通过 UUID 或分布式 ID 生成器实现[^3]。 #### 主键的作用 1. **保证数据完整性**:通过唯一性约束,防止表中出现重复记录[^1]。 2. **建立表间关系**:主键通常作为外键引用,用于维持数据库中表与表之间的关系完整性[^1]。 3. **优化查询性能**:主键字段通常会自动创建索引,提升数据检索效率。 4. **支持存储引擎功能**:某些存储引擎(如 MySQL 的 InnoDB)依赖主键来组织数据结构,有序的主键有助于提高写入查询性能[^1]。 #### 常见主键类型及其特点 1. **自增主键**: - 特点:简单易用,适合单机环境下的顺序生成[^2]。 - 缺点:在分布式系统中可能产生冲突,且暴露了数据增长趋势[^3]。 2. **UUID 主键**: - 特点:全局唯一,适用于分布式系统[^3]。 - 缺点:占用空间较大(36 字节),且随机无序可能导致性能问题[^3]。 3. **具有实际意义的主键**: - 特点:基于业务字段(如身份证号、卡号等)作为主键,便于理解查询[^4]。 - 缺点:可能存在变更需求,违反不可变性原则[^4]。 4. **自制唯一字符型主键**: - 特点:通过自定义规则生成,兼顾唯一性业务需求[^2]。 - 缺点:实现复杂度较高,需额外维护生成逻辑[^2]。 ```python # 示例:使用 UUID 生成主键 import uuid def generate_uuid(): return str(uuid.uuid4()) print(generate_uuid()) ``` #### 注意事项 - 在选择主键时,应综合考虑业务场景、系统规模性能需求[^2]。 - 对于分布式系统,推荐使用全局唯一标识符(如 UUID 或 Snowflake 算法生成的 ID)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值