发布网友
共4个回答
懂视网
CREATE TABLE `课程性质` (
`id` int(11) NOT NULL,
`课程性质` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `课程性质` (`课程性质`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (
`课程代码` varchar(6) NOT NULL,
`课程名称` varchar(50) DEFAULT NULL,
`课程性质` varchar(30) DEFAULT NULL,
`期末成绩` double DEFAULT NULL,
`总评成绩` double DEFAULT NULL,
`课程学分` double DEFAULT NULL,
PRIMARY KEY (`课程代码`),
KEY `课程性质` (`课程性质`),
CONSTRAINT `grade_ibfk_1` FOREIGN KEY (`课程性质`) REFERENCES `课程性质` (`课程性质`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
当你想在grade表中插入以下的记录的时候:运行如下语句
(语句一)
INSERT INTO `grade` VALUES (‘000042‘, ‘大学语文‘, ‘通识教育必修课‘, ‘78‘, ‘78‘, ‘2‘);
这时你发现插入不了,发现你有外键依赖不能插入该记录
所以你先执行如下:运行如下语句
(语句二)
INSERT INTO `课程性质` VALUES (‘1‘, ‘通识教育必修课‘);
这时你可能以为这次再次运行(语句一)
INSERT INTO `grade` VALUES (‘000042‘, ‘大学语文‘, ‘通识教育必修课‘, ‘78‘, ‘78‘, ‘2‘);
没问题了吧?
你发现还是错了!!!(不要担心,这还是可恶的外键搞得鬼)
最后你会百度得到以下解决方案
原来要改成如下语句才可实现你所想要达成的效果
(语句三)
INSERT INTO `grade` VALUES (‘000042‘, ‘大学语文‘,(select `课程性质` from `课程性质` where `课程性质`=‘通识教育必修课‘), ‘78‘, ‘78‘, ‘2‘);
这下你会发现真的可以了。
综上所述,建立外键是个可以建立数据库中列与列的关系,但是无疑会增加服务器资源的消耗,编写sql语句的复杂度增加,所以在大型的数据库中能少用则少用。
当数据库遇上外键
标签:
热心网友
外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。
当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。
例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。
titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。
扩展资料:
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。
学号在成绩表(表2)中是主键,在学生表(表1)中是外键。如果不使用外键,表1的学号字段插了一个值(比如20140999999),但是这个值在表2中并没有,这个时候,数据库允许插入,并不会对插入的数据做关系检查。
然而在设置外键的情况下,插入表1学号字段的值必须要求在表1的学号字段能找到。 同时,如果要删除表2的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。
这就是所谓的保持数据的一致性和完整性。如右图,如果表1还引用表2的某个学号,却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。
参考资料:百度百科-外键
热心网友
设表t1,t2中都有一个name字段,而且是t1的主键
那么如果设t2中的name为外键的话
向t2中添加数据的时候,如果name值不在t1之中就会报错
热心网友
主键就是主关键字。
主关键字(Primary Key)
按照数据库设计的完整性,每条记录应当具备惟一性,不和其他记录发生重复和冲突。而可以区别出这种惟一性的一个或多个字段就是主关键字,一般Access会生成自动编号作为主键
外键就是除主键外的关键字
主键与外键用于区分不同的记录便于查询
外键(Foreign Key)
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
参考资料:http://ke.baidu.com/view/68073.html?wtp=tt