精华内容
下载资源
问答
  • 首先,目前在产品环境可用MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们数据表必须使用InnoDB引擎。下面,我们先创建以下测试用数据库表:CODE:[Copy to clipboard]CREATE TABLE `...

    首先,目前在产品环境可用的MySQL

    版本(指4.0.x

    和4.1.x

    )中,只有InnoDB

    引擎才允许使用外键,所以,我们的数据表必须使用InnoDB

    引擎。

    下面,我们先创建以下测试用数据库表:CODE:[Copy to clipboard]CREATE TABLE `roottb` (

    `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,

    `data` VARCHAR(100) NOT NULL DEFAULT '',

    PRIMARY KEY (`id`)

    ) TYPE=InnoDB;

    CREATE TABLE `subtb` (

    `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,

    `rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',

    `data` VARCHAR(100) NOT NULL DEFAULT '',

    PRIMARY KEY (`id`),

    INDEX (`rootid`),

    FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE

    ) TYPE=InnoDB;

    注意:1

    、必须使用InnoDB

    引擎;2

    、外键必须建立索引(INDEX

    );3

    、外键绑定关系这里使用了“ ON DELETE CASCADE”

    ,意思是如果外键对应数据被删除,将关联数据完全删除,更多信息请参考MySQL

    手册中关于InnoDB

    的文档;

    好,接着我们再来插入测试数据:CODE:[Copy to clipboard]INSERT INTO `roottb` (`id`,`data`)

    VALUES ('1', 'test root line 1'),

    ('2', 'test root line 2'),

    ('3', 'test root line 3');

    INSERT INTO `subtb` (`id`,`rootid`,`data`)

    VALUES ('1', '1', 'test sub line 1 for root 1'),

    ('2', '1', 'test sub line 2 for root 1'),

    ('3', '1', 'test sub line 3 for root 1'),

    ('4', '2', 'test sub line 1 for root 2'),

    ('5', '2', 'test sub line 2 for root 2'),

    ('6', '2', 'test sub line 3 for root 2'),

    ('7', '3', 'test sub line 1 for root 3'),

    ('8', '3', 'test sub line 2 for root 3'),

    ('9', '3', 'test sub line 3 for root 3');

    我们先看一下当前数据表的状态:CODE:[Copy to clipboard]mysql>; show tables;

    +----------------+

    | Tables_in_test |

    +----------------+

    | roottb |

    | subtb |

    +----------------+

    2 rows in set (0.00 sec)

    mysql>; select * from `roottb`;

    +----+------------------+

    | id | data |

    +----+------------------+

    | 1 | test root line 1 |

    | 2 | test root line 2 |

    | 3 | test root line 3 |

    +----+------------------+

    3 rows in set (0.05 sec)

    mysql>; select * from `subtb`;

    +----+--------+----------------------------+

    | id | rootid | data |

    +----+--------+----------------------------+

    | 1 | 1 | test sub line 1 for root 1 |

    | 2 | 1 | test sub line 2 for root 1 |

    | 3 | 1 | test sub line 3 for root 1 |

    | 4 | 2 | test sub line 1 for root 2 |

    | 5 | 2 | test sub line 2 for root 2 |

    | 6 | 2 | test sub line 3 for root 2 |

    | 7 | 3 | test sub line 1 for root 3 |

    | 8 | 3 | test sub line 2 for root 3 |

    | 9 | 3 | test sub line 3 for root 3 |

    +----+--------+----------------------------+

    9 rows in set (0.01 sec)

    嗯,一切都正常,好,下面我们要试验我们的级联删除功能了。

    我们将只删除roottb

    表中id

    为2

    的数据记录,看看subtb

    表中rootid

    为2

    的相关子纪录是否会自动删除:CODE:[Copy to clipboard]mysql>; delete from `roottb` where `id`='2';

    Query OK, 1 row affected (0.03 sec)

    mysql>; select * from `roottb`;

    +----+------------------+

    | id | data |

    +----+------------------+

    | 1 | test root line 1 |

    | 3 | test root line 3 |

    +----+------------------+

    2 rows in set (0.00 sec)

    mysql>; select * from `subtb`;

    +----+--------+----------------------------+

    | id | rootid | data |

    +----+--------+----------------------------+

    | 1 | 1 | test sub line 1 for root 1 |

    | 2 | 1 | test sub line 2 for root 1 |

    | 3 | 1 | test sub line 3 for root 1 |

    | 7 | 3 | test sub line 1 for root 3 |

    | 8 | 3 | test sub line 2 for root 3 |

    | 9 | 3 | test sub line 3 for root 3 |

    +----+--------+----------------------------+

    6 rows in set (0.01 sec)

    嗯,看subtb

    表中对应数据确实自动删除了,测试成功。

    结论:在MySQL

    中利用外键实现级联删除成功!

    展开全文
  • 定义数据表假如某个电脑生产商,它数据库中保存着整机和配件产品信息。用来保存整机产品信息表叫做 pc;用来保存配件供货信息表叫做 parts。在 pc 表中有一个字段,用来描述这款电脑所使用CPU型号;在 ...

    定义数据表假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 pc;用来保存配件供货信息的表叫做 parts。

    在 pc 表中有一个字段,用来描述这款电脑所使用的CPU型号;

    在 parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。

    很显然,这个厂家生产的电脑,其使用的 cpu 一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)—— pc 表中的 cpu 型号受到 parts 表中型号的约束。

    首先我们来创建 parts 表:

    CREATE TABLE parts (

    ... 字段定义 ...,

    model VARCHAR(20) NOT NULL,

    ... 字段定义 ...

    );

    接下来是 pc 表:

    CREATE TABLE pc (

    ... 字段定义 ...,

    cpumodel VARCHAR(20) NOT NULL,

    ... 字段定义 ...

    };

    设置索引

    若要设置外键,在参照表 (referencing table,即pc表) 和被参照表 (referenced table,即parts表) 中,相对应的两个字段必须都设置索引 (index)。

    对parts表:

    ALTER TABLE parts ADD INDEX idx_model (model);

    这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。

    对pc表也类似:

    ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);

    事实上这两个索引可以在创建表的时候就设置。这里只是为了突出其必要性。

    定义外键

    下面为两张表之间建立前面所述的那种“约束”。因为pc的CPU型号必须参照parts表中的相应型号,所以我们将pc表的cpumodel字段设置为“外键”(FOREIGN KEY),即这个键的参照值来自于其他表。

    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model

    FOREIGN KEY (cpumodel)

    REFERENCES parts(model);

    第一行是说要为pc表设置外键,给这个外键起一个名字叫做fk_cpu_model;第二行是说将本表的cpumodel字段设置为外键;第三行是说这个外键受到的约束来自于parts表的model字段。

    这样,我们的外键就搞好了!如果我们试着CREATE一台pc,它所使用的 cpu 的型号是 parts 表中不存在的,那么 MySQL 会禁止这台 PC 被 CREATE 出来。

    级联操作

    一切看起来都挺好的,不是吗?

    考虑以下这种情况:

    技术人员发现,一个月之前输入到 parts 表中的某个系列的 cpu (可能有很多款)的型号全都输错了一个字母,现在需要改正。我们希望的是,当 parts 表中那些 Referenced Column 有所变化时,相应表中的 Referencing Column 也能自动更正。

    可以在定义外键的时候,在最后加入这样的关键字:

    ON UPDATE CASCADE; 即在主表更新时,子表(们)产生连锁更新动作,似乎有些人喜欢把这个叫“级联”操作。:)

    如果把这语句完整的写出来,就是:

    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model

    FOREIGN KEY (cpumodel)

    REFERENCES parts(model)

    ON UPDATE CASCADE;

    除了 CASCADE 外,还有 RESTRICT(禁止主表变更)、SET NULL(子表相应字段设置为空)等操作。

    InnoDB拒绝任何试着在子表创建一个外键值而不匹配在父表中的候选键值的INSERT或UPDATE操作。一个父表有一些匹配的行的子表,InnoDB对任何试图更新或删除该父表中候选键值的UPDATE或DELETE操作有所动作,这个动作取决于用FOREIGN KEY子句的ON UPDATE和ON DETETE子句指定的referential action。当用户试图从一个父表删除或更新一行之时,且在子表中有一个或多个匹配的行,InnoDB根据要采取的动作有五个选择:

    · CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都可用。在两个表之间,你不应定义若干在父表或子表中的同一列采取动作的ON UPDATE CASCADE子句。

    · SET NULL: 从父表删除或更新行,并设置子表中的外键列为NULL。如果外键列没有指定NOT NULL限定词,这就是唯一合法的。ON DELETE SET NULL和ON UPDATE SET NULL子句被支持。

    · NO ACTION: 在ANSI SQL-92标准中,NO ACTION意味这不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒绝对父表的删除或更新操作。

    · RESTRICT: 拒绝对父表的删除或更新操作。NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。

    · SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

    展开全文
  • 定义数据表假如某个电脑生产商,它数据库中保存着整机和配件产品信息。用来保存整机产品信息表叫做 pc;用来保存配件供货信息表叫做 parts。在 pc 表中有一个字段,用来描述这款电脑所使用CPU型号;在 ...

    定义数据表

    假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 pc;用来保存配件供货信息的表叫做 parts。

    在 pc 表中有一个字段,用来描述这款电脑所使用的CPU型号;

    在 parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。

    很显然,这个厂家生产的电脑,其使用的 cpu 一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)—— pc 表中的 cpu 型号受到 parts 表中型号的约束。

    首先我们来创建 parts 表:

    CREATE TABLE parts (
    ... 字段定义 ...,
    model VARCHAR(20) NOT NULL,
    ... 字段定义 ...
    );

    接下来是 pc 表:

    CREATE TABLE pc (
    ... 字段定义 ...,
    cpumodel VARCHAR(20) NOT NULL,
    ... 字段定义 ...
    };

    设置索引

    若要设置外键,在参照表 (referencing table,即pc表) 和被参照表 (referenced table,即parts表) 中,相对应的两个字段必须都设置索引 (index)。

    对parts表:

    ALTER TABLE parts ADD INDEX idx_model (model);
    这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。

    对pc表也类似:

    ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);

    事实上这两个索引可以在创建表的时候就设置。这里只是为了突出其必要性。

    定义外键

    下面为两张表之间建立前面所述的那种“约束”。因为pc的CPU型号必须参照parts表中的相应型号,所以我们将pc表的cpumodel字段设置为“外键”(FOREIGN KEY),即这个键的参照值来自于其他表。

    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model 
    FOREIGN KEY (cpumodel) 
    REFERENCES parts(model);

    第一行是说要为pc表设置外键,给这个外键起一个名字叫做fk_cpu_model;第二行是说将本表的cpumodel字段设置为外键;第三行是说这个外键受到的约束来自于parts表的model字段。

    这样,我们的外键就搞好了!如果我们试着CREATE一台pc,它所使用的 cpu 的型号是 parts 表中不存在的,那么 MySQL 会禁止这台 PC 被 CREATE 出来。

    级联操作

    一切看起来都挺好的,不是吗?

    考虑以下这种情况:

    技术人员发现,一个月之前输入到 parts 表中的某个系列的 cpu (可能有很多款)的型号全都输错了一个字母,现在需要改正。我们希望的是,当 parts 表中那些 Referenced Column 有所变化时,相应表中的 Referencing Column 也能自动更正。

    可以在定义外键的时候,在最后加入这样的关键字:

    ON UPDATE CASCADE; 即在主表更新时,子表(们)产生连锁更新动作,似乎有些人喜欢把这个叫“级联”操作。:)

    如果把这语句完整的写出来,就是:

    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model 
    FOREIGN KEY (cpumodel) 
    REFERENCES parts(model)
    ON UPDATE CASCADE;

    除了 CASCADE 外,还有 RESTRICT(禁止主表变更)、SET NULL(子表相应字段设置为空)等操作。

     

    InnoDB拒绝任何试着在子表创建一个外键值而不匹配在父表中的候选键值的INSERT或UPDATE操作。一个父表有一些匹配的行的子表,InnoDB对任何试图更新或删除该父表中候选键值的UPDATE或DELETE操作有所动作,这个动作取决于用FOREIGN KEY子句的ON UPDATE和ON DETETE子句指定的referential action。当用户试图从一个父表删除或更新一行之时,且在子表中有一个或多个匹配的行,InnoDB根据要采取的动作有五个选择:

    · CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都可用。在两个表之间,你不应定义若干在父表或子表中的同一列采取动作的ON UPDATE CASCADE子句。

    · SET NULL: 从父表删除或更新行,并设置子表中的外键列为NULL。如果外键列没有指定NOT NULL限定词,这就是唯一合法的。ON DELETE SET NULL和ON UPDATE SET NULL子句被支持。

    · NO ACTION: 在ANSI SQL-92标准中,NO ACTION意味这不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒绝对父表的删除或更新操作。

    · RESTRICT: 拒绝对父表的删除或更新操作。NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。

    · SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

    转载于:https://www.cnblogs.com/lijc1990/archive/2012/10/18/2729515.html

    展开全文
  • #外键user_info FOREIGN KEY(usertype_id) REFERENCES card_type(usertype_id) ON DELETE CASCADE,##创建外键关系语句 FOREIGN KEY(user_id) REFERENCES user_info(user_id) ON DELETE CASCADE ##创建外键关系语句...

    CREATE DATABASE bankDB;

    USE bankDB;

    ##drop TABLE user_info

    CREATE TABLE user_info(

    user_id INT AUTO_INCREMENT PRIMARY KEY,

    user_name NVARCHAR(30),

    user_sex NVARCHAR(4)

    );

    ##drop TABLE card_type

    CREATE TABLE card_type(

    usertype_id INT AUTO_INCREMENT PRIMARY KEY,

    usertype_Name NVARCHAR(30)

    );

    ##DROP TABLE user_card

    CREATE TABLE user_card(

    usercard_id INT AUTO_INCREMENT PRIMARY KEY,

    usercard_number NVARCHAR(30),

    usercard_pwd INT,

    usercard_remark TEXT,

    usertype_id INT,#外键user_type

    user_id INT,#外键user_info

    FOREIGN KEY(usertype_id) REFERENCES  card_type(usertype_id) ON DELETE CASCADE,##创建外键关系语句

    FOREIGN KEY(user_id) REFERENCES  user_info(user_id) ON DELETE CASCADE ##创建外键关系语句

    )TYPE=INNODB;

    INSERT INTO user_card VALUES (NULL,'500226198705088574',123456,'备注',1,1);

    INSERT INTO user_card VALUES (NULL,'500226199995088574',123456,'备注',2,1);

    INSERT INTO user_card VALUES (NULL,'500226155505088574',123456,'备注',3,1);

    INSERT INTO user_card VALUES (NULL,'500226198705088574',123456,'备注',1,2);

    INSERT INTO user_card VALUES (NULL,'500226777705088574',123456,'备注',1,3);

    INSERT INTO user_card VALUES (NULL,'500226192115088574',123456,'备注',1,4);

    INSERT INTO user_card VALUES (NULL,'500226097050488574',123456,'备注',1,6);

    INSERT INTO user_card VALUES (NULL,'500226777705088574',123456,'备注',2,3);

    INSERT INTO user_card VALUES (NULL,'500226192115088574',123456,'备注',3,4);

    INSERT INTO user_card VALUES (NULL,'500226097050488574',123456,'备注',1,8);

    INSERT INTO user_info VALUES (NULL,'张三0','男');

    INSERT INTO user_info VALUES (NULL,'张三1','女');

    INSERT INTO user_info VALUES (NULL,'张三2','男');

    INSERT INTO user_info VALUES (NULL,'张三3','男');

    INSERT INTO user_info VALUES (NULL,'张三4','男');

    INSERT INTO user_info VALUES (NULL,'张三5','男');

    INSERT INTO user_info VALUES (NULL,'张三6','女');

    INSERT INTO user_info VALUES (NULL,'张三7','女');

    INSERT INTO card_type VALUES (NULL,'信贷卡');

    INSERT INTO card_type VALUES (NULL,'借记卡');

    INSERT INTO card_type VALUES (NULL,'消费卡');

    SELECT * FROM user_info;

    SELECT * FROM card_type;

    SELECT * FROM user_card;

    ######查询卡:信贷卡的用户信息记录#######

    ##方法一:

    SELECT  user_info.user_id,user_info.user_name,user_info.user_sex

    FROM user_info,user_card,card_type

    WHERE   user_info.user_id=user_card.user_id

    AND user_card.usertype_id=card_type.usertype_id

    AND card_type.usertype_Name='信贷卡';

    SELECT  * FROM user_info,user_card,card_type

    ##方法二

    SELECT * FROM user_info WHERE user_id IN(

    SELECT user_id FROM user_card WHERE usertype_id =(

    SELECT usertype_id FROM card_type WHERE usertype_Name='信贷卡')

    );

    ##左连接(以user_info为显示基础,user_card没有符合条件则以null填充显示)

    SELECT DISTINCT * FROM user_info LEFT JOIN user_card ON user_info.user_id=user_card.user_id

    ##右连接(与上面相反)

    SELECT DISTINCT * FROM user_info RIGHT JOIN user_card ON user_info.user_id=user_card.user_id

    ##内连接(ON等同于where)

    SELECT DISTINCT * FROM user_info INNER JOIN user_card ON user_info.user_id=user_card.user_id

    展开全文
  • REFERENCE_CLIENT foreign key (ClientId) references dbo.Client (ClientId) on delete cascade 这样在进行删除数据的时候就不用两张表中的数据依次进行删除了而直接删除主表中的记录就可以了,含有外键的记录自动...
  • 文章目录外键SQL语句的编写1. 外键约束作用2. 对于已经存在字段添加外键约束3. 在创建数据表时设置外键约束4. 删除外键约束5. 小结 外键SQL语句的编写 学习目标 能够写出删除外键约束SQL语句 1. 外键约束作用...
  • 关联2张表时出现了无法创建外键的情况,从这个博客看到,问题出在第六点的Charset和Collate选项在表级和字段级上的一致性上。我的2张表的编码charset和collate不一致,2张表都执行执行SQL语句:alter table 表名 ...
  • 数据库中外键SQL语句的编写 1. 外键约束作用 外键约束:对外键字段值进行更新和插入时会和引用表中字段数据进行验证,数据如果不合法则更新和插入会失败,保证数据有效性 2. 对于已经存在字段添加外键约束...
  • 了解了外键的基础定义,那么我们怎么来创建外键呢?下面我们就通过简单的示例给大家介绍下,如何创建mysql外键。首先我们可以通过cmd命令打开管理工具,登录mysql数据库。然后通过show database语句查...
  • 匿名用户1级2016-05-29 回答ALTER TABLE BADD CONSTRAINT fk_B_AFOREIGN KEY (ordersId...如果你还不是很明白话, 下面是详细例子:-- 创建测试主表. ID 是主键.CREATE TABLE test_main (id INT NOT NULL,value ...
  • 展开全部1、创建主键表,test_class,并建立class_id字段为主键;create table test_class(class_id number, class_name varchar2(20));-- Create/Recreate indexesalter table TEST_CLASSadd constraint P_CLASS_ID...
  • 使用innodb引擎,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括RESTRICT、NO ACTION、SET...
  • 满意答案qzxcqqzx2016.05.29采纳率:45%等级:12已帮助:7313人ALTER TABLE BADD CONSTRAINT fk_B_AFOREIGN...如果你还不是很明白话, 下面是详细例子:-- 创建测试主表. ID 是主键.CREATE TABLE test_main (id ...
  • sql设置外键(设置外键的sql语句)2020-07-24 11:44:03共8个回答sql怎么设置外键创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只有主键没有外键时不行的。建外键的前提是此外键...
  • 关联2张表时出现了无法创建外键的情况,从这个博客看到,问题出在第六点的Charset和Collate选项在表级和字段级上的一致性上。我的2张表的编码charset和collate不一致,2张表都执行执行SQL语句: alter table 表名 ...
  • 执行创建外键的语句是: alter table osc_forum_fields add constraint FK_forum_value foreign key (forum) references osc_forums ( id ); 执行错误信息是: [SQL] alter table osc_forum_fields add ...
  • 外键的作用是建立子表与父表的关联关系,是约束父表和子表, 1.父表和子表存储引擎一样且只能为InnoDB,禁止使用临时表, 2.外键列和参照列必须具有相似的数据类型,其中数字的长度或是否有符号位必须相同,而字符...
  • 为mysql数据表建立主外键需要注意以下几点:需要建立主外键关系两个表存储引擎必须是InnoDB。外键列和参照列必须...一、SQL语句创建数据表并设置主外键关系create table demo.ChineseCharInfo(ID int not nul...
  • 关联2张表时出现了无法创建外键的情况,从这个博客看到,问题出在第六点的Charset和Collate选项在表级和字段级上的一致性上。我的2张表的编码charset和collate不一致,2张表都执行执行SQL语句:alter table 表名 ...
  • sql创建外键

    千次阅读 2015-09-15 08:39:59
    创建外键约束有两种情形,一是在建立表时候就创建,另一种是在表建立以后再修改添加外键约束。 第一种:建立表时候就创建 通过SQL语句创建主外键表 create table UserInfo( UserID int identity(1,1) ...
  • 关联2张表时出现了无法创建外键的情况,从这个博客看到,问题出在第六点的Charset和Collate选项在表级和字段级上的一致性上。我的2张表的编码charset和collate不一致,2张表都执行执行SQL语句:alter table 表名 ...
  • --sql语句创建同时添加外键约束CREATE TABLE tb_UserAndRole --用户角色表(ID INT PRIMARY KEY IDENTITY(1,1),UserID INT NOT NULL,--用户IDRoleID INT NOT NULL,--角色IDforeign key(UserID) references tb_...
  • 在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键,具体语法格式如下:[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…]REFERENCES 主键列1 [,主键列2,…]举例:现在在 test_db 数据库中创建一个...
  • 在建表语句中,将参照定义放到对应属性后面,类似于这样: create table tbl2 (id int references tbl1(id)); 发现并没有成功创建外键。 而将参照定义放到所有属性后面,类似于这样: create table tbl2...
  • 表teacher: create table teacher ( ...在teacher_course表中创建外键tno和cno,运行时报错“消息 156,级别 15,状态 1,第 14 行 关键字 'foreign' 附近有语法错误。” 是为什么 谢谢各位~
  • 2.创建外键报错: ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 '' 冲突。 原因:发生这种情况是因为您尝试从 A表 到B表 创建一个外键,并且 A 中值与 B中任何值不匹配。您不能创建违反参照完整性关系。就.....
  • 创建外键语法 ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ; 3.使用组合主键 如果一列不能唯一区分一...
  • 创建外键的表sql语句

    千次阅读 2012-09-12 10:48:43
    create table tablename ( id int(11) not null, name varchar(256) not null, school_id int(11) not null, primary key(id), foreign key(school_id) references school(id) ...其中school为表名
  • 首先,目前在产品环境可用MySQL 版本(指4.0.x 和4.1.x )中,只有InnoDB 引擎才允许使用外键,所以,我们数据表必须使用InnoDB 引擎。 下面,我们先创建以下测试用数据库表:CODE:[Copy to clipboard]CREATE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,083
精华内容 433
关键字:

创建外键的语句