精华内容
下载资源
问答
  • mysql 外键关联

    2018-11-23 16:19:00
    mysql 外键关联 什么是外键:外键是一个特殊的索引,用于关联两个表,只能是指定内容。 如我将新建一个daka的表,然后将此表的class_id 与另外一个class的表的cid字段关联 class表: CREATE TABLE `class` ( `cid`...

    mysql 外键关联

    什么是外键:
    外键是一个特殊的索引,用于关联两个表,只能是指定内容。

    如我将新建一个daka的表,然后将此表的class_id 与另外一个class的表的cid字段关联

    class表:

    CREATE TABLE `class` (
    `cid` int(11) NOT NULL AUTO_INCREMENT,
    `caption` varchar(32) NOT NULL,
    PRIMARY KEY (`cid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


    mysql> select * from class;
    +-----+------------+
    | cid | caption |
    +-----+------------+
    | 1 | 高二1班 |
    | 2 | 高二2班 |
    | 3 | 高二3班 |
    | 4 | 高二4班 |
    | 5 | 高二5班 |
    +-----+------------+


    daka表:

    CREATE TABLE `daka` (
    `id` int(11) AUTO_INCREMENT NOT NULL,
    `student_name` char(16) NOT NULL,
    `state` ENUM("Y","N") NOT NULL,
    `class_id` int(11) NOT NULL,
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
    )

    #fk_class_key 这个表示这个外键约束名称,自定义的,此时在

    开始往daka表中插入数据,(此时在class_id字段中的值,就必须在class表中的cid字段中要存在如果不存在则会报错,被外键约束)

    正常:
    mysql> INSERT INTO `daka` (student_name,state,class_id) values("赵丽颖","Y","3");
    Query OK, 1 row affected (0.04 sec)

    报错:
    mysql> INSERT INTO `daka` (student_name,state,class_id) values("赵丽颖","Y","6");
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`newtest`.`daka`, CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`))

    在删除的数据的过程中,如果是删除daka表中有外键约束的数据则没有问题,但是如果是删除class表中被外键关联的数据则就会报错,

    如下:
    mysql> select * from daka;
    +----+--------------+-------+----------+
    | id | student_name | state | class_id |
    +----+--------------+-------+----------+
    | 1 | 赵丽颖 | Y | 3 |
    | 8 | 赵丽颖1 | Y | 5 |
    +----+--------------+-------+----------+
    2 rows in set (0.00 sec)

    mysql> select * from class;
    +-----+------------+
    | cid | caption |
    +-----+------------+
    | 1 | 高二1班 |
    | 2 | 高二2班 |
    | 3 | 高二3班 |
    | 4 | 高二4班 |
    | 5 | 高二5班 |
    +-----+------------+
    5 rows in set (0.00 sec)

    mysql> DELETE FROM daka WHERE id=8;
    Query OK, 1 row affected (0.08 sec)

    mysql> DELETE FROM class WHERE cid=3;
    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`newtest`.`daka`, CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`))

    此处cid=3的这行数据被外键关联了,daka表中有引用他,所以不能直接被删除。

    转载于:https://www.cnblogs.com/heaven-xi/p/10008280.html

    展开全文
  • 本篇文章是对mysql外键关联问题进行了详细的分析介绍,需要的朋友参考下
  • mysql外键关联

    2018-10-18 10:14:00
    外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。 创建外键的方式: 方式一:表已经创建好了,继续修改表的结构来添加外键,...

     

    主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性

    外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。

     

    创建外键的方式:

    方式一:表已经创建好了,继续修改表的结构来添加外键,代码如下:

    create table student(
                id int primary key auto_increment,
                name char(32) not null,
                sex char(32)
    ); 

    create table class( id int primary key auto_increment, name char(32) not null, age int, dept_id int
    );

    在上述的俩个已经创建好的表中,添加外键:

    alter table class add foreign key(dept_id) references student(id)

    alter table class:在从表class中进行操作;

    add foreign key (dept_id):将从表的字段dept_id添加为外键;

    references student(id):映射到主表studentt当中为id的字段

     

    方式一:在创建表的时候增加外键,代码如下create table student(

                id int primary key auto_increment,
                name char(32) not null,
                sex char(32)
    ); 

    create table class( id int primary key auto_increment, name char(32) not null, age int, dept_id int
           constraint FK_id foreign key(dept_id) references student(id) );

    格式:[CONSTRAINT symbol] FOREIGN KEY [id] (从表的字段1) REFERENCES tbl_name (主表的字段2)
     

    CONSTRAINT symbol:可以给这个外键约束起一个名字,有了名字,以后找到它就很方便了。如果不加此参数的话,系统会自动分配一个名字。

    FOREIGN KEY:将从表中的字段1作为外键的字段。

    REFERENCES:映射到主表的字段2。

    
    

    删除外键:

    alter table student drop foreign key 外键名;

    转载于:https://www.cnblogs.com/ConnorShip/p/9808947.html

    展开全文
  • Instead of using foreign keys, I decided to just pull mysql_insert_id() after inserts, saving it as a variable, then putting that variable into the related table. Is this horrible? Everything seems ...

    This is for a sort of proof of concept draft to get things working, but don't want to have completely crap code. For my database, I tried to get true foreign key relations going using innoDB, but couldn't get it.

    Instead of using foreign keys, I decided to just pull mysql_insert_id() after inserts, saving it as a variable, then putting that variable into the related table.

    Is this horrible? Everything seems to work well, and I'm able to connect and relate ID's as needed. What benefits would using foreign keys give me over my method (besides updates/deletes cascading)?

    解决方案

    To create a relation (master->detail), you have to always supply the keys by yourself, either using mysql_insert_id, natural keys or key generated by your applications. The FOREIGN KEY is not going to make that work for you.

    What FOREIGN KEY does is

    Helping you enforce the relationship/the integrity of your data (so the "detail" record does not point to an invalid parent)

    Handles deletion or key alterations of master records (ON DELETE ..., ON UPDATE ...).

    It's also creating an index in your "detail"-table for the "master_id"-row if it doesn't exist yet (okay, you could also do that without FOREIGN KEY)

    Has also some kind of documenting purpose for example an ERM-tool could reengineer the relationship model from your schema (okay, this point is a slight long shot)

    The cost of adding the FOREIGN KEY constraint statement is small compared to its benefits.

    展开全文
  • mysql 外键关联中建议的级联是 on update cascade

    1.mysql 外键关联中建议的级联是 on update cascade on delete restrict。restrict 等同 no action (参考:http://androider.iteye.com/blog/352332)

    (参考:. cascade方式

       在父表上update/delete记录时,同步update/delete掉子表的匹配记录
       On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用

      . set null方式
       在父表上update/delete记录时,将子表上匹配记录的列设为null
       要注意子表的外键列不能为not null
       On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用

      . No action方式
       如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
       这个是ANSI SQL-92标准,从mysql4.0.8开始支持

      . Restrict方式
       同no action, 都是立即检查外键约束

      . Set default方式

       解析器认识这个action,但Innodb不能识别,不知道是什么意思... )


    2。删除auto_increment属性 其实是修改属性 alter table xxx modify columnname  type constraint (如: int(11) not null) alter table xxx modify columnname  type constraint (如: int(11) not null) change id id int 未尝试 也可以删除 在创建(先删除主键约束)


    3。MySQL支持外键约束,并提供与其它DB相同的功能,但表类型必须为 InnoDB(5.5之后只能engine来启用),建外键的表的那个列要加上index

    4.mysql index 说明 参考: http://blog.csdn.net/luketty/article/details/5772429


    
    

    展开全文
  • MySQL外键关联(一对多) 外键说明    什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以重复 2)...
  • Mysql 外键关联查询

    千次阅读 2018-08-30 18:08:00
    SELECT * FROM user u WHERE EXISTS ( SELECT 1 FROM sale s where u.id = s.user_id); 该sql将返回有消费记录的用户信息,NOT EXISTS则相反,括号中的子查询将返回true和false,并不会返回具体信息 ...
  • Python---mysql 外键关联

    千次阅读 2018-05-14 15:49:02
    外键关联:指利用外键将mysql中两个表关联起来。1.创建study_record 表注:key fk_student_key (stu_id) 表示与student表创建关联符 stu_id 存在问题2.查看创建表记录:3. 查看表结构4. 添加表数据注意 :在study_...
  • mysql外键关联问题

    千次阅读 2012-01-09 14:40:58
    今儿继续再看老师给推荐的深入浅出mysql数据库开发这本书,看到innodb数据库的外键关联问题时,遇到了一个问题,书上写的是可以对父表进行修改,从而同步到子表的外键上去,可是自己的实验却是没有能够。 mysql> ...
  • 一个用户可有拥有多个订单,一个订单只能属于一个用户,一对多,在tb_order中使用外键user_id关联tb_user的id。当删除、更新tb_user中的主键时,与之关联的tb_order要受到影响,比如#tb_user中的一条记录1chy abcd#...
  • mysql 外键关联限制

    千次阅读 2013-01-04 13:27:02
    第一次接触mysql,很简单的两张表关联,当然可以采用mysql自带的外键限制来保证数据一致性,但是上网查了些资料。发现对于insert/update操作完全合乎我的需求逻辑,但是delete却与我需要的完全相反,比如A表(A_id),...
  • 先在控制台测试外键关联的sql语句:
  • 使用navicat创建MySQL外键关联

    千次阅读 2011-02-24 21:27:00
    大家可以参考一下~~在此,感谢原文作者为大家解决问题~~   要在Mysql数据库平台建立外键关联,必须满足以下几个条件:  1. 两个表必须为 InnoDB 类型。  2. 外键和被引用键必须是索引中的第...
  • 看了网上的一些文章,有的人说大表驱动小表查询更快,有的人说小表关联大表更快。 比如: 有人支持小表关联大表 有人支持大表关联小表 这两种观点把我也整蒙了,到底应该大表关联小表,还是应该小表关联大表...
  • 今儿继续再看老师给推荐的深入浅出mysql数据库开发这本书,看到innodb数据库的外键关联问题时,遇到了一个问题,书上写的是可以对父表进行修改,从而同步到子表的外键上去,可是自己的实验却是没有能够。   代码...
  • 例如用户表 user_id user_name 1 zhangsan 2 lisi 3 wangwu 4 zhaoliu 另一张money表,表示了借钱的关系 id from to how ... 关联查询 select m.id,u1.use...
  • 1.数据表外键的概念及作用 如果有两张数据表,则在建立数据表时设置外键,有利于保持这两张数据表数据的一致性及完整性。   2.创建数据表外键的方法 比如,有两张数据表test和test_foreign。 其中,创建test...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,417
精华内容 20,566
关键字:

mysql外键关联

mysql 订阅