什么叫主键,外键

本文解释了数据库中主键和外键的概念及其作用。主键确保表中每一行记录的唯一性,而外键用于建立表之间的联系,保证数据的一致性和完整性。

什么叫主键,外键

[ 标签: 键 外键 , , 外键 ]
在数据库中什么叫主键,什么叫外键,他们分别有什么作用。请给我你力所能及的详细答案!!
☆飞雪无声☆ 回答:3 人气:6 解决时间:2007-10-29 11:25
满意答案
好评率:100%
通俗的说吧
先说说主键(primary key)吧:一张表(关系)的一个列(属性)或多个列可以作为主键,但是前提是让这个列作主键,这个列就能保证该列下的各个行(元组)的值不能相同,比如说你用姓名属性作主键的话,那么这个主键就不一定可以,如果有两个人是同样的名字的话,就不能做到该属性下的各个元组数据的值不同,如果用阿拉伯数字作主键就是一个很好的选择。
再说说外键(foreign key):一张表(关系)的列(属性)它同时存在表1和表2中,它不是表1的主键,而是表2的主键,就可以说他是表1的外键。
那么什么是候选键(Candidate Key)呢:能唯一标识表(关系)中行(元组)的列(属性),则称该属性为候选键,也称 候选关键字 或 候选码;由此来看候选键可以不只一个,还看一看得出的就是主键同时它也是候选键
### MySQL 中主键的概念及用法 #### 主键 (Primary Key) 主键是一种用于唯一标识表中每一行记录的关字。它确保每一条记录都有唯一的标识符,从而防止数据冗余并提高查询效率。在 MySQL 数据库中,主键具有以下几个特点: - 唯一性:主键列中的值必须是唯一的,不允许存在重复值[^1]。 - 非空性:主键列中的值不能为空(NULL)。这意味着,在插入新记录时,必须为主键指定一个有效的值。 创建主键的方法如下所示: ```sql CREATE TABLE example_table ( id INT PRIMARY KEY, name VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 另一种方式是在已有表结构的基础上添加主键约束: ```sql ALTER TABLE example_table ADD PRIMARY KEY (id); ``` #### (Foreign Key) 是用来建立和加强两个表之间数据链接的一种约束条件。通过可以实现参照完整性,即当某个表的数据发生变化时,能够自动更新或删除其他相关联表中的对应数据。具体来说,如果某张表的一个字段引用了另一张表的主键,则该字段称为[^2]。 在的设计过程中需要注意以下几点: - **关联关系**:通常指向父级表(主表)的主键或者候选。 - **级联操作**:可以通过设置 ON DELETE 和 ON UPDATE 子句来定义如何处理因所引发的相关动作,比如 CASCADE 表示同步执行相应的删除/更新操作;RESTRICT 则阻止任何可能破坏这种依赖性的变动发生。 下面是一个简单的例子展示如何声明以及其基本语法形式: ```sql -- 创建订单详情表,并设定 product_id 字段为 CREATE TABLE order_details ( detail_id INT AUTO_INCREMENT PRIMARY KEY, quantity INT NOT NULL, price DECIMAL(8 , 2 ) NOT NULL, product_id INT, CONSTRAINT fk_product FOREIGN KEY(product_id) REFERENCES products(id) ON DELETE SET NULL -- 如果产品被删掉则将此条目置为空 ON UPDATE CASCADE -- 当产品的 ID 改变时随之更改这里的值 ); ``` #### 使用场景对比分析 | 特性 | 主键 | | |-----------------|------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| | 功能定位 | 确保实体集内部各组互异 | 维护不同实体间的一致性和连贯性 | | 是否允许重复 | 不允许 | 可以 | | 是否接受 null 值 | 否 | 是 | #### 自动生主键的方式 除了手动分配数值之,还可以利用数据库内置机制来自动生主键值,这有助于简化开发流程并且减少错误几率。以下是几种常见的做法[^3]: - 自增长属性 (`AUTO_INCREMENT`) : 对于整型类型的列而言最为常用; - `UUID()` 函数 :生全球范围内独一无二的字符串序列号 ,适用于分布式环境下的跨服务器协调需求场合下; - `UUID_SHORT()` 方法 :提供更紧凑版本的数字编码方案相比标准版 uuid 更节省存储空间资源消耗. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值