欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

mysql添加外键

shiping1 的头像

 

 
为已经添加好的数据表添加外键:
语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)
//FK_ID是外键的名称
/*
CREATE TABLE `tb_active` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `user_id` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `user_id` (`user_id`),
 KEY `user_id_2` (`user_id`),
 CONSTRAINT `FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
*/
 
 
删除外键
语法: ALTER TABLE table-name DROP FOREIGN KEY key-id;
例:   ALTER TABLE `tb_active` DROP FOREIGN KEY `FK_ID`


//下面这个应该也可以
ALTER TABLE 表名 ADD FOREIGN KEY (列名) REFERENCES 表名(列名)。
例如: 
ALTER TABLE nets ADD FOREIGN KEY (user_id) REFERENCES users(id)
 
 
自动键更新和删除:
外键可以保证新插入的记录的完整性,但是,如果在REFERENCES从句中已命名的表删除记录会怎么样?在使用同样的值作为外键的辅助表中会发生什么?
 
 很明显,那些记录也应该被删除,否则在数据库中就会有很多无意义的孤立记录,MYSQL可以通过向FOREIGN KEY...REFERENCES修饰符添加一个ON DELETE 或ON UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务
 
 关键字     含义
 CASCADE    删除包含与已删除键值有参照关系的所有记录
 SET NULL   修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
 RESTRICT   拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
 NO ACTION  啥也不做
 
 请注意,通过ON UPDATE 和 ON DELETE规则,设置MYSQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏,
 例如:如果一系列的表通过外键关系和ON DELETE CASCADE 规则连接时,任意一个主表的变化都会导致甚至只和原始删除有一些将要联系的记录在没有警告的情况被删除,所以,我们在操作之前还要检查这些规则的,操作之后还要再次检查.
 
 
 
添加外键
alter table locstock add foreign key locstock_ibfk2(stockid) references product(stockid)
locstock 为表名, locstock_ibfk2 为外键名 第一个括号里填写外键列名, product为表名,第二个括号里是写外键关联的列名
 
删除外键
alter table locstock drop foreign key locstock_ibfk2
 
查看表有哪些外键
show create table locstock
 
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) 
    REFERENCES tbl_name (index_col_name, ...) 
    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] 
    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}] 
 
 
         所有tables必须是InnoDB型 ,它们不能是临时表。
·         在引用表中,必须有一个索引,外键列以同样的顺序被列在其中作为第一列。这样一个索引如果不存在,它必须在引用表里被自动创建。
·         在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。
·         不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中, 这是因为对这些列的索引必须总是包含一个前缀长度。
·         如果CONSTRAINTsymbol 被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。
来自 http://www.cnblogs.com/xiangxiaodong/archive/2013/05/05/3061049.html


mysql 增加外键:(+创建主键)

  •  
  • |
  • 浏览:1738
  • |
  • 更新:

 MySQL是开源免费的数据库软件,是一款很优秀的软件,作为我们的学生或者科研人员在开发软件的时候,最好用也是最省钱的。所以MySQL学好是至关重要的!

SQL语言包含4个部分:

  ※ 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。

  ※ 数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。

  ※ 数据查询语言(DQL),例如:SELECT语句。

  ※ 数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。

在学MySQL时会出现很多的问题,下面们就一些琐碎的问题给大家讲解下:

  • 1.如何添加外键。这是个很重要的问题

添加外键:constraint 外键名 foreign key(外键字段) references 关联表名(关联字段);

ALTER TABLE t_student ADD CONSTRAINT t_cname1 FOREIGN KEY(cname) REFERENCES t_class(NAME);

 

t_comment 是评论表,n_id 是其字段,为n_id 添加外键,对应的关联表是t_news.

ALTER TABLE t_commentADD CONSTRAINT n_idFOREIGN KEY(n_id)REFERENCES t_news(id)

 

 

数据表,数据的修改

 

  • 2 基本表结构的修改

语法格式:

ALTER TABLE <基本表名>

[ ADD <新列名> <数据类型> [ 完整性约束 ] ]

[ DROP <列名> [CASCADE│RESTRICT]]

[ MODIFY <列名> <数据类型> ];

n<表名>:要修改的基本表

nADD子句:增加新列和新的完整性约束条件

nDROP子句:删除指定的列

nMODIFY子句:修改原有列的宽度和数据类型

 

注意:

nCASCADE方式表示:在基本表中删除某列时,所有引用到该列的视图和约束也要一起自动地被删除。

nRESTRICT方式表示:在没有视图或约束引用该属性时,才能在基本表中删除该列,否则拒绝删除操作。

 

 

 

 
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
举报作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。


来自 http://jingyan.baidu.com/article/e2284b2b3fb289e2e6118d29.html

普通分类: