修改主键和外键

SQL中,一般要修改或者删除主键,只需要一个简单的命令即可:alter table 表名drop primary key.
下面我举例说明
先建一个表:table_project
Create table table_project(‘id’ varchar(10),’name’ varchar(10),rmimary(‘name’))
Engine=myisam default charest=gb2312;
这时表已经建好,然后继续录入几个数据,等数据录入完成,此表格已经生成,如果这时你发现主键错了,想再改变主键就没那么简单了,因为你只是表格的结构错了,数据并没有错误,如果这时再删除表格重新建,无疑是在自寻苦恼。

这时,其他只要两个命令就能完成。

1.先删除主键
Alter table table_project drop primary key
2.增加主键
Alter table table_project add primary key(id)
这就是如何不改变表内数据,修改主键的方法!
语法: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`
自动键更新和删除:
外键可以保证新插入的记录的完整性,但是,如果在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自动创建这个名字。

合集下载

sql主键语句

sql主键语句

sql主键语句SQL主键语句是数据库中非常重要的一部分,它可以保证数据的唯一性和完整性。

在数据库设计中,主键是一个非常重要的概念,它可以用来唯一标识一条记录。

在本文中,我们将列举出10个常用的SQL主键语句,以帮助读者更好地理解和应用主键。

1. 创建主键在创建表的时候,可以使用PRIMARY KEY关键字来定义主键。

例如:CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT);在上面的例子中,我们定义了一个名为students的表,其中id列被定义为主键。

2. 修改主键如果需要修改主键,可以使用ALTER TABLE语句。

例如:ALTER TABLE studentsDROP PRIMARY KEY,ADD PRIMARY KEY (id, name);在上面的例子中,我们将原来的主键删除,并重新定义了一个由id 和name两列组成的主键。

3. 删除主键如果需要删除主键,可以使用ALTER TABLE语句。

例如:ALTER TABLE studentsDROP PRIMARY KEY;在上面的例子中,我们删除了名为students的表的主键。

4. 复合主键复合主键是由多个列组成的主键。

例如:CREATE TABLE orders (order_id INT,customer_id INT,order_date DATE,PRIMARY KEY (order_id, customer_id));在上面的例子中,我们定义了一个名为orders的表,其中order_id和customer_id两列组成了复合主键。

5. 自增主键自增主键是一种特殊的主键,它可以自动递增。

例如:CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT);在上面的例子中,我们定义了一个名为students的表,其中id列被定义为自增主键。

数据库主键与外键约束

数据库主键与外键约束

数据库主键与外键约束数据库是一个存储和管理结构化数据的庞大系统。

在数据库中,主键与外键约束是两个重要的概念,它们在确保数据完整性和关联性方面起着关键作用。

本文将详细介绍数据库主键与外键约束的定义、作用以及使用方法。

1. 主键约束主键是指一个表中唯一标识每一条记录的字段或字段组合。

主键在数据库中具有以下特性:1.1 唯一性:主键的值在表中必须唯一,不能重复。

1.2 非空:主键的值不能为空,不能为NULL。

1.3 不可变性:主键的值一旦确定,就不能修改或者被删除。

主键约束的作用:1. 提供唯一标识:主键通过唯一标识每一条记录,便于数据的定位和管理。

2. 防止重复数据:主键约束能够防止用户插入重复的数据,确保数据的一致性。

3. 提高查询效率:数据库引擎会自动为主键创建索引,加快查询速度。

主键约束的使用方法:1. 定义主键字段:可以在表的创建语句中使用PRIMARY KEY关键字定义主键字段,也可以通过修改表结构的方式添加主键约束。

2. 主键字段的约束类型:主键字段可以是整型、字符型或者复合字段。

3. 主键的选择:选择具有唯一性、简洁性和稳定性的字段作为主键。

2. 外键约束外键是指一个表中的字段,它用来建立与另一个表的关联关系。

外键约束用于保持数据之间的引用完整性,确保数据的一致性。

外键约束具有以下特性:2.1 引用完整性:外键约束保证关联表中的外键值必须存在于被引用表中的主键中。

2.2 删除和更新操作:外键约束可以定义级联更新或级联删除等操作,以保持关联数据的一致性。

2.3 多对一关系:一个表可以有多个外键约束,用于建立与其他表的多对一关系。

外键约束的作用:1. 维护数据关联:外键约束保证了表与表之间的关联关系,确保数据在相关表之间的正确性和一致性。

2. 防止脏数据:外键约束可以阻止用户插入无效的外键值,从而避免脏数据的产生。

3. 级联操作:外键约束可以自动进行级联更新和级联删除操作,提高数据操作的效率和一致性。

主键和外键

主键和外键

主键与外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

外键用于与另一张表的关联。

是能确定另一张表记录的字段,用于保持数据的一致性。

比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

二、主键、外键和索引的区别收藏主键、外键和索引的区别?主键外键索引定义:唯一标识一条记录,不能有重复的,不允许为空表的外键是另一表的主键, 外键可以有重复的, 可以是空值该字段没有重复值,但可以有一个空值作用:用来保证数据完整性用来和其他表建立联系用的是提高查询排序的速度个数:主键只能有一个一个表可以有多个外键一个表可以有多个惟一索引聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。

但唯一索引不一定是聚集索引。

聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。

三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。

主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。

必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。

数据库中的主键与外键介绍

数据库中的主键与外键介绍

2手动增长型字段既然自动增长型字段会带来如此的麻烦,我们不妨考虑使用手动增长型的字段,也就是说主键的值需要自己维护,通常情况下需要建立一张单独的表存储当前主键键值。还用上面的例子来说,这次我们新建一张表叫IntKey,包含两个字段,KeyName以及KeyValue。就像一个HashTable,给一个KeyName,就可以知道目前的KeyValue是什么,然后手工实现键值数据递增。在SQL
Server中可以编写这样一个存储过程,让取键值的过程自动进行。代码如下:
CREATE PROCEDURE[GetKey]
@KeyNamechar(10),
@KeyValue intOUTPUT AS UPDATE IntKey SET @KeyValue =KeyValue = KeyValue + 1
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
主键是能确定一条记录的唯一标识,比如,一条记录包括身份证号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
COMB数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与UniqueIdentifier组合起来,在保留UniqueIdentifier的唯一性的同时增加了有序性,以此来提高索引效率。也许有人会担心UniqueIdentifier减少到10字节会造成数据出现重复,其实不用担心,后6字节的时间精度可以达到1/300秒,两个COMB类型数据完全相同的可能性是在这1/300秒内生成的两个GUID前10个字节完全相同,这几乎是不可能的!在SQL

了解MySQL的主键和外键的作用与设计原则

了解MySQL的主键和外键的作用与设计原则

了解MySQL的主键和外键的作用与设计原则引言:数据库是计算机科学中非常重要的概念,它用于存储和管理结构化数据。

MySQL是最常用的关系型数据库管理系统之一,被广泛应用于各个领域。

本文将深入探讨MySQL中主键和外键的作用与设计原则。

主键和外键是数据库中关系模型中的重要概念,它们用于建立表与表之间的关系。

一、主键的作用与设计原则主键是表中的唯一标识符。

它的作用是用于确保数据的唯一性和快速检索。

主键的设计原则如下:1. 唯一性:主键的值必须在整个表中是唯一的,用来标识表中的每一行数据。

可以选择一个或多个列作为主键,如果选择多个列,则这些列的组合必须唯一。

2. 不可为空:主键的值不能为空。

这样可以避免出现无效数据。

3. 稳定性:主键的值应尽量稳定,不应该经常变动。

因为主键被用作索引,如果频繁修改主键值,会导致索引频繁更新,影响数据库性能。

4. 简洁性:主键的值应该尽量简洁,以确保执行效率和空间利用率。

5. 具有实际意义:主键的值最好具有实际意义,便于开发人员和用户理解和维护。

二、外键的作用与设计原则外键用于建立表与表之间的关联关系。

它的作用是用于维护表之间的一致性和完整性。

外键的设计原则如下:1. 关联性:外键用于表与表之间的关联,必须指向其他表的主键。

2. 级联操作:外键可以设置级联操作,当关联的主键值发生变化或被删除时,外键也会相应地变化或被删除,确保数据的一致性。

3. 存在性:外键的值必须在关联表中存在,这样可以保证数据的完整性。

4. 空值允许:外键的值可以为空,表示该关联可以为空。

5. 数据类型要一致:外键和关联的主键数据类型必须一致,方便建立有效的关联关系。

6. 性能与索引:外键的使用应考虑性能和索引的影响。

如果外键的查询频繁,可以对外键列建立索引,以提高查询效率。

三、主键和外键的使用场景主键和外键在数据库设计中有许多使用场景,下面介绍几个常见的场景:1. 基本表关系:有些表之间的关系是一对一或一对多的关系,使用外键可以帮助维护表之间的关联性。

mysql数据库外键、主键详解

mysql数据库外键、主键详解

mysql数据库外键、主键详解⼀、什么是主键、外键:关系型数据库中的⼀条记录中有若⼲个属性,若其中某⼀个属性组(注意是组)能唯⼀标识⼀条记录,该属性组就可以成为⼀个主键⽐如学⽣表(学号,姓名,性别,班级)其中每个学⽣的学号是唯⼀的,学号就是⼀个主键课程表(课程编号,课程名,学分)其中课程编号是唯⼀的,课程编号就是⼀个主键成绩表(学号,课程号,成绩)成绩表中单⼀⼀个属性⽆法唯⼀标识⼀条记录,学号和课程号的组合才可以唯⼀标识⼀条记录,所以学号和课程号的属性组是⼀个主键成绩表中的学号不是成绩表的主键,但它和学⽣表中的学号相对应,并且学⽣表中的学号是学⽣表的主键,则称成绩表中的学号是学⽣表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结⼀下:1.主键是能确定⼀条记录的唯⼀标识,⽐如,⼀条记录包括⾝份正号,姓名,年龄。

⾝份证号是唯⼀能确定你这个⼈的,其他都可能有重复,所以,⾝份证号是主键。

2.外键⽤于与另⼀张表的关联。

是能确定另⼀张表记录的字段,⽤于保持数据的⼀致性。

⽐如,A表中的⼀个字段,是B表的主键,那他就可以是A表的外键。

⼆、主键、外键和索引的区别sql语句会⾃动判定查询字段有⽆索引,继⽽使⽤索引去检索主键、外键和索引的区别?主键外键索引定义:唯⼀标识⼀条记录,不能有重复的,不允许为空表的外键是另⼀表的主键, 外键可以有重复的, 可以是空值该字段没有重复值,但可以有⼀个空值作⽤:⽤来保证数据完整性⽤来和其他表建⽴联系⽤的是提⾼查询排序的速度个数:主键只能有⼀个⼀个表可以有多个外键⼀个表可以有多个惟⼀索引聚集索引和⾮聚集索引的区别?聚集索引⼀定是唯⼀索引。

但唯⼀索引不⼀定是聚集索引。

聚集索引,在索引页⾥直接存放数据,⽽⾮聚集索引在索引页⾥存放的是索引,这些索引指向专门的数据页的数据。

三、数据库中主键和外键的设计原则主键和外键是把多个表组织为⼀个有效的关系数据库的粘合剂。

修改和删除表里面的约束条件

修改和删除表里面的约束条件听好啦!一、修改表里面的约束条件1. 首先呢,你得知道你要修改的是啥约束。

是主键约束、外键约束,还是啥唯一性约束之类的。

比如说你想修改一个表名为“students”里面关于学号(student_id)字段的主键约束。

- 如果是在MySQL里,你得先看看这个约束是怎么定义的。

要是这个主键约束当初定义得有点简单,现在想加点东西,像让它自动增长之类的。

那你可能得用ALTER TABLE语句。

- 例如:原来创建表的时候是“CREATE TABLE students (student_id INT, name VARCHAR(50));”,现在想把student_id设为主键并且自动增长。

你就得这么写:“ALTER TABLE students MODIFY student_id INT AUTO_INCREMENT, ADD PRIMARY KEY (student_id);”。

这就像是给一个小盒子(student_id这个字段)加了个特殊功能(自动增长),还告诉大家这个小盒子很重要(设为主键)呢。

2. 如果是修改外键约束,那就更复杂一点啦。

假设我们有两张表,“classes”和“students”,“students”表有个字段“class_id”是指向“classes”表的主键“id”的外键。

- 要是想修改这个外键约束的一些属性,比如关联的动作(像ON DELETE CASCADE,就是当“classes”表中的记录被删除时,“students”表中相关的记录也跟着删除)。

你得先把原来的外键约束删掉(就像先把两根绳子之间不完美的连接解开),然后再重新创建一个符合新要求的外键约束(再用一根更好的绳子把它们重新连接起来,而且连接的方式更合理)。

- 在MySQL里大概是这样:先“ALTER TABLE students DROP FOREIGN KEY [外键约束名];”(这个外键约束名你可以通过查看表结构找到哦),然后再“ALTERTABLE students ADD CONSTRAINT new_fk_name FOREIGN KEY (class_id) REFERENCES classes (id) ON DELETE CASCADE;”。

MySQL中的主键与外键关系解析

MySQL中的主键与外键关系解析MySQL是一种常用的关系型数据库管理系统,被广泛应用于各种网络应用和企业级系统中。

在MySQL中,主键和外键是两个非常重要的概念。

本文将深入解析MySQL中的主键与外键关系,探讨其作用、用法以及相关注意事项。

一、主键的概念与作用主键(Primary Key)是在表中唯一标识每一条记录的一列或一组列。

它具有以下作用:1. 唯一性约束:主键要求每个记录在主键列上的值都是唯一的,不允许重复。

2. 快速索引:主键列会自动在数据库中创建索引,这使得通过主键进行查询和排序等操作更加高效。

3. 数据完整性保护:主键可以保证数据库中的数据完整性,防止数据重复、数据丢失等问题。

二、主键的定义与使用在MySQL中定义主键有两种常见的方式:1. 在创建表时定义主键:```CREATE TABLE 表名 (列名数据类型 PRIMARY KEY,...);```在创建表的过程中,可以通过在列的定义后添加PRIMARY KEY关键字来指定该列作为主键。

如果一个表中存在多个列,也可以将多个列组合成一个主键。

2. 修改已存在的表添加主键:```ALTER TABLE 表名ADD PRIMARY KEY (列名);```使用ALTER TABLE语句可以向已存在的表中添加主键。

在列名后添加PRIMARY KEY关键字即可。

主键的使用需要注意以下几点:1. 主键列的值不能为空:为了保证唯一性约束,主键列的值不能为空。

可以通过在列的定义时添加NOT NULL关键字来确保该列不为空。

2. 主键的选择:主键应该是一个稳定且唯一的值。

一般情况下,可以选择自增长的整数作为主键,也可以选择字符串类型的列,只要保证该列的值在整个表中唯一。

3. 主键的更新:一旦表中的数据被创建,主键的值就不能被更新。

如果需要更改主键的值,只能通过删除原记录,然后插入新记录的方式来实现。

三、外键的概念与作用外键(Foreign Key)是用于建立表与表之间联系的一列或一组列。

MySQL的主键与外键使用技巧

MySQL的主键与外键使用技巧MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种Web应用程序中。

在数据库设计和优化中,主键和外键是两个重要的概念。

主键是用来唯一标识表中的每一行数据的字段,而外键则用于建立表与表之间的关联关系。

本文将探讨MySQL中主键和外键的使用技巧,以帮助读者更好地理解和应用它们。

1. 主键的定义和作用主键是表中的一列,用于唯一标识表中的每一行数据。

它的值不能重复且不能为空。

主键有助于提高数据的检索效率,因为数据库可以通过主键来快速定位和访问指定的数据行。

在MySQL中,可以使用关键字PRIMARY KEY来定义主键。

一般来说,主键最好是一个自增的整数类型,如INT或BIGINT。

这是因为自增主键的值是按照一定的规律自动生成的,不容易与其他数据行发生冲突。

2. 主键的选择和设计在选择主键时,应该考虑以下几个方面:a) 唯一性:主键的值在整个表中是唯一的,能够明确地标识一条数据行。

b) 稳定性:主键的值是不变的,不会受到业务逻辑变动或数据更新的影响。

c) 简洁性:主键的类型和长度应尽量简洁,这有助于提高数据库的性能和节省存储空间。

在设计主键时,还可以考虑以下几种方式:a) 单一字段主键:选择表中的某个字段作为主键,如用户表中的用户ID字段。

这种方式简单直观,但在一些特殊情况下可能不适用,比如需要联合多个字段来唯一标识一条数据行。

b) 自增主键:使用一个自增的整数类型字段作为主键,如订单表中的订单ID字段。

这种方式方便快捷,且可以很好地支持数据的插入和检索。

c) UUID主键:使用一个全局唯一标识符(UUID)作为主键,如图书表中的图书ID字段。

UUID是一个128位的数字,具有极低的重复概率,适用于分布式系统和高并发场景。

3. 外键的定义和作用外键是用于建立表与表之间关联关系的字段。

它可以将一个表中的数据行与另一个表中的数据行进行关联。

外键有助于确保数据的完整性和一致性,因为数据库可以通过外键来检查和约束数据的插入和更新操作。

修改主键和外键

修改主键和外键SQL中,一般要修改或者删除主键,只需要一个简单的命令即可:alter table 表名drop primary key.下面我举例说明先建一个表:table_projectCreate table table_project(‘id’ varchar(10),’name’ varchar(10),rmimary(‘name’))Engine=myisam default charest=gb2312;这时表已经建好,然后继续录入几个数据,等数据录入完成,此表格已经生成,如果这时你发现主键错了,想再改变主键就没那么简单了,因为你只是表格的结构错了,数据并没有错误,如果这时再删除表格重新建,无疑是在自寻苦恼。

这时,其他只要两个命令就能完成。

1.先删除主键Alter table table_project drop primary key2.增加主键Alter table table_project add primary key(id)这就是如何不改变表内数据,修改主键的方法!语法: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_ciNOT 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`自动键更新和删除:外键可以保证新插入的记录的完整性,但是,如果在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型,它们不能是临时表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档