精华内容
下载资源
问答
  • MySQL外键和参照完整性实现步骤?摘要:以下的文章主要讲述的是MySQL外键和参照完整性,以及实现MySQL外键的实际操作步骤的介绍,希望会给你带来一些帮助在此方面。?标签:MySQL外键我们大家都知道MySQL参照完整性...

    MySQL外键和参照完整性的实现步骤

    ?摘要:以下的文章主要讲述的是MySQL外键和参照完整性,以及实现MySQL外键的实际操作步骤的介绍,希望会给你带来一些帮助在此方面。

    ?标签:MySQL外键

    我们大家都知道MySQL参照完整性一般是通过MySQL外键(foreign key)的具体使用而随之应用。总的来说,流行工具开源RDBMS MySQL(与PHP搭配之最佳组合)并不支持外键,原因是这种支持将会降低RDBMS的速度和性能。

    然而,由于很多用户对参照完整性的优点倍感兴趣,最近MySQL(和PHP搭配之最佳组合)的不同版本都通过新InnoDB列表引擎支持外键。由此,在数据库组成的列表中保持参照完整性将变得非常简单。

    为了建立两个MySQL(和PHP搭配之最佳组合)表之间的一个MySQL外键关系,必须满足以下三种情况:

    两个表必须是InnoDB表类型。

    使用在外键关系的域必须为索引型(Index)。

    使用在MySQL外键关系的域必须与数据类型相似。

    例子是理解以上要点的最好方法。如表A所示,建立两个表,其中一个列出动物种类及相应的代码(表名为:species),另一表列出动物园中的动物(表名为:zoo)。现在,我们想通过species关联这两个表,所以我们只需要接受和保存zoo表中包含species表中的合法动物的入口到数据库中。

    表A

    MySQL(和PHP搭配之最佳组合)> CREATE TABLE species (id TINYINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, Prima(最完善的虚拟主机管理系统)RY KEY(id)) ENGINE=INNODB;

    1.Query OK, 0 rows affected (0.11 sec)

    2.MySQL(和PHP搭配之最佳组

    合)> INSERT INTO species VALUES (1, 'orangutan'), (2, 'elephant'), (3,

    'hippopotamus'), (4, 'yak');

    3.Query OK, 4 rows affected (0.06 sec)

    4.Records: 4 Duplicates: 0 Warnings: 0

    MySQL(和PHP搭配之最佳组合)> CREATE TABLE zoo (id INT(4) NOT NULL, name VARCHAR(50) NOT NULL, FK_species TINYINT(4) NOT NULL, INDEX (FK_species),

    展开全文
  • mysql参照完整性

    2021-01-13 05:39:22
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼MYSQL支持数据库的参照完整性约束吗?有四个表:表一的主键是的表二外键表二的主键是表三的外键表三的主键是表四的外键请问:如果:删除表一表2 3 4 会自动删除吗?-----...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    MYSQL支持数据库的参照完整性约束吗?

    有四个表:

    表一的主键是的表二外键

    表二的主键是表三的外键

    表三的主键是表四的外键

    请问:

    如果:删除表一

    表2 3 4 会自动删除吗?

    ---------------------------------------------------------------

    从 3.23.43b 开始 InnoDB 支持外键约束特性。

    InnoDB 表类型第一次为 MySQL 提供了外键约束以保证你的数据完整性。

    InnoDB 中外键约束的定义语法如下所示:

    [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)

    REFERENCES table_name (index_col_name, ...)

    [ON DELETE {CASCADE ¦ SET NULL ¦ NO ACTION

    ¦ RESTRICT}]

    [ON UPDATE {CASCADE ¦ SET NULL ¦ NO ACTION

    ¦ RESTRICT}]

    从 3.23.50 开始,

    可能联合 ON DELETE CASCADE 或 ON DELETE SET NULL 子句与外键约束一同作用。

    相应的 ON UPDATE 选项将从 4.0.8 开始支持。

    如果 ON DELETE CASCADE 被指定,当主表中的记录行被删除时,

    InnoDB 将自动删除子表中被引用键值与主表中相对应的外键值相同的记录。

    如果 ON DELETE SET NULL 被指定,子表中的外键对应行将被设置为 NULL 值。

    示例:

    CREATE TABLE parent(id INT NOT NULL,

    PRIMARY KEY (id)) TYPE=INNODB;

    CREATE TABLE child(id INT, parent_id INT,

    INDEX par_ind (parent_id),

    FOREIGN KEY (parent_id) REFERENCES parent(id)

    ON DELETE CASCADE

    ) TYPE=INNODB;

    展开全文
  • 1.主表-----被参照的表 2.从表-----含有外键且参照别的表(子表、参照表) 3.外键: 步骤:

    1.主表-----被参照的表

    2.从表-----含有外键且参照别的表(子表、参照表)

    3.外键:

               步骤:1.先选中字段名,点击"外键"

                          2.命名:fk_从表_主表_主键_字段名(字段名只能是主表的主键或唯一约束)

                          3.选取"字段":只能勾选含有外键的字段名

                          4.被引用的表->勾选主表

                          5.被引用的字段->主表中的主键/唯一约束

                             主表中的主键->被参照列

                          6.删除更新时选择RESTRICT

     

    展开全文
  • MySQL数据完整性详细讲解及实现方式

    千次阅读 2021-01-20 21:49:28
    数据完整性是指数据的可靠性和准确性,数据完整性类型有四种:A、实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性)。B、域完整性:限制类型(数据类型),格式(通过检查...

    一、数据完整性简介

    1、数据完整性简介

    数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况。

    数据完整性是指数据的可靠性和准确性,数据完整性类型有四种:

    A、实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性)。

    B、域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则)。

    C、引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系。引用完整性确保键值在所有表中一致,不能引用不存在的值。如果一个键。

    D、定义完整性:用户自己定义的业务规则,比如使用触发器实现自定义业务规则。

    8fb36c2adc9979d19f51cb0860ef701e.png

    2、数据完整性实现方式

    6a36a77cffdedcbc0ffa98050f57afea.png

    MySQL不支持Check约束,虽然可以在列上添加check约束,但不起作用。

    二、实体完整性实现

    1、实体完整性的实现简介

    实体完整性的实现有两种方式:

    A、主键约束:一张表只能有一列设置主键,值必须唯一,不允许为空,innoDB存储引擎,主键就是索引。

    B、唯一值约束:一张表可以有多个列添加唯一值约束,一直允许一条记录为空值。

    实体完整性,由主键和唯一性约束来实现,确保表中记录有一列唯一标识。主键又分为Primary key和AUTO_INCREMENT PRIMARY KEY两种。

    2、主键

    MySQL的主键名总是PRIMARY,当创建主键约束时,如果表的存储引擎是innoDB,系统默认会在所在的列和列组合上建立对应的唯一索引,

    主键约束相当于唯一约束与非空约束的组合,主键约束列不允许重复,也不允许出现空值;多列组合的主键约束,列都不允许为空值,并且组合的值不允许重复。每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。

    A、创建表时指定主键

    创建表时指定主键的方式一:

    create table product

    (

    productID int PRIMARY KEY,

    pName VARCHAR(10),

    price DOUBLE

    )ENGINE=MyISAM default CHARSET=utf8;

    创建表时指定主键的方式二:

    create table product

    (

    productID int,

    pName VARCHAR(10),

    price DOUBLE, CONSTRAINT pk_s_productID PRIMARY KEY(productID)

    )ENGINE=MyISAM default CHARSET=utf8;

    在指定主键的表中插入记录时,不允许插入重复ID,如果不指定主键的值,默认为0。

    MylSAM类型的存储引擎不会在主键列上创建索引,表中记录的存储顺序与插入顺序相同。

    0bb9724c83e9481acbb29435cae3f851.png

    InnoDB存储引擎会自动在主键列上创建索引,插入的记录会根据主键的值的顺序排放。

    alter table product ENGINE=InnoDB;

    73b6131d95bd60688b0d12535a726aaf.png

    B、增加主键

    alter table TStudent add primary key(studentid);

    C、删除主键

    alter table TStudent drop primary key;

    3、自增主键

    AUTO_INCREMENT PRIMARY KEY

    如果不指定主键值,会自动在现有的主键值的最大值上自动增加1作为新记录的主键,主键值默认从1开始。可以在数据数据类型整数型的列上添加自增主键。

    c3cf212aa9642ac796c953e4281de394.png

    A、创建表时指定自增自增列

    create table product

    (

    productID int PRIMARY KEY AUTO_INCREMENT not NULL,

    pName VARCHAR(10),

    price DOUBLE

    )ENGINE=MyISAM default CHARSET=utf8;

    B、为现有的表指定自增列

    alter table TStudent modify column studentID int PRIMARY KEY AUTO_INCREMENT;

    C、删除表中自增列

    alter table TStudent modify column studentID int not NULL;

    删除自增列,仍然时主键,但是没有自增长功能

    4、复合主键

    使用表的两列或多列创建主键。

    A、创建表时指定复合主键

    create table student

    (

    studentID int, id INT,

    sname VARCHAR(10),

    score int,

    PRIMARY KEY(studentid,id)

    )ENGINE=MyISAM default CHARSET=utf8;

    B、给表增加复合主键

    alter table student add PRIMARY KEY(studentID,id);

    C、删除复合主键

    alter table student drop PRIMARY KEY;

    5、唯一约束

    UNIQUE KEY,唯一约束,指定某列和几列组合的数据不能重复。

    A、创建表时指定唯一性约束

    create table score

    (sname VARCHAR(10) UNIQUE,

    score int not NULL

    );

    B、给现有列增加唯一性约束

    alter table score add CONSTRAINT us_sname UNIQUE(sname);

    如果表中现有记录有重复值,不允许添加唯一性约束。可以通过聚合函数,查找有重复的记录,删除,再创建唯一性约束。

    C、创建复合唯一性索引

    create table student

    (

    studentID int, id INT,

    sname VARCHAR(10),

    score int, CONSTRAINT uc_id UNIQUE(studentID, id)

    )ENGINE=MyISAM default CHARSET=utf8;

    D、删除列的唯一性约束

    alter table score drop index uc_sname;

    三、域完整性

    1、默认值

    在表中插入一条新1的记录时,如果没有为该字段赋值,那么数据库系统会自动为该字段赋一条默认值。

    create table st

    (sid INT not null primary key auto_increment,

    sname varchar(10),

    subject varchar(20) default '软件工程',

    entertime TIMESTAMP default now()

    );

    给表中一列添加默认值约束:

    alert table st modify column subject VARCHAR(20) default '计算机科学与技术';

    删除表中一列的默认值约束:

    alert table st modify column subject VARCHAR(20) default NULL;

    2、创建非空约束

    非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

    Null类型特征:所有的类型的值都可以是null,包括int、float等数据类型 空字符串是不等于NULL,0也不等于NULL。

    A、创建表时给列指定非空约束

    create table score

    (sname VARCHAR(10) not NULL,

    score int not NULL

    );

    B、给指定列指定非空约束

    alert table score modify column score int not NULL;

    C、删除非空约束

    alter table score modify column score int;

    3、检查check

    check关键字,在插入新行或者更改已有行时才起作用,作用是阻止不满足条件的值进入该列,对null值无效,因为插入null就相当于没有插入。一个列可有多个check。

    age int check(age between 10 and 20);

    目前MySQL不支持check约束,微软MSSQL支持Check约束,但创建表时可以指定Check约束,但不起作用。

    四、参照完整性

    1、参照完整性简介

    MySQL参照完整性一般是通过MySQL外键(foreign key)实现的。

    外键(仅innoDB支持)所引用表的列必须是主键。

    外键声明包括三个部分:

    A、哪个列或列组合是外键

    B、指定外键参照的表和列

    C、参照动作[cascade(级联操作),restrict(拒绝操作),set null(设为空),no action,set default]。

    如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。

    引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。

    2、创建表时指定外键

    创建两张表,学生表student和成绩表score,成绩表的sid列的取值参照学生表(学生表student的sid列设置为主键,且表的存储引擎为innodb,成绩表score的存储引擎也必须设置为innodb)。

    create table student

    (sid int not null primary key,

    sname varchar(20)

    ) engine=innodb;create table score

    (sid int not null,

    mark INT,constraint score_fk FOREIGN KEY (sid)references student(sid) on delete cascade on update cascade) engine=innodb;

    在学生表插入一条记录

    insert into student values (1,'孙悟空')

    在成绩表插入一条记录,学号是1,成功。

    instert into score values (1,98)

    在成绩表插入一条记录,学号是2,失败。

    insert into score values (2,88)

    在学生表插入学号是2的一条记录

    insert into student values (2,'唐僧')

    再在成绩表插入一条学号是2的记录,成功,证明外键参照成功。

    insert into score values (2,88);

    3、删除参照约束

    alter table score drop foreign key score_fk;

    4、给现有表增加参照约束

    alter table score add constraint score_fk2 foreing key (sid) references student (sid);

    5、验证级联动作删除和更新

    在score表创建的参照完整性,删除动作和更新动作的参照动作选择了cascade(级联操作),当学生表的sid更新时,分数表score的相应的sid也会更新,当学生被删除,分数表对应的sid的记录也会自动删除。

    更新学生表学号是1的学生的学号为10

    update student set sid = 10 where sid = 1

    查看成绩表,可以看到以前学号是1的已经变成了10

    select * from score

    删除学生表学号是2的学生

    delete from student where sid = 2

    可以看到成绩表,该学生的成绩已经级联删除

    select * from score

    6、验证级联动作No Aaction

    级联动作设置为NO ACTION,如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作。

    Restrict动作同no action,都是立即检查外键约束。

    将参照动作设置为no action,如果成绩表score有该学生sid,将不能更改学生表student表的学生sid列,也不能删除该学生。除非你先删除该学生的成绩,再删除该学生。

    删除score表的外键约束

    alter table score drop foreign key score_fk;

    增加score表的sid列外键约束

    ALTER TABLE `score` ADD CONSTRAINT `score_fk` FOREIGN KEY (`sid`) REFERENCES `student` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION;

    更新学号是10的学生的学号,失败

    update student set sid = 11 where sid = 10

    删除学号是10的学生,失败

    delete from student where sid = 10

    需要先删除学生成绩表中的记录,再删除该学生。

    delete from student where sid=10delete from score where sid=10;

    7、验证级联动作Set NULL

    在父表上update/delete记录时,将子表上匹配记录的列设为null,要注意子表的外键不能为not null。

    删除成绩表的外键约束

    alter table score drop foreign key score_fk;

    增加成绩表的sid列外键约束,参照动作为set null

    alter table score add constraint score_fk foreign key (sid) references student (sid) on delete set null on update set null;

    修改成绩表的sid列默认值为NULL

    ALTER TABLE `score` MODIFY COLUMN `sid` INTEGER(11) DEFAULT NULL;insert into student values (1,'孙悟空')insert into student values (2,'猪八戒')insert into score values (1,98)insert into score values (2,88)

    删除学生表中学号1的学生

    delete from student where sid = 1

    查看成绩表,成绩表中的学号为1的列为NULL

    select * from score

    展开全文
  • 数据完整性分为实体完整性、域完整性、参照完整性。实体(行)完整性实体完整性中的实体指的是表中的行,因为一行记录对应一个实体。实体完整性规定表的一行在表中是唯一的实体,不能出现重复。实体完整性通过表的主键来...
  • 数据完整性分为实体完整性、域完整性、参照完整性。2.1实体(行)完整性(实体完整性中的实体指的是表中的行,因为一行记录对应一个实体)实体完整性规定表的一行在表中是唯一的实体,不能出现重复。实体完整性通过表的...
  • 进入 Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系。外键涉及到两个表,其中一个称之为父项表,另一个称之为子项表。 父项表 ( par欢迎进入...
  • 参照完整性约束

    千次阅读 2021-06-21 20:46:39
    参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。 参照完整性相关术语 从表:含有外键且参照其他表的表,如车辆表。从表亦称作“子表”或“参照表”。 主表:被...
  • 一、参照完整性参照完整性指的就是多表之间的设计,主要使用外键约束。多表设计: 一对多、多对多、一对一设计1.一对多关联主要语句:constraint cus_ord_fk foreign key (customer_id) REFERENCES customer(id)创建...
  • 数据完整性的分类在关系模型中,提供了实体完整性,参照完整性,用户定义完整性。二.实体完整性2.1什么是实体?实体是一个数据对象,指的是客观存在并可以相互区分的事物,比如学生,老师等。一个实体在数据库中对应...
  • mysql中的参照完整性

    2021-04-24 15:34:14
    并且建立参照完整性,本表中的sno对应成绩表中的sno,本表中的cno对应课程表中的cno。 接着我们用insert 语句来向学生表和课程表中分别插入两条记录。并查看插入后的结果 接着我们来看看参照完整性的实例。 当我们...
  • 福建电脑2011年第10期MySQL数据完整性的研究与实现钟志宏(黔南民族师范学院计算机系贵州都匀558000)【摘要】:数据库的数据完整性的目标是确保数据的一致性和相容性,完整性约束已经作为数据库模式的一个重要的部分...
  • mysql数据的完整性约束(完整)

    千次阅读 2020-12-21 23:14:16
    关系模型中的三类约束:一,实体完整性二,参照完整性三,用户定义完整性一旦定义了完整性约束,服务器会随时检测处于更新状态的数据库内容时候符合相关约束性,保证数据正常。一,实体完整性...
  • 数据的完整性是指数据的可靠性和准确性,数据完整性类型有四种:A、实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性)。B、域完整性:限制类型(数据类型),格式(通过...
  • MySQL 数据完整性

    2021-01-19 03:19:59
    参照完整性参照完整性保证外码的值要么是被参照关系中的主码值,要么取空值。用户自定义完整性可以按系统的需求设计各种自定义的完整性检查。一、实体完整性1、主键约束主键(promary key)用于唯一的标识表中的某一条...
  • 二、验证其参照完整性。这个时候,我们再对sc表添加student表里没有的sno,course表没有的cno,都不被允许。删除student表或course表中sc中出现过的sno(cno)的行和列时,也不被允许。 例,删除student表 三、...
  • MYSQL 表的完整性约束

    2021-01-28 07:00:22
    UNIQUE # 唯一约束,指定某列或者几列组合不能重复 PRIMARY KEY # 主键,指定该列的值可以唯一地标识该列记录 FOREIGN KEY # 外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性 NOT NULL not null # ...
  • (5.0分) 【单选题】下面选项中,用于表示固定长度字符串的数据类型是 (5.0分) 【单选题】在SQL语句中,为了实现检索去掉重复数据的功能,需在SELECT语句中使用关键字 (5.0分) 【单选题】下面关于“LIMIT 4”的描述正确...
  • Mysql(数据库完整性

    千次阅读 2021-01-19 08:37:16
    关系模型有三种完整性约束:实体完整性,参照完整性和用户定义的完整性。1、实体完整性实体完整性是指,如果一个表的属性被确定为主属性,那么这个属性就不能取空值。实体完整性用于区分不同的实体,如果取空值就...
  • 数据完整性是指数据的可靠性和准确性,数据完整性类型有四种:A、实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性)。B、域完整性:限制类型(数据类型),格式(通过检查...
  • 完整性约束的SQL定义

    2021-03-15 11:01:09
    SQL Server支持三种完整性约束:1、实体完整性2、参照完整性(或引用完整性)3、用户自定义完整性1、实体完整性和主码实体完整性是通过主码(PRIMARY KEY)的定义来实现的。一旦某个属性或属性组被定义为主码,该主码的...
  • 作物从营养生长转入生殖生长所表现出的特性包括感温、()和()。 避雷器关键点见证包括设备选材及装配。 METRO1000插板区左面是风扇,右边是()。 在人类社会的物质资料生产过程中起决定作用的环节是() 领导...
  • 数据库的完整性的全名,关系数据库的参照完整性(Referential Integrity),一般是用在表示多个表之间关系时用的,而且经常使用。数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。数据...
  • 【实验目的】1、掌握完整性的概念;2、熟悉SQL SERVER 的完整性技术。3、了解SQL SERVER 的违反完整性处理措施。【实验性质】综合性实验【实验导读】1、完整性概述数据库完整性指数据的(逻辑而非物理)正确性和相容性...
  •   本章主要介绍一下数据库完整性:实体,参照,用户自定义完整性   数据库的完整性是指数据的正确性和相容性。数据库的正确性是指数据是符合现实世界语义、反映当前实际情况的;数据的相容性是指数据库同一对象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,843
精华内容 27,937
关键字:

参照完整性的实现方法