MySQL主键和外键用到及明确指出
一、外键约束
MySQL通过外键约束来意味着表与备注之间的数据的完整性和准确性。
外键的适用条件:
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透露事件会有允许,可原设参数:RESTRICT(上限外表中的外键改动)CASCADE(随同外键改动)SET NULL(所设空值)SET DEFAULT(分设默认值)NO ACTION(无动作,绑定的)语法脱胎
恰当科学实验一下适用,动手dage和xiaodi两个详见,大哥表是主键,小弟表是外键
建表:
1CREATE TABLE `dage` ( 2 `id` int(11) NOT NULL auto_increment, 3 `name` varchar(32) default '', 4 PRIMARY KEY (`id`)) 5 ENGINE=InnoDB DEFAULT CHARSET=latin1; 6 7CREATE TABLE `xiaodi` ( 8 `id` int(11) NOT NULL auto_increment, 9 `dage_id` int(11) default NULL,10 `name` varchar(32) default '',11 PRIMARY KEY (`id`),12 KEY `dage_id` (`dage_id`),13 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)14) ENGINE=InnoDB DEFAULT CHARSET=latin1;
填入个大哥:
1mysql> insert into dage(name) values('铜锣湾');2Query OK, 1 row affected (0.01 sec)3mysql> select * from dage;4+----+--------+5| id | name |6+----+--------+7| 1 | 铜锣湾 |8+----+--------+91 row in set (0.00 sec)
填充个小弟:
1mysql> insert into xiaodi(dage_id,name) values(1,'铜锣湾_小弟A');2Query OK, 1 row affected (0.02 sec)34mysql> select * from xiaodi;5+----+---------+--------------+6| id | dage_id | name |7+----+---------+--------------+8| 1 | 1 | 铜锣湾_小弟A |9+----+---------+--------------+
把大哥更正:
1mysql> delete from dage where id=1;2ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
提醒:不来呀,有约束的,大哥下面还有小弟,可不用抛下我们不管呀!
填入一个新的小弟:
1mysql> insert into xiaodi(dage_id,name) values(2,'旺角_小弟A'); 2ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))3
若有:小子,不想反叛呀!你还不曾大哥呢!
把外键约束上升事件系统会受限:
1mysql> show create table xiaodi; 2 3 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`) 4 5mysql> alter table xiaodi drop foreign key xiaodi_ibfk_1; 6Query OK, 1 row affected (0.04 sec) 7Records: 1 Duplicates: 0 Warnings: 8mysql> alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade on update cascade; 9Query OK, 1 row affected (0.04 sec)10Records: 1 Duplicates: 0 Warnings: 0
再次试着把大哥删了:
1mysql> delete from dage where id=1;2Query OK, 1 row affected (0.01 sec)34mysql> select * from dage;5Empty set (0.01 sec)67mysql> select * from xiaodi;8Empty set (0.00 sec)
哎呦,这回对应的小弟也竟然,没人办法,谁让你跟我on delete cascade(级联受到限制)了呢!
热点新闻
Atitit .linux 取走root 密码q99
MySQL中RESET SLAVE和RESET MASTER的区别
TokuDB存储引擎
MySQL数据库下用户及用户权限配有
1.Mariadb(mysql)基本操作
MySQL关于exists的一个bug
干货~多线程下1分钟已完成1000万条数据插进到数据…
MySQL充分利用两张列于数据的同步
有关binlog的那点事(mysql5.7.13)
年轻熟妇人妻肉欲系列|输了让同学玩全部位置的游戏
MySQL的20条基本优化 赞参考资料
MYSQL(三)
MySQL外键与外键关系指明(最简单易懂)
内嵌CSV格式的数据
缓慢而有力的一下又一下/超级乱婬伦怀孕小说全集
关于我们 - 广告合作 - 联系我们 - 免责声明 - 网站地图 - 投诉建议 - 在线投稿
©CopyRight 2008-2020 caicaipc.com Inc All Rights Reserved.
菜菜电脑网 版权所有