主键、索引等的区别
MySQL中KEY、PRIMARYKEY、UNIQUEKEY、INDEX的区别

MySQL中KEY、PRIMARYKEY、UNIQUEKEY、INDEX的区别对于题⽬中提出的问题,可以拆分来⼀步步解决。
在 MySQL 中 KEY 和 INDEX 是同义。
那这个问题就可以简化为 PRIMARY KEY,UNIQUE KEY 和 INDEX 的区别。
⽽这三者也正好是索引的划分,主键索引,唯⼀索引和普通索引(INDEX)。
使⽤ INDEX 来加速从数据库中读取数据。
INDEX 通常加在那些 JOIN, WHERE,和 ORDER BY ⼦句的列上。
创建索引时,需要确保该索引是应⽤在 SQL 查询语句的条件(⼀般作为 WHERE ⼦句的条件)。
实际上,索引也是⼀张表,该表保存了主键与索引字段,并指向实体表的记录。
索引也有它的缺点:虽然索引提⾼了查询速度,却会降低更新表的速度,如对表进⾏INSERT、UPDATE和DELETE。
因为更新表时,MySQL不仅要保存数据,还要保存⼀下索引⽂件。
MySQL 中 KEY 与 INDEX 区别KEY 通常是 INDEX 同义词。
如果关键字属性 PRIMARY KEY 在列定义中已给定,则 PRIMARY KEY 也可以只指定为KEY。
这么做的⽬的是与其它数据库系统兼容。
PRIMARY KEY 是⼀个唯⼀ KEY,此时,所有的关键字列必须定义为NOT NULL。
如果这些列没有被明确地定义为NOT NULL,MySQL应隐含地定义这些列。
KEY 即键值,是关系模型理论中的⼀部份,⽐如有主键(PRIMARY KEY),外键(Foreign KEY)等,⽤于数据完整性检否与唯⼀性约束等。
⽽ INDEX 则处于实现层⾯,⽐如可以对表个的任意列建⽴索引,那么当建⽴索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定位,从⽽快速检索。
⾄于UNIQUE INDEX,则只是属于INDEX中的⼀种⽽已,建⽴了UNIQUE INDEX表⽰此列数据不可重复,猜想MySQL对UNIQUE INDEX类型的索引可以做进⼀步特殊优化吧。
数据库主从表、关系;主、外键关系和作用(转)

系数据库依赖于主键---它是数据库物理模式的基石。 主键在物理层面上只有两个用途 1.惟一地标识一行。 2.作为一个可以被外键有效引用的对象。
基于以上这两个用途 下面给出了我在设计物理层面的主键时所遵循的一 些原则 1.主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的 连接表中的数据 并抱怨它没有什么用处 那就证明它的主键设计地很好。 2.主键应该是单列的 以便提高连接和筛选操作的效率。 注 使用复合键的人通常有两个理由为自己开脱 而这两个理由都是错误 的。其一是主键应当具有实际意义 然而 让主键具有意义只不过是给人为地 破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表 中使用两个外部键来作为主键 我也反对这种做法 理由是 复合主键常常导 致不良的外键 即当连接表成为另一个从表的主表 而依据上面的第二种方法 成为这个表主键的一部分 然 这个表又有可能再成为其它从表的主表 其主 键又有可能成了其它从表主键的一部分 如此传递下去 越靠后的从表 其主 键将会包含越多的列了。 3.永远也不要更新主键。实际上 因为主键除了惟一地标识一行之外 再 没有其他的用途了 所以也就没有理由去对它更新。如果主键需要更新 则说 明主键应对用户无意义的原则被违反了。 注 这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整 理的数据并不适用。 4.主键不应包含动态变化的数据 如时间戳、创建时间列、修改时间列等。 5.主键应当有计算机自动生成。如果由人来对主键的创建进行干预 就会 使它带有除了惟一标识一行以外的意义。一旦越过这个界限 就可能产生认为 修改主键的动机 这样 这种系统用来链接记录行、管理记录行的关键手段就 会落入不了解数据库设计的人的手中。
例如: 学生表(学号,姓名,…………)主键:学号 课程表(课程号,课程名,…………)主键:课程号 一个学生能选多门课,一个课可以由多个学生选,即是多对多关系, 那么成绩表就是它们之间关系的体, 即引用成绩表(学号,课程号,成绩)。这里学号和课程号,分别是学生表和课程表中学号和课程号的外键 在我们现在这个阶段中,主要还是使用,主外键间的一对多的关系 主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一。 外键Foreign,是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!
数据库的几个概念:主键,外键,索引,唯一索引

数据库的几个概念:主键,外键,索引,唯一索引主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型;外键:定义数据表假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。
用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。
在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。
很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。
这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。
首先我们来创建 parts 表:CREATE TABLE parts (... 字段定义 ...,model VARCHAR(20) NOT NULL,... 字段定义 ...);接下来是Pc表:CREATE TABLE pc (... 字段定义 ...,cpumodel VARCHAR(20) NOT NULL,... 字段定义 ...};设置索引若要设置外键,在参照表(referencing table,即Pc表) 和被参照表(referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。
对Parts表:ALTER TABLE parts ADD INDEX idx_model (model);这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。
对Pc表也类似:ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);事实上这两个索引可以在创建表的时候就设置。
数据库中的主键与外键介绍

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
数据库主键和外键

数据库主键和外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别收藏主键、外键和索引的区别?聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
而主键和外键的结构是这个设计过程的症结所在。
一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:关系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途:1. 惟一地标识一行。
数据库中主键与索引的区别

数据库中主键与索引的区别
区别:
1:主键是为了标识数据库记录唯⼀性,不允许记录重复,且键值不能为空,主键也是⼀个特殊索引.
2:数据表中只允许有⼀个主键,但是可以有多个索引.
3.使⽤主键会数据库会⾃动创建主索引,也可以在⾮主键上创建索引,⽅便查询效率.
4:索引可以提⾼查询速度,它就相当于字典的⽬录,可以通过它很快查询到想要的结果,⽽不需要进⾏全表扫描. 5:主键索引外索引的值可以为空.
6:主键也可以由多个字段组成,组成复合主键,同时主键肯定也是唯⼀索引.
7:唯⼀索引则表⽰该索引值唯⼀,可以由⼀个或⼏个字段组成,⼀个表可以有多个唯⼀索引.。
mysql数据库外键、主键详解

mysql数据库外键、主键详解⼀、什么是主键、外键:关系型数据库中的⼀条记录中有若⼲个属性,若其中某⼀个属性组(注意是组)能唯⼀标识⼀条记录,该属性组就可以成为⼀个主键⽐如学⽣表(学号,姓名,性别,班级)其中每个学⽣的学号是唯⼀的,学号就是⼀个主键课程表(课程编号,课程名,学分)其中课程编号是唯⼀的,课程编号就是⼀个主键成绩表(学号,课程号,成绩)成绩表中单⼀⼀个属性⽆法唯⼀标识⼀条记录,学号和课程号的组合才可以唯⼀标识⼀条记录,所以学号和课程号的属性组是⼀个主键成绩表中的学号不是成绩表的主键,但它和学⽣表中的学号相对应,并且学⽣表中的学号是学⽣表的主键,则称成绩表中的学号是学⽣表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结⼀下:1.主键是能确定⼀条记录的唯⼀标识,⽐如,⼀条记录包括⾝份正号,姓名,年龄。
⾝份证号是唯⼀能确定你这个⼈的,其他都可能有重复,所以,⾝份证号是主键。
2.外键⽤于与另⼀张表的关联。
是能确定另⼀张表记录的字段,⽤于保持数据的⼀致性。
⽐如,A表中的⼀个字段,是B表的主键,那他就可以是A表的外键。
⼆、主键、外键和索引的区别sql语句会⾃动判定查询字段有⽆索引,继⽽使⽤索引去检索主键、外键和索引的区别?主键外键索引定义:唯⼀标识⼀条记录,不能有重复的,不允许为空表的外键是另⼀表的主键, 外键可以有重复的, 可以是空值该字段没有重复值,但可以有⼀个空值作⽤:⽤来保证数据完整性⽤来和其他表建⽴联系⽤的是提⾼查询排序的速度个数:主键只能有⼀个⼀个表可以有多个外键⼀个表可以有多个惟⼀索引聚集索引和⾮聚集索引的区别?聚集索引⼀定是唯⼀索引。
但唯⼀索引不⼀定是聚集索引。
聚集索引,在索引页⾥直接存放数据,⽽⾮聚集索引在索引页⾥存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为⼀个有效的关系数据库的粘合剂。
数据库键的概念

数据库键的概念数据库键是数据库中用于唯一标识和索引数据记录的一种机制。
它可以帮助数据库系统快速定位、访问和操作数据。
下面将对数据库键的概念进行详细解释。
1. 什么是数据库键数据库键是数据库表中用于唯一标识每条记录的一列或一组列。
它们具有唯一性,即每个键值都是唯一的,用于在数据库中区分不同的数据记录。
数据库系统使用键来进行数据的查找、排序和关联。
2. 主键(Primary Key)主键是数据库表中的一列或一组列,用于唯一标识每条记录。
主键的值不能重复,而且不能为空值。
主键可以由一列或多列组成,称为复合主键。
主键的作用是保证数据的完整性,防止重复和不一致的数据记录。
例如,一个用户表的主键可以是用户ID列。
3. 外键(Foreign Key)外键是数据库表中的一列,用于建立表与表之间的关联关系。
外键引用了另一个表的主键,将两个表联系在一起。
外键的作用是维护表与表之间的数据一致性,并实现数据的关联查询。
例如,一个订单表中的外键可以引用一个用户表中的主键,表示订单是由哪个用户所创建的。
4. 唯一键(Unique Key)唯一键是数据库表中的一列或一组列,用于确保每个键值都是唯一的,但允许空值。
与主键不同,唯一键允许有多个空值。
唯一键的作用是防止出现重复的数据记录。
例如,一个邮箱表中的唯一键可以是邮箱地址列,确保每个邮箱地址只能出现一次。
5. 索引(Index)索引是一种特殊的数据结构,用于提高数据库的查询效率。
它是基于数据库键创建的,可以加快数据的查找和排序。
索引通常包含键的值和指向数据记录的指针。
数据库系统使用索引来快速定位需要查询的数据记录,减少数据扫描的时间。
例如,一个电话号码列可以创建一个索引,加快根据电话号码查询用户信息的速度。
总结起来,数据库键是用于唯一标识和索引数据记录的一种机制。
主键用于唯一标识记录,外键用于建立表与表之间的关联关系,唯一键用于确保键值的唯一性,索引用于加快数据的查找和排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
键、索引、约束及其区别今天下午刚好没事,把一些基础性的概念理顺一下,存档,省的麻烦,嘿嘿一.索引1.什么是索引?索引是对数据库表中一列或多列的值进行排序的一种结构。
在关系型数据库中,索引是一种与表有关的数据库结构,是事实存在的。
它可以使对于表的select等等操作更加快速,相当于一本书的目录。
对于一张表,如果我们想要找到某一列符合特定值的记录,第一种方法是全表搜索,匹配,然后把所有符合的记录列出,但是这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
由此可知,索引是要消耗数据库空间的。
并非所有的数据库都以相同的方式使用索引。
作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。
索引占用磁盘空间,并且降低添加、删除和更新行的速度。
在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处。
但是,如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。
可以使用单列作为索引,也可以使用多列联合作为索引。
2.索引的优缺点优点:(1)大大加快数据的检索速度;(2)创建唯一性索引,保证数据库表中每一行数据的唯一性;(3)加速表和表之间的连接;(4)在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点:(1)索引需要占物理空间。
(2)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
建立索引时的注意事项:(1)考虑已在表上创建的索引数量。
最好避免在单个表上有很多索引(2)检查已在表上创建的索引的定义。
最好避免包含共享列的重叠索引(3)检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。
比如如果有1000w记录,某字段为性别,只有男,女。
也就是说一半的记录都是重复的,这样就要考虑是否还有必要建立索引了。
3.一些索引类别(1)普通索引也即不加任何限制的索引。
可通过以下语句理解。
create table zjj_temp_1 (id number(10),first_namechar(10),last_name char(10),age number(3),valnumber(10,2));insert into zjj_temp_1 values(1,'junjie','zhang',25,4000);select * from zjj_temp_1;此时一条记录已经插入进入了。
create index zjj_temp_index_1 on zjj_temp_1(first_name);--------建立索引insert into zjj_temp_1 values(1,'junjie','zhang',25,4000)--------再次插入一条一模一样的记录select * from zjj_temp_1;Ok!两条记录出现了,也即此索引的作用是让你再查找first_name为某一个特定值的记录时速度更快而已,仅此而已。
(2)唯一索引一种索引,不允许具有索引值相同的行,从而禁止重复的索引或键值。
系统在创建该索引时检查是否有重复的键值,并在每次使用INSERT 或UPDATE 语句添加数据时进行检查。
继续分析例子:drop index zjj_temp_index_1; ----删除上文创建的普通索引。
create unique index zjj_temp_1 on zjj_temp_1(id);----建立唯一索引数据库报错了?是的,说找到重复的关键字。
从上文我们可以看到,zjj_temp_1表中有两条记录,id都是1.这样是唯一索引是不允许的,所以自然就创建不起来了。
delete from zjj_temp_1 where rownum<2; --删除一行create unique index zjj_temp_1 on zjj_temp_1(id);----继续创建,发现这次成功了。
insert into zjj_temp_1 values(2,'junjie','zhang',25,4000);----成功insert into zjj_temp_1 values(1,'kesi','ma',25,4000);失败!!!耶!就是这样!(3)主键索引数据库表经常有一列或列组合,其值唯一标识表中的每一行。
该列称为表的主键。
它和唯一索引的共性在于都不允许有重复记录,区别在于,唯一索引是不限制null的,也就是说或可以有一条以上的null值插入,但是主键却限定不能为空。
继续执行语句:insert into zjj_temp_1 values(null,'kesi','ma',25,4000); ---成功select * from zjj_temp_1;这就表明唯一索引是允许有空值的。
Drop index zjj_temp_1; ---删除唯一索引alter table zjj_temp_1 add constraint zjsy_1 primary key(id);---建立主键我们可以发现id有一条记录为空,所以是无法建立主键的。
删除那条空记录就可以了。
(4)聚簇索引和非聚簇索引聚簇索引也叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。
由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。
每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页。
聚簇是根据码值找到数据的物理存储位置,从而达到快速检索数据的目的。
Oracle聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。
非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
由于聚簇索引要按照索引排序,所以一个表最多只能有一个聚簇索引,但可以使用多列。
ORACLE中的聚簇表是指两个表有一个字段完全相同,并且在业务中经常会按这个字段为目标连接这两个表,这时建立聚簇表,两个表公用一个字段,能减少占用空间,并能明显提高连接查询速度。
这两篇都有实际的例子,这里就不再深入讨论了。
建立聚簇索引的思想1、大多数表都应该有聚簇索引或使用分区来降低对表尾页的竞争,在一个高事务的环境中,对最后一页的封锁严重影响系统的吞吐量。
2、在聚簇索引下,数据在物理上按顺序排在数据页上,重复值也排在一起,因而在那些包含范围检查(between、<、<=、<>、>=)或使用group by或orderby的查询时,一旦找到具有范围中第一个键值的行,具有后续索引值的行保证物理上毗连在一起而不必进一步搜索,避免了大范围扫描,可以大大提高查询速度。
3、在一个频繁发生插入操作的表上建立聚簇索引时,不要建在具有单调上升值的列(如IDENTITY)上,否则会经常引起封锁冲突。
4、在聚簇索引中不要包含经常修改的列,因为码值修改后,数据行必须移动到新的位置。
5、选择聚簇索引应基于where子句和连接操作的类型。
具体的聚簇索引请参考以下文章:/s/blog_607b68cc0100f5jo.html/9778796/viewspace-660186二.键1.什么叫键数据库中的键(key)又称为关键字,是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分。
2.唯一键唯一键,即一个或者一组列,其中没有重复的记录。
可以唯一标示一条记录。
3.主键属于唯一键,是一个比较特殊的唯一键。
区别在于主键不可为空。
4.外键如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。
由此可见,外键表示了两个关系之间的联系。
以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
外键又称作外关键字。
换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。
外键在开发中基本使用不到,主要是数据库用来保证数据的完整性的举个简单的例子表A内有列C1表B内有列C2将C2的外键指向C1那么当你向表B插入数据时,C2的内容必须为C1中的一个还有几个约束需要你设置如删除或者修改表A中的字段时怎么处理表B中相关联的数据举例如下:create table z_laopo (id number(5) primary key,name char(20),age number(3),zhiye char(20)); ----创建老婆表create table z_nanren(id number(5) primary key,name char(20),age number(3),laopo_id number(5),foreign key(laopo_id) references z_laopo(id)); -----创建男人表,并限定laopo_id为老婆表的外键insert into z_laopo values (1,'fengjie',18,'accontant');insert into z_laopo values (2,'cangjingkong',25,'teacher');----向老婆表插入记录insert into z_nanren values (1,'nanren_1',24,1)insert into z_nanren values (2,'nanren_2',24,2)insert into z_nanren values (3,'nanren_3',24,3)----向男人表也插入3条记录前两条没问题,第三条报错:因为不存在id为3的老婆,也即laopo_id只能再1,2之间选择。
除非z_laopo表中有3这个id。
5.父键对于有外键关系的2张表,存在外键的表所参照的表叫主表,而存在外键的表叫从表,上例中z_nanren为从表,z_laopo为主表。
Lao_id为外键,z_laopo表的id为父键。
三.约束像主键、唯一等等其实都是一种约束。