mysql删除外键相关知识
-
MySQL删除外键问题小结MySQL:MySQL不能删除外键,抱错Error on rename of ./ruler/test2child to ./ruler/#sql2-298-92 (errno: 152)曾经这是MySQL的一个bug,但是现在只是MySQL的一个不友好的地方。例子如下:?123mysql> ALTER TABLE ruler.test2child DROP FOREIGN KEY test;ERROR 1025 : Error on rename of ''./ruler/test2child'' to ''./ruler/#sql2-298-8f'' (errno:152)这里并不是不能删除外键,而是使用了错误的外键名称,但是MySQL报的错实在离谱。正确的错误信息要如下查询才能知道:?mysql> show innodb status; ------------------------LATEST FOREIGN KEY ER
-
MySQL外键(OnDelete与OnUpdate)nDelete和OnUpdate都有Restrict,No Action, Cascade,Set Null属性。现在分别对他们的属性含义做个解释。ON DELETErestrict(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。no action:意思同restrict.即如果存在从数据,不允许删除主数据。cascade(级联):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。set null:当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)ON UPDATErestrict(约束):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。no action:意思同restrict.cascade(级联):当在父表(即外键的来源表)中更新对
-
详解MySQL中的外键约束问题使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建、检索、更新和删除等操作都是些比较简单的过程。理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候。但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多。下面我们用一个典型的例子进行说明。假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子。MySQL外键约束条件 MySQL的外键约束条件有以下几种: · CASCADE : 从父表删除或更新行时自动删除或更新子表中匹配的行。 · SET NULL : 从父表删除或更新行时自动设置子表对应的外键列值为NULL。前提是对应外键列没有指定NOT NULL限定词。 · NO ACTION : 在ANSI SQL-92标准中,NO ACTION意味着不采取任何动作。 · RESTRICT : 拒绝对父表的删除或更新操
-
快速理解MySQL中主键与外键的实例教程主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是thread.php?id=1 表示我要访问的是帖子id是1 的帖子~再来说说外键,当我们删除某个帖子的时候,需要执行另一个操作,就是删除所有回帖,如果正常情况下,我们需要执行两次delete操作(thread和 reply),这时候如果存在外键,例如,在reply 表里面建立一个指向thread表的主键(id)的外键(这个外键绑的字段,必须是对应帖子的id),并指定响应 delete ,那你在删除 thread 的时候,mysql 自己会帮你把 reply 表中这个帖子的回复都删掉,而不需要你手动再去执行一次reply表的delete操作~至于两者之间的关系,在刚才的例子中,reply 表的外键,指向的就是 thread 表的主键~~搞个例子,简单演示一下使用,做dage和xiaodi两个表,大
mysql删除外键相关课程
mysql删除外键相关教程
- 4.2 删除键 >>> db.set('name', 'ZhangSan')>>> db.get('name')'ZhangSan'>>> db.delete('name')1>>> db.get('name')>>> db.get('name') == NoneTrue在第 1 行,设置键 ‘name’ 的值为 ‘ZhangSan’在第 4 行,使用 delete() 方法删除键 ‘name’删除键 ‘name’ 后,db.get(‘name’) 返回 None
- 2.1 强外键的缺点 在外键一节中,我们介绍到外键可以通过如下的方式来创建:FOREIGN KEY (user_id) REFERENCES imooc_user(id)通过声明方式,数据库会自主将两张表做外键关联,我们把这样的外键称为强外键。强外键最大的特点就是数据库层面支持,数据库会自动维护外键关联的表。但是也正是因为这个特性,强外键不够灵活,举个例子来说,当你删除某张表的数据时,如果另一张表有此表的外键,那么删除可能会被拒绝,当然你可以通过级联来同时删除另一张表中关联的数据。如下,我们新建两张存在外键关联的表:DROP TABLE IF EXISTS imooc_user;CREATE TABLE imooc_user( id int PRIMARY KEY, username varchar(20), age int);DROP TABLE IF EXISTS imooc_user_score;CREATE TABLE imooc_user_score( id int PRIMARY KEY, user_id int NOT NULL, score int, FOREIGN KEY (user_id) REFERENCES imooc_user(id));INSERT INTO imooc_user(id,username,age) VALUES (1,'pedro',23);INSERT INTO imooc_user_score(id,user_id,score) VALUES (1,1,9);创建成功后,我们通过 Delete 来删除用户 pedro:DELETE FROM imooc_user WHERE id = 1; 数据库提示我们删除失败,并给出了如下错误信息:(1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`imooc`.`imooc_user_score`, CONSTRAINT `imooc_user_score_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `imooc_user` (`id`))')数据库告诉我们 id 是 imooc_user_score 表的外键,如果删除会破坏数据的完整性,因此拒绝了我们的操作。我们改造一下外键约束,让它支持级联删除:ALTER TABLE imooc_user_score DROP FOREIGN KEY imooc_user_score_ibfk_1;ALTER TABLE imooc_user_score ADD CONSTRAINT imooc_user_score_ibfk_1 FOREIGN KEY(user_id) REFERENCES imooc_user(id) ON DELETE CASCADE;我们再次删除 pedro:DELETE FROM imooc_user WHERE id = 1; 这次删除成功,且 imooc_user_score 中的关联数据也被删除了。强外键虽然能够保证数据的完整性(要么都有,要么都没有),但是弊端很明显,删除了一些数据后,与之关联的数据也都被删除了,不利于数据的维护,也不利于更改和迁移;再者,强外键会因为关联来同步检测和更新两张表,无疑会拉低数据库整体的性能。因此目前大家普遍采用弱外键的方式。
- 2.3 添加和删除键 在 Translations Editor 中,Key 列列出了 strings.xml 文件中每个数据项的唯一标识符。我们可以通过 Translations Editor 添加和删除键。当我们删除键时,Translations Editor 会删除该键及其所有相关翻译。Translations Editor 会使用安全删除重构来删除键,以便我们知晓该键文本是否用在别处,并且可以在删除该键之前进行必要的调整。安全删除重构可确保我们在删除键后仍然可以编译代码。要添加键,请执行以下操作:在 Translations Editor 中,点击 Add Key (加号图标);在对话框中,输入键名称、默认值以及默认 strings.xml 文件的位置。要删除键,请执行以下操作:在 Translations Editor 中,选择要删除的键;点击 Remove Keys (减号图标) ;在 Delete 对话框中,确定我们是否要执行安全删除以及是否要在注释和字符串中进行搜索,然后点击 OK ;如果没有任何对已删除键的引用(使用),或者所有引用均能安全地解除,则删除该键。否则,Translations Editor 会显示 Usages Detected 对话框,其中包含检测到的问题的相关信息。选择 View Usages,以查看将被删除的内容。Find Safe Delete Conflicts 对话框显示了无法安全删除的所有用例,以便我们可以修改相应的代码;右键点击相应用例以显示上下文菜单,然后选择 Jump to Source 以进行所需的更改;在 Find Safe Delete Conflicts 面板中,选择 Rerun Safe Delete 以确保没有任何其他需要注意的使用情况;清理相关使用情况后,点击 Do Refactor 以删除键。
- 8.5 增加键和删除键 >>> db.hset('person', 'gender', 'female')1>>> db.hgetall('person'){'name': 'ZhangSan', 'age': '20', 'gender': 'female'}>>> db.hdel('person', 'gender')1>>> db.hgetall('person'){'name': 'ZhangSan', 'age': '20'}在第 1 行,为哈希表 ‘person’ 增加一个键 ‘gender’,值为 ‘female’在第 3 行,使用方法 hgetall(‘person’) 显示哈希表 ‘person’ 的键值对已经增加了一个键 ‘gender’在第 5 行,使用方法 hdel(‘person’, ‘gender’) 删除哈希表 ‘person’ 中的键 ‘gender’在第 7 行,使用方法 hgetall(‘person’) 显示哈希表 ‘person’ 的键值对已经删除了键 ‘gender’
- 2.4 在字典中删除键值对 >>> x = {'a':'A', 'b':'B', 'c': 'C'}>>> del x['b']>>> x{'a':'A', 'c':'C'}在第 1 行,创建一个具有 3 个键值对的字典;在第 2 行,使用 del 语句从字典 x 中删除键 ‘b’ 对应的键值对;在第 3 行,显示删除后的字典;在第 4 行,删除一个键值对后,字典仅包含 2 个键值对。
- 2. 软删除与硬删除 从逻辑的角度上来说,我们可以把删除分为两大类:软删除和硬删除。说明描述软删除在逻辑上删除,数据依然存在会通过数据表上的某一字段来表示,如deleted硬删除在物理上删除,数据被丢弃无额外支持,直接被删掉了其实,在很多数据库中,硬删除也并非直接将数据从磁盘上丢弃,而是通过标志位将该数据标志为已删除。由于数据库是按页来组织存储数据的,如果硬删除直接将数据从页中丢弃的话,可能会引起数据页的分裂和重组,这样会大幅降低数据库的性能。但是硬删除的数据可能会被后面添加的数据覆盖,所以磁盘上也会真正的丢失掉该数据。
mysql删除外键相关搜索
-
mac osx
machine_start
macox
magellan
malloc
manifest
manifest文件
map
map 遍历
mapreduce编程
maps google com
margin
margin bottom
margin left
margin right
margin top
marginbottom
marginheight
marginleft
margintop