CREATE DATABASE `studySQL` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
USE `studySQL`;
SET NAMES UTF8;
CREATE TABLE IF NOT EXISTS `cg_topics`
(
`topic_id` TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`topic_name` VARCHAR(200) NOT NULL DEFAULT 'topic' COMMENT '栏目名'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '栏目';
INSERT INTO `cg_topics` VALUES (1,'心灵鸡汤'),
(2,'奇闻异事'),
(3,'生活花絮');
CREATE TABLE IF NOT EXISTS `cg_articles`
(
`article_id` TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`topic_id` TINYINT NOT NULL,
`article_title` VARCHAR(200) NOT NULL DEFAULT 'title' COMMENT 'title',
FOREIGN KEY (`topic_id`) REFERENCES `cg_topics`(`topic_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '文章';
INSERT INTO `cg_articles` VALUES (1,1,'望庐山瀑布'),
(2,1,'静夜思'),
(3,1,'菊花台'),
(4,2,'望庐山瀑布'),
(5,2,'静夜思'),
(6,3,'菊花台');
这段SQL代码能够设置FOREIGN KEY。
之后,我执行SQL语句
DELETE FROM `cg_topics` WHERE `topic_id`=1;结果是
我原以为,FOREIGN KEY的作用是,删除parent row之后,在另一个表中以该字段为FOREIGN KEY的数据会被自动删除。实际运行结果表明,外键的作用是,在另一个表存在以该外键为外键的数据的情况下,不能删除parent row。
清空外键为某个值的所有数据后,再尝试在另一个表中删除此外键值,SQL语句
DELETE FROM `cg_articles` WHERE `topic_id`=3;
DELERE FROM `cg_topics` WHERE `topic_id=3`;可以正确执行。