外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以; 外键的用处: 可以使得两张表关联,保证数据的一致性和实现一些级联操作; 外键的定义语法: [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。 ON DELETE、ON UPDATE表示事件触发限制,可设参数: (1) CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都可用。在两个表之间,你不应定义若干在父表或子表中的同一列采取动作的ON UPDATE CASCADE子句。 (2)SET NULL: 从父表删除或更新行,并设置子表中的外键列为NULL。如果外键列没有指定NOT NULL限定词,这就是唯一合法的。ON DELETE SET NULL和ON UPDATE SET NULL子句被支持。 (3)NO ACTION: 在ANSI SQL-92标准中,NO ACTION意味这不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒绝对父表的删除或更新操作。 (4)RESTRICT: 拒绝对父表的删除或更新操作。NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。 (5)SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。
详细解决方案
相关解决方案
- mysql 简单化 or能否实现
- 请问registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister
- MySQL 5.5 Command Line Client 窗口1输密码就退出
- 在LINUX上配置 MySQL 开机自动 启动
- mysql 转 orocle java ssh项目一条 sql 句不通!
- 上了个 MySQL 5.5.25 但是安装时出错了
- JDBC MYSQL 驱动加载失败 JSP DAO ECLIPSE,该怎么解决
- tomcat 中抛异com.mysql.jdbc.exceptions.MySQLTransactionRollbackException,该如何处理
- struts+iBatis+mysql,该如何解决
- mysql 有外键的插入解决方案
- mysql,该如何处理
- MyBatis3.1.1 Insert 回到主键 long类型 MYSQL 数据库
- mysql:假若一个表中,有两个属性name和id,删除同名的保留id小的,问这样写有误吗
- java mysql where限制有关问题
- 救助。Mysql 的条件删除语句如何写,就是删除部门的时候,如果部门下有用户,就不能删除
- mysql 触发器 根据更新的这一列的数据来更新本行的另一列数据解决办法
- 数据库Sqlserver,Sybase,orcale,mysql 用jDBC 做分页操作的查询效率有什麽区别解决办法
- sql+mysql+chart+DataTable实现折线图分享!解决方案
- sql+mysql+chart+DataTable兑现折线图分享
- mysql diopdownlist连接数据库,该怎么解决
- MySQL 自动增长列的有关问题?求高手指导,小弟我是学生
- MySQL 主键和自增列的有关问题 新手在学 求指导
- Unable to connect to any of the specified MySQL hosts为什么连不上mysql?该如何解决
- mysql 的存储过程变量如何在 sql 中使用
- 在小公司怎么成长为高级 mysql dba
- Myeclipse+Jboss+mysql JNDI调用疏失
- Myeclipse+Jboss+mysql JNDI调用出错,该怎么解决
- mysql+weblogic连接池的有关问题
- Mysql 不明原因经常重启,造成无法访问,该怎么处理
- 数据库推选(oracle vs mysql)