精华内容
下载资源
问答
  • mysql怎么设置外键关联
    2022-06-13 19:14:43

    取消外键约束

    SET FOREIGN_KEY_CHECKS = 0

    恢复外键约束

    SET FOREIGN_KEY_CHECKS = 1

    更多相关内容
  • MySQL外键关联操作

    千次阅读 2022-03-25 16:24:30
    注意,MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FOREIGN_KEY_CHECKS = 0/1;。 使用外键约束最大的好处在于 MySQL 帮助我们完成数据的一致性检查。当我们...

    MySQL 的外键约束

    注意,MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FOREIGN_KEY_CHECKS = 0/1;。

    使用外键约束最大的好处在于 MySQL 帮助我们完成数据的一致性检查。当我们使用默认的外键类型 RESTRICT 时,在创建、修改或者删除记录时都会检查引用的合法性。

    假设我们的数据库中包含 posts(id, author_id, content) 和 authors(id, name) 两张表,在执行如下所示的操作时都会触发数据库对外键的检查:

    向 posts 表中插入数据时,检查 author_id 是否在 authors 表中存在;

    修改 posts 表中的数据时,检查 author_id 是否在 authors 表中存在;

    删除 authors 表中的数据时,检查 posts 中是否存在引用当前记录的外键;

    作为专门用于管理数据的系统,数据库与应用服务相比能够更好地保证完整性,而上述的这些操作都是引入外键带来的额外工作,不过这也是数据库保证数据完整性的必要代价。上述的这些分析都是理论上的定性分析,我们其实可以简单地定量分析一下引入外键对性能的影响。

    创建表时定义外键(References,参照)

    在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键,具体的语法格式如下:

    [CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]
    

    示例:

    # 部门表 tb_dept1(主表)
    CREATE TABLE tb_dept1
    (
    	id INT(11) PRIMARY KEY,
    	name VARCHAR(22) NOT NULL,
    	location VARCHAR(50)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
    
    # 员工表 tb_emp6(从表),创建外键约束,让 deptId 作为外键关联到 tb_dept1 的主键 id。
    CREATE TABLE tb_emp6
    (
    	id INT(11) PRIMARY KEY,
    	name VARCHAR(25),
    	deptId INT(11),
    	salary FLOAT,
    	CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
    

    NOTE:从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。

    以上语句执行成功之后,在表示 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

    查看主表的约束信息

    MariaDB [test_db]> select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME='tb_dept1'\G;
    *************************** 1. row ***************************
               CONSTRAINT_CATALOG: def
                CONSTRAINT_SCHEMA: test_db
                  CONSTRAINT_NAME: fk_emp_dept1
                    TABLE_CATALOG: def
                     TABLE_SCHEMA: test_db
                       TABLE_NAME: tb_emp6
                      COLUMN_NAME: deptId
                 ORDINAL_POSITION: 1
    POSITION_IN_UNIQUE_CONSTRAINT: 1
          REFERENCED_TABLE_SCHEMA: test_db
            REFERENCED_TABLE_NAME: tb_dept1
           REFERENCED_COLUMN_NAME: id
    1 row in set (0.00 sec)
    

    修改原有表的外键约束

    外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

    在修改数据表时添加外键约束的语法格式如下:

    ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
    

    示例:修改数据表 tb_emp2,将字段 deptId 设置为外键,与数据表 tb_dept1 的主键 id 进行关联。

    # 创建 tb_emp2(从表)
    CREATE TABLE tb_emp2
    (
    	id INT(11) PRIMARY KEY,
    	name VARCHAR(25),
    	deptId INT(11),
    	salary FLOAT
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
    
    MariaDB [test_db]> desc tb_emp2;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(25) | YES  |     | NULL    |       |
    | deptId | int(11)     | YES  |     | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    
    # 添加外键约束
    ALTER TABLE tb_emp2 ADD CONSTRAINT fk_tb_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id);
    
    MariaDB [test_db]> desc tb_emp2;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(25) | YES  |     | NULL    |       |
    | deptId | int(11)     | YES  | MUL | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    
    MariaDB [test_db]> SHOW CREATE TABLE tb_emp2\G
    *************************** 1. row ***************************
           Table: tb_emp2
    Create Table: CREATE TABLE `tb_emp2` (
      `id` int(11) NOT NULL,
      `name` varchar(25) DEFAULT NULL,
      `deptId` int(11) DEFAULT NULL,
      `salary` float DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `fk_tb_dept1` (`deptId`),
      CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312
    

    删除外键约束

    当一个表中不需要外键约束时,就需要从表中将其删除。外键一旦删除,就会解除主表和从表之间的关联关系。

    删除外键约束的语法格式如下所示:

    ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
    

    示例:删除数据表 tb_emp2 中的外键约束 fk_tb_dept1。

    ALTER TABLE tb_emp2 DROP FOREIGN KEY fk_tb_dept1;
    
    MariaDB [test_db]> SHOW CREATE TABLE tb_emp2\G
    *************************** 1. row ***************************
           Table: tb_emp2
    Create Table: CREATE TABLE `tb_emp2` (
      `id` int(11) NOT NULL,
      `name` varchar(25) DEFAULT NULL,
      `deptId` int(11) DEFAULT NULL,
      `salary` float DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `fk_tb_dept1` (`deptId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312
    

    如果感觉小编写得不错,请素质三连:点赞+转发+关注。我会努力写出更好的作品分享给大家。更多JAVA进阶学习资料小编已打包好,可以关注私信找我领取哦

    展开全文
  • mysql 设置 外键关联

    千次阅读 2019-03-26 09:09:29
    删除和更新有四种设置方式 cascade:级联,当父表更新、删除,子表会同步更新和删除 set null:置空,当父表更新、删除的时候,字表会把外键字段变为null,所以这个时候设计表的时候该字段要允许为null,否则会出错 ...

    删除和更新有四种设置方式
    cascade:级联,当父表更新、删除,子表会同步更新和删除
    set null:置空,当父表更新、删除的时候,字表会把外键字段变为null,所以这个时候设计表的时候该字段要允许为null,否则会出错
    restrict:父表在删除和更新记录的时候,要在子表中检查是否有有关该父表要更新和删除的记录,如果有,则不允许删除个更改
    no action:和restrict一样
     

    展开全文
  • mysql外键关联

    千次阅读 2021-02-01 21:28:32
    主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。创建...

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

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

    创建外键的方式:

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

    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 外键名;

    展开全文
  • mysql建立外键

    2021-01-20 00:11:20
    外键作用: 使两张表形成关联外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 事件触发限制: on delete和on update , 可设...
  • 本篇文章是对mysql外键关联问题进行了详细的分析介绍,需要的朋友参考下
  • 当 你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql...
  • 最近工作遇到一个问题,一个储存课程的表中存在大量名称重复的课程,应该是写的导入功能中没有进行名称判断导致的,但是用户已经用了很久了,并且课程这个表又是基础表,很多其他的表中都有课程的外键,现在想把课程...
  • 本篇文章是对MySQL创建外键关联错误-errno:150进行了详细的分析介绍,需要的朋友参考下
  • mySql外键关联例子

    2009-12-07 16:26:03
    知识点很简单,但是语句总忘,在这里写一个小例子,有助于大家记忆。mySql外键关联例子
  • 当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql...
  • mysql创建外键关联

    2021-01-31 05:59:55
    自己的代码总提示“ERROR 1005: Can't create table (errno: 150)”的错误郁闷了好几天,看了下面的文章终于成功了,犯了下面提到的三情况中...在系统不同的列表中,当数据库所有参照合法或非合法关联时都会涉及到参...
  • 删除数据库的外键关联

    千次阅读 2021-01-19 03:50:14
    然而,在这个时候发现数据库共有近百张表,N张那么多有主要外键关联。简单的举个例子。我想要删一个商品分类,你就会发现分类关联着品牌,品牌关联着商品,商品关联着其它属性...等等等等等。所以,...
  • mysql 设置外键关联错误 150

    千次阅读 2012-08-29 17:43:03
    当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql...
  • 创建表 CREATE TABLE student( id INT(10) NOT NULL PRIMARY KEY, NAME VARCHAR(30) DEFAULT NULL, tid INT(10) DEFAULT NULL, KEY `fktid` (`tid`), CONSTRAINT `fktid` FOREIGN KEY(`tid`) ...外键关联语句 KEY `f
  • MySQL_外键策略

    2022-06-02 19:23:36
    -- 策略2:更新其中主表外键信息,从表关联项跟着改变 -- 先删除原有外键信息 ALTER TABLE t_students_1 DROP FOREIGN KEY fk_stus1_classn; -- 再重新添加外键约束,并定义级联操作 ALTER TABLE t_students_1 ...
  • mysql 设置外键关联sql语句

    千次阅读 2013-06-01 10:38:56
    CREATE TABLE IF NOT EXISTS `book_info` (  `id` bigint(20) NOT NULL AUTO_INCREMENT, ...首先定义一个外键 KEY `FK_BOOK_INFO_1` (`coupon_group_id`),然后再用alert语句改变!
  • mysql设置外键的语法怎么写?

    千次阅读 2021-01-19 09:45:19
    2012-08-31 回答mysql外键设置详解(1) 外键的使用:外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加er图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的...
  • MySQL外键设置

    2021-12-02 17:27:30
    Q:主外键的关系 pr:ALTER TABLE tb_UserAndRole ADD CONSTRAINT FK__tb_UandR_Role FOREIGN KEY (RoleID) references tb_Role(ID); pr:alert外键名,foreign key(外键字段)reference主表(主键名) pr:本表...
  • 使用navicat创建MySQL外键关联

    千次阅读 2020-12-22 14:27:14
    要在Mysql数据库平台建立外键关联,必须满足以下几个条件:1.两个表必须为 InnoDB 类型。2. 外键和被引用键必须是索引中的第一列,InnoDB 不会自动为外键和被引用键建立索引,必须明确创建它们。3. 外键与对应的被...
  • 关于mysql外键关联

    2021-06-14 18:34:26
    关于mysql外键关联 今天写项目的时候突然发现自己对外键掌握的不太熟练,所以特意去学了一下。 1.创建表的顺序 先建立父表!!!!再建立子表 2.删除表的顺序 先删除子表 再删父表 3.插入表的顺序 先插入父,再...
  • 这是因为MySQL设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。 禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0; 然后再删除数据 启动外键约束,...
  • 如果一张表一张表删除工作量就大了,因为外键关联决定了删除必须有先后顺序。我们可以在删除前禁用外键,待删除完毕之后再启用外键。当然,最后启用的时候发现删除了不应该删除的数据,因此删除前最好做完整备份。...
  • MySQL外键关联操作

    千次阅读 2020-10-07 22:02:31
    目录 文章目录目录MySQL 的外键约束创建表时定义外键(References,参照)...注:MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。 创建表时定义外键(References,参照) 在 CREATE TABLE 语句中,通过 FOREI
  • MySQL 外键关联策略

    2021-03-10 10:19:31
    一个用户可有拥有多个订单,一个订单只能属于一个用户,一对多,在tb_order中使用外键user_id关联tb_user的id。当删除、更新tb_user中的主键时,与之关联的tb_order要受到影响,比如#tb_user中的一条记录1chy abcd#...
  • mysql外键建立心得

    2021-02-08 03:20:12
    mysql主主外键建立:(1)、确保参照的表和字段是存在的(2)、关联表必须是Innodb存储类型(3)、必须设置关联表主键(4)、主键与外键数据类型和字符编码(unsigned)必须一致(5)、确保以上声明的句法是正确的附:mysql...
  • MySql外键设置详解

    千次阅读 2021-01-18 19:18:05
    外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而...
  • 必学的mysql外键设置方式

    千次阅读 2021-12-28 09:13:45
    使两张表形成关联外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存有 每个客户的订单 有了外键后 你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x 建立...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,568
精华内容 26,627
热门标签
关键字:

mysql怎么设置外键关联

mysql 订阅