zoukankan      html  css  js  c++  java
  • SQL数据完整性

    1.数据的完整性

    1. 什么是数据的完整性

    保证用户输入的数据保存到数据库中是正确的

    2.添加数据完整性

    在创建表的时候给表添加约束

    3.完整性分类

    实体完整性、域完整性、引用完整性


    2.完整性的分类

    1.实体完整性

    • 表中的一行(一条记录)代表一个实体 (entity)

    • 实体完整性的作用:标记每一行数据不重复。行级约束

    • 约束类型:

      • 主键约束(primary key):

        • 每个表中要有一个主键,数据唯一,且不能为null

        • 创建主键的方式:

          • create table pe(ID BIGINT PRIMARY key, name VARCHAR(50));
            
          • create table pe2(ID BIGINT, name VARCHAR(50), PRIMARY KEY(ID));
            
          • 联合主键:两个字段数据同时相同时,才违反联合主键约束。 create table stu2(ID BIGINT,snum BIGINT, name VARCHAR(50), PRIMARY KEY(ID, snum));

          • 更改表结构,设置主键:ALTER TABLE student ADD CONSTRAINT PRIMARY KEY(sid);

      • 唯一约束

        • 指定列的数据不能重复,可以为空值
        • CREATE TABLE table1(id int PRIMARY KEY, name VARCHAR(50) UNIQUE); name不能重复
      • 自动增长列

        • 指定列的数据自动增长,即使数据删除,依然继续增长

        • CREATE TABLE table1(
          	id int PRIMARY KEY auto_increment,
          	name varchar (20) UNIQUE
          );
          

    2.域完整性

    使用:限制此单元格的数据正确,不对照此列的其他单元格比较

    域,代表当前单元格

    域完整性约束:

    • 数据类型:数值、日期、字符串

    • 非空约束(not null) CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null);

    • -- 默认值约束 (default)
      CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null,sex char(1) default '男')
      -- 设置默认值为 男
      


    3. 参照完整性

    什么是参照完整性

    • 指表与表之间的一种对应关系
    • 通常情况下可以通过设置两张表之间的主键、外键关系,或者编写两表的触发器来实现。
    • 有对应参照完整性的两张表,在对他们进行数据插入、更新、删除的过程中,系统都会将被修改表格与另一张对应表格继续对照,从而阻止一些不正确的数据操作

    数据库的主键和外键类型要一致

    两个表必须是 InnoDB 类型

    设置参照完整性后,外键当中的内值,必须得是主键当中的内容

    -- 设置外键
    CREATE TABLE score(
    	sid int PRIMARY KEY score int,
    	CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id)
    );
    -- score 设置外键,score 里的sid 关联 stu 里的 id
    
    -- 设置外键
    alter table score add CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id);
    
    -- 多对多关系创建
    CREATE TABLE teach(tid int PRIMARY KEY, name VARCHAR(50));
    CREATE TABLE stu(sid int PRIMARY KEY, name VARCHAR(50));
    CREATE TABLE tea_stu_rel(tid int, sid int);
    
    ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(tid) REFERENCES teach(tid);
    ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(sid) REFERENCES stu(sid);
    

    为什么要将表拆分:避免冗余数据


  • 相关阅读:
    洛谷P1352没有上司的舞会+树形二维DP
    高精度模板(从洛谷题解中骗来的
    Codeforces#398 &767C. Garland 树形求子节点的和
    LuoGu-P1122 最大子树和+树形dp入门
    HDU-3549Flow Problem 最大流模板题
    Codeforces Round #486 (Div. 3)988E. Divisibility by 25技巧暴力||更暴力的分类
    Codeforces Round #486 (Div. 3)988D. Points and Powers of Two
    数据结构&字符串:01字典树
    数据结构:可持久化平衡树
    数据结构:并查集-拆点
  • 原文地址:https://www.cnblogs.com/friday69/p/9390961.html
Copyright © 2011-2022 走看看