数据库外键 附数据和代码

本文介绍了数据库外键的概念、作用以及与主键的区别,并通过一个具体的数据库操作示例,展示外键如何确保数据的一致性和完整性。在示例中,创建了两个表并演示了外键约束在数据插入和删除时的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考这篇博客https://blog.youkuaiyun.com/zengraoli/article/details/16857835
数据库外键定义:

数据库外键作用:

数据库外键和主键的区别:

数据库外键demo;

创建数据库

DROP schema IF EXISTS `demo`;
CREATE schema demo;

创建表

drop table if exists `demo`.`user`;
CREATE TABLE user_info  
(  
    `user_id`  INTEGER(11) NOT NULL AUTO_INCREMENT,  
    `username` NVARCHAR(64) COLLATE utf8_general_ci DEFAULT NULL,  
    `password` NVARCHAR(64) COLLATE utf8_general_ci DEFAULT NULL,  
    `qianming` TEXT COLLATE utf8_general_ci,  
    `email`    NVARCHAR(64) COLLATE utf8_general_ci DEFAULT NULL,   
    `pic` VARCHAR(64) COLLATE utf8_general_ci DEFAULT NULL,  
    PRIMARY KEY (`user_id`)
)ENGINE=INNODB AUTO_INCREMENT=237 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' AUTO_INCREMENT=237;  
ALTER TABLE `demo`.`user_limits` 
AUTO_INCREMENT = 237 ;

MYISAM不支持外键。

DROP TABLE IF EXISTS `demo`.`user_limits`;
CREATE TABLE user_limits(  
    user_conut INTEGER(11) AUTO_INCREMENT PRIMARY KEY,  
    txtnewbrowsecount INT,  
    picnewbrowsecount INT,  
    videonewbrowsecount INT,  
    user_id INT,#外键user_info  
    FOREIGN KEY(user_id) REFERENCES  user_info(user_id) ON DELETE CASCADE ON UPDATE CASCADE ##创建外键关系语句  
)engine=INNODB AUTO_INCREMENT=237;  

在user_limits上foreign key栏中看到了外键的设置
这里写图片描述

在user_info中没有看到外键

往user_info表中插入测试数据

INSERT INTO `user_info`  
(`username`, `password`, `qianming`, `email`, `pic`)  
VALUES  
('zengraoli1', '123456', 'my name is zengraoli1', 'test@111.com', ''),  
('zengraoli2', '123456', 'my name is zengraoli2', 'test@112.com', ''),  
('zengraoli3', '123456', 'my name is zengraoli3', 'test@113.com', ''),  
('zengraoli4', '123456', 'my name is zengraoli4', 'test@114.com', ''),  
('zengraoli5', '123456', 'my name is zengraoli5', 'test@115.com', ''),  
('zengraoli6', '123456', 'my name is zengraoli6', 'test@116.com', '');COMMIT; 

往user_limits表中插入测试数据,报错,外键和user_info不匹配

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`demo`.`user_limits`, CONSTRAINT `user_limits_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user_info` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE)

更改成这样,事务提交成功。

INSERT INTO `demo`.`user_limits`  
VALUES  
(NULL, 10, 10, 10, 237),  
(NULL, 10, 8, 10, 238),  
(NULL, 10, 10, 10, 239),  
(NULL, 10, 10, 10, 240),  
(NULL, 10, 0, 10, 241),  
(NULL, 10, 2, 10, 242);COMMIT; 

user_info


237 zengraoli1  123456  my name is zengraoli1   test@111.com    
238 zengraoli2  123456  my name is zengraoli2   test@112.com    
239 zengraoli3  123456  my name is zengraoli3   test@113.com    
240 zengraoli4  123456  my name is zengraoli4   test@114.com    
241 zengraoli5  123456  my name is zengraoli5   test@115.com    
242 zengraoli6  123456  my name is zengraoli6   test@116.com    

user_limits

7   10  10  10  237
8   10  8   10  238
9   10  10  10  239
10  10  10  10  240
11  10  0   10  241
12  10  2   10  242

删除user_info中的user_id = 239

DELETE FROM `demo`.`user_info` WHERE `user_id`='239';

user_limits中的user_id=239行也跟着删除了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值