MySQL外键约束创建及删除创建外键定义(转)

MySQL外键约束创建及删除创建外键定义 :


CREATE TABLE categories (

category_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,

name varchar(30) NOT NULL,

PRIMARY KEY(category_id)

) ENGINE=INNODB;


INSERT INTO categories VALUES (1, ‘SQL Server’), (2, ‘Oracle’), (3, ‘PostgreSQL’), (4, ‘MySQL’), (5, ‘SQLite’);


CREATE TABLE members (

member_id INT(11) UNSIGNED NOT NULL,

name VARCHAR(20) NOT NULL,

PRIMARY KEY(member_id)

) ENGINE=INNODB;


CREATE TABLE articles (

article_id INT(11) unsigned NOT NULL AUTO_INCREMENT,

title varchar(255) NOT NULL,

category_id tinyint(3) unsigned NOT NULL,

member_id int(11) unsigned NOT NULL,

INDEX (category_id),

FOREIGN KEY (category_id) REFERENCES categories (category_id), CONSTRAINT fk_member FOREIGN KEY (member_id) REFERENCES members (member_id),

PRIMARY KEY(article_id)

) ENGINE=INNODB;


categories.category_id和articles.category_id、members.member_id和articles.member_id已经建立外键关系,只有articles.category_id的值存在与categories.category_id表中并且articles.member_id的值存在与members.member_id表中才会允许被插入或修改。:


删除外键定义 :

定义外键的时候articles.member_id外键比articles.category_id子句多了一个CONSTRAINT fk_member。这个fk_member就是用来删除外键定义用的:

ALTER TABLE articles DROP FOREIGN KEY fk_member;

这样articles.member_id外键定义就被删除

如果定义时没有指定CONSTRAINT fk_symbol(即外键符号)时MySQL会自己创建一个,可以通过以下命令查看:

SHOW CREATE TABLE articles;


+———-+————————————+ | Table | Create Table | +———-+————————————+ | articles | CREATE TABLE `articles` ( `article_id` int(11) unsigned NOT NULL auto_increment, `category_id` tinyint(3) unsigned NOT NULL, `member_id` int(11) unsigned NOT NULL, `title` varchar(255) NOT NULL, PRIMARY KEY (`article_id`), KEY `category_id` (`category_id`), KEY `member_id` (`member_id`), CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +———-+————————————+ 1 row in set (0.01 sec)


可以看出articles.category_id的外键符号为articles_ibfk_1,因此就可以执行以下命令删除外键定义:


ALTER TABLE articles DROP FOREIGN KEY articles_ibfk_1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值