精华内容
下载资源
问答
  • 数据库外键

    2014-10-20 17:33:09
    外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。 FOREIGN KEY 约束的主要目的是控制...

    外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

    FOREIGN KEY 约束的主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。例如,如果在 publishers 表中删除一个出版商,而这个出版商的 ID 在 titles 表中记录书的信息时使用了,则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了。FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值相关,则该操作不可实现。若要成功更改或删除 FOREIGN KEY 约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。

    外键是用来控制数据库中数据的数据完整性的

    就是当你对一个表的数据进行操作

    和他有关联的一个或更多表的数据能够同时发生改变

    这就是外键的作用

    展开全文
  • 数据库外键 附数据和代码

    千次阅读 2018-05-14 23:46:06
    数据库外键定义: 数据库外键作用: 数据库外键和主键的区别: 数据库外键demo; DROP schema IF EXISTS `demo`; CREATE schema demo;

    参考这篇博客https://blog.csdn.net/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行也跟着删除了。

    展开全文
  • 查询数据库外键和外键关联的表名

    业务需求:获取指定数据库中所有表的外键以及外键关联的表名

    SELECT
    	O.TABLE_SCHEMA,
    	O.TABLE_NAME,
    	O.COLUMN_NAME,
    	O.REFERENCED_TABLE_SCHEMA,
    	O.REFERENCED_TABLE_NAME,
    	T.CONSTRAINT_TYPE 
    FROM
    	(
    	SELECT
    		K.CONSTRAINT_SCHEMA,
    		K.CONSTRAINT_NAME,
    		K.TABLE_SCHEMA,
    		K.TABLE_NAME,
    		K.COLUMN_NAME,
    		K.REFERENCED_TABLE_SCHEMA,
    		K.REFERENCED_TABLE_NAME,
    		K.REFERENCED_COLUMN_NAME,
    		R.UPDATE_RULE,
    		R.DELETE_RULE,
    		R.UNIQUE_CONSTRAINT_NAME 
    	FROM
    		information_schema.KEY_COLUMN_USAGE K
    		LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS R ON K.CONSTRAINT_NAME = R.CONSTRAINT_NAME 
    	) AS O
    	INNER JOIN Information_schema.TABLE_CONSTRAINTS T ON O.Table_Name = T.TABLE_NAME 
    	AND o.TABLE_SCHEMA = upper( '{database}' ) 
    	AND T.CONSTRAINT_NAME = O.CONSTRAINT_NAME 
    	AND T.CONSTRAINT_TYPE = 'FOREIGN KEY' 
    WHERE
    	O.CONSTRAINT_SCHEMA != 'mysql' 
    	AND O.CONSTRAINT_SCHEMA != 'sys'
    

    备注

    TABLE_SCHEMA:数据库名
    TABLE_NAME:表名
    COLUMN_NAME:外键所在的列名
    REFERENCED_TABLE_SCHEMA:外键关联的数据库
    REFERENCED_TABLE_NAME:外键关联的表名

    展开全文
  • 查看外键名称查看数据库外键名字

    千次阅读 2019-10-29 12:46:35
    我们要进行删除外键时,需要知道外键的名字,那么如何查看数据库外键呢?有2种方式查看: 1.过查看表的方式查看外键名字; 2.通过mysql自带的系统表查看外键。 更多精彩请访问本文源地址: ...

    我们要进行删除外键时,需要知道外键的名字,那么如何查看数据库外键呢?有2种方式查看: 1.过查看表的方式查看外键名字; 2.通过mysql自带的系统表查看外键。
    更多精彩请访问本文源地址: https://blog.csdn.net/zixiao217

    先来看一下创建外键的方式:

    创建外键的方式

    更多精彩请访问本文源地址: https://blog.csdn.net/zixiao217

    方式一: 在创建表的时候同时指定外键名字

    create database fundb;
    USE fundb;
    -- 创建用户表
    CREATE TABLE `t_user` (
      `uid` int(11) PRIMARY KEY AUTO_INCREMENT,
      `uname` varchar(40) DEFAULT NULL,
      `age` int(11) DEFAULT NULL
    ) ;
    -- 创建数学成绩表
    CREATE TABLE `t_score_math` (
      `uid` int(40) DEFAULT NULL,
      `score` double DEFAULT NULL,
      CONSTRAINT `f_uk` FOREIGN KEY (`uid`) REFERENCES `t_user` (`uid`)
    ) ;
    
    

    方式二:在建表后,对表修改进行添加外键

    create database fundb;
    USE fundb;
    -- 创建用户表
    CREATE TABLE `t_user` (
      `uid` int(11) PRIMARY KEY AUTO_INCREMENT,
      `uname` varchar(40) DEFAULT NULL,
      `age` int(11) DEFAULT NULL
    ) ;
    -- 创建数学成绩表
    CREATE TABLE `t_score_math` (
      `uid` int(40) DEFAULT NULL,
      `score` double DEFAULT NULL
    ) ;
    
    
    -- 对表添加外键  指定外键名字: f_mykey
    alter table t_score_math add 
    constraint f_mykey   -- 该行省略的话,则会自动添加一个名字
    foreign key (uid) references t_user(uid);
    

    查看外键名字的方式

    方式一:通过查看表的方式查看外键名字

    SHOW CREATE TABLE `t_score_math`;
    

    得到以下结果:

    Table Create Table
    t_score_math 建表语句

    建表语句内容如下:

    CREATE TABLE `t_score_math` (
      `uid` int(40) DEFAULT NULL,
      `score` double DEFAULT NULL,
      KEY `f_mykey` (`uid`),
      CONSTRAINT `f_mykey` FOREIGN KEY (`uid`) REFERENCES `t_user` (`uid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    可以得到外键的名字: f_mykey;

    方式二:通过mysql自带的系统表查看外键

    SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  WHERE constraint_schema = 'fundb'  AND table_name = 't_score_math';
    

    结果如下,也可以查看到外键的名字:

    在这里插入图片描述

    展开全文
  • 数据库 外键

    千次阅读 2009-01-08 22:04:00
    外键是什么? 外键 (FK) 是用于建立和... 外键数据库一级的完整性约束,由数据库自行维护.你也可以手动建立. 1如果存在外键关系的话,任何修改主表主键字段和删除主表行的行为,都是不可执行的. 2如果存在外键,,那么
  • 数据库外键说明

    2015-10-27 10:13:35
    数据库外键无非就是表A的一个字段是另外一个表B的唯一值。 但是数据库外键默认允许为空。为空的话,就会有问题。 比如出现脏数据,为了避免这个问题,创建外键字段的时候,最好给外键加上 not null 约束。
  • 数据库外键约束

    2020-05-17 09:00:29
    数据库外键约束 1.RESTRICT(mysql默认):拒绝更新或删除(是拒绝更新还是删除看外键的具体设置)主表被外键引用的列。 2.NO ACTION:同RESTRICT 3.SET NULL:更新或删除主表对应列,会使子表对应列的值变成NULL...
  • 使用过或者接触过数据库外键的开发者,有时候删数据就能够体会到一种欲生欲死的感觉,各种表关联,导致了要删某张表的数据就一定要先删除外键关联的那张表中对应的数据,一层层的删除下来,烦的一批。不过使用数据库...
  • 数据库外键设计

    2018-10-17 13:31:21
    数据库外键设计时,一般会遇到两个问题,无法创建外键,一个是联动删除。 拿班级表(t_class)和学生表(t_student)来说吧,t_class是父表,t_student是子表。t_student表的class_id关联着t_class表的id。 无法创建外键...
  • 数据库外键可以为空

    千次阅读 2014-03-27 14:03:23
     关于数据库的外键,以前我一直以为不允许为空的,今天看到一个项目中使用了空的数据库外键,很惊讶,后来才发现是自己以前错误了。数据库外键是可以为空的。 不过为空的数据跟与之相关联的表就没有关系了。一般...
  • 作用:保持数据的一致性、完整性 为何说外键有性能问题: 1.数据库需要维护外键的内部管理; 2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;...数据库外键的使用以及优缺点 摘录网上...
  • 数据库外键的使用

    2017-05-19 08:11:35
    [转载]数据库外键的使用 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有...
  • 一·首先是外键的作用与设置  保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!  例如:  a b 两个表  a表中存有客户号,客户名称  b表中...
  • 数据库外键争论

    千次阅读 2012-02-13 18:41:37
    数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.? 最近在做一个派单系统数据库设计,在设计中有些疑惑的地方中午在网上发起一个话题讨论. 我把这个讨论流程.发过来 大家可以可以看看. 也可以发表...
  • django开发系列:ORM数据库外键使用详解 外键删除操作: 如果一个模型使用了外键,那么在对方那个模型被删除后,该进行什么样的操作,可以通过on_delete来指定,可以指定的类型如下: CASCADE: ...
  • layout: 数据库外键与级联的使用考量 catalog: true comments: true date: 2020-8-13 10:14:22 subtitle: 数据库外键与级联的使用考量 header-img: /img/header_img/Iron-Man-3.jpg tags: sql foreign key ...
  • 数据库外键约束方式

    2012-04-11 19:33:56
    本文档是数据库外键约束方式指南 需要的朋友请下载 保证可用
  • 为什么需要数据库外键

    千次阅读 2019-01-09 15:59:26
    MySQL数据库使用外键条件:两个表存储引擎必须是InnoDB,MyISAM暂时不支持外键外键列必须建立索引,MySQL4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;外键关系的两表的列的...
  • MySQL数据库外键问题

    2019-04-23 17:12:01
    今天面试被问到使用外键会导致什么问题? 在MySQL的两种存储引擎中,MYISAM不支持外键,InnoDB支持外键,两张表必须都是InnoDB表才可以建立外键。 缺点 外键会影响大型系统的性能,因为外键约束会导致插入删除更新时...
  • 且不说能不能关联,就算能关联,没有下面数据库外键支持的关联有个卵用?我怎么知道这张表的某条数据与另一张表中某些纪录有关?凭什么?更不用说通过一个持久化的实例查出其域中相关联的另一个类实例的属性了(a.b....
  • 数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。 update 是主键表中被参考字段的值更新,delete则是指在主键表中删除一条记录: on update 和 on ...
  • 关闭数据库外键约束

    千次阅读 2017-08-06 19:54:27
    当向数据库中插入数据的时候,如果有表之间的关系十分复杂,尤其是是存在各种外键关系,这是需要暂时关闭这种针对外键约束的检查,本文针对以下三种数据库进行了一个总结
  • 数据库外键、级联

    2019-12-06 20:23:11
    外键 #主表 #创建部门表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(20), dep_location VARCHAR(20) ); INSERT INTO department VALUE(1,"销售","深圳"); INSERT INTO ...
  • 数据库外键ForeignKey

    2021-03-11 22:33:23
    外键(foreign key)的使用及其优缺点 要不要使用外键(foreign key )? MYSQL外键的使用以及优缺点 外键是什么 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键...
  • 数据库外键 可以为空

    2008-08-19 10:59:00
    今天又发现自己以前的无知,关于数据库的外键,以前我一直以为不允许为空的,今天看到一个项目中使用了空的数据库外键,很惊讶,后来才发现是自己以前错误了。数据库外键是可以为空的。 不过为空的数据跟与之相关联...
  • 数据库外键foreign key

    2020-10-11 19:05:24
    外键foreign key 如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表) 对关系...
  • 《数据库》数据库外键与关联映射

    千次阅读 2018-04-19 21:46:03
    数据库设计文档典型案例 下载见附录 MySQL外键设置中(更新时)的 Cascade、NO ACTION、Restrict、SET NULL cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 set null方式 在...
  • 数据库外键表的id列

    2020-10-06 19:26:50
    有些时候我们创建数据库外键表只有两列:id列和具体数据列,比如部门表: id name 1 开发部 2 人事部 3 财政部 而通常我们只需要name列,id列仅作为外键使用。那能不能去掉id列,直接以name作为外键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 190,319
精华内容 76,127
关键字:

数据库外键