day05_MySQL学习笔记_02

Posted haha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day05_MySQL学习笔记_02相关的知识,希望对你有一定的参考价值。

五、数据的完整性

    作用:保证用户输入的数据保存到数据库中是正确的。
    确保数据的完整性 = 在创建表时给表中添加约束
    完整性的分类:
    > 实体完整性
    > 域完整性
    > 引用完整性

  1、实体完整性(行级约束)

    实体:即表中的一行(一条记录)代表一个实体(entity)。
    实体完整性的作用:标识每一行数据不重复。
    如何保证数据的完整性呢?答:创建表时给表添加约束
    约束类型: 
      主键约束(primary key)  
      唯一约束(unique)     
      自动增长列约束(auto_increment)

    1.1 主键约束(primary key)

    注:每个表中至少要有一个主键。 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 
    特点:主键的数据唯一,且不能为null。
 
  示例:
    CREATE DATABASE day05;
    USE day05;
 
    第一种添加方式:一个一个的添加
    CREATE TABLE student(
      id int primary key,
      name varchar(50)
    );
 
    第二种添加方式:此种方式优势在于,可以创建联合主键。
    CREATE TABLE student(
      id int,
      name varchar(50),
      primary key(id)
    );
    创建联合主键
    CREATE TABLE student(
      id int,
      name varchar(50),
      primary key(id,name)
    );
 
    第三种添加方式:
    CREATE TABLE student(
      id int,
      name varchar(50)
    );
    ALTER TABLE student ADD CONSTRAINT pk_id PRIMARY KEY(id); 或者   
    ALTER TABLE student ADD PRIMARY KEY(id);
    CONSTRAINT(constraint:约束)

    1.2 唯一约束(unique)

        特点:唯一的数据不能重复,但可以为null。
        但是理论上不能有多个null。因为多个null不也是数据相同了吗!
        注意:MySQL在唯一约束下可以允许有多个null值,Oracle、SQL Server 在唯一约束下不可以有多个null值。
      示例:
      CREATE TABLE student(
        id int primary key,
        name varchar(50) unique
      );

    1.3 自动增长列约束(auto_increment)

       给主键添加自动增长的数值,列只能是整数类型,但是如果删除数据之前增长的序号,后面再添加数据的时候序号不会重新开始,而是会接着被删除的那一列的序号开始。
      SQL Server数据库软件(identity:身份、特性)
      Oracle数据库软件(sequence:序列)
      mysql数据库软件(auto_increment:自动递增)
     示例:
    CREATE TABLE student(
      id int primary key auto_increment,
      name varchar(50)
    );
    INSERT INTO student(name) values(\'tom\'); -- 不用写id了,id会自增
    INSERT INTO student(name) values(\'bruce\'); -- 不用写id了,id会自增

  2、域完整性(列级约束)

    域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较。
    域代表当前单元格。
    域完整性约束:    
      数据类型约束       
      非空约束(not null)     
      默认值约束(default)
      check约束(MysSQL不支持check检查约束,例如:check(sex=\'男\' or sex=\'女\')Oracle中支持)

    2.1 数据类型约束(数值类型、日期类型、字符串类型)

    2.2 非空约束(not null)

    CREATE TABLE student(
      id int pirmary key,
      name varchar(50) not null,
      sex varchar(10)
    );
    INSERT INTO student values(1,\'null\',男);

    2.3 默认值约束(default)

    CREATE TABLE student(
      id int pirmary key,
      name varchar(50) not null,
      sex varchar(10) default \'男\'
    );
    -- 批量插入(MySQL中的方式,别的数据库软件不好使哦)
    INSERT INTO student1 values(1,\'jerry\',\'女\');
    INSERT INTO student1 values(2,\'tom\',default); -- sex插入的是默认值
    INSERT INTO student1 values(3,\'bruce\',null); -- sex插入的是null值

  3、引用完整性(参照完整性)

    要有外键必须先有主键,外键关联/引用/参照主键,主键和外键的数据类型必须一致。
    外键约束:foreign key
 
    例:
      -- 学生表(主表)
      CREATE TABLE student(
             stuid VARCHAR(10) primary key,
             stuname VARCHAR(50) not null
      );
 
      第一种添加外键约束的方式:在创建表格的时候同时添加外键约束。
      -- 分数表(次表/子表)
      CREATE TABLE score(
             stuid VARCHAR(10), --外键列的数据类型一定要与主键列的数据类型一致
             score INT,
             courseid INT,
             CONSTRAINT fk_stuid FOREIGN KEY(stuid) REFERENCES student(stuid)
      );
      CONSTRAINT(constraint:约束)     FOREIGN KEY(foreign key:外键)     REFERENCES(references:引用/参照/关联)
 
      第二种添加外键约束的方式:在表格创建时没有添加外键约束,之后通过修改表格添加外键约束。
      -- 分数表(次表/子表)
      CREATE TABLE score(
             stuid VARCHAR(10), -- 外键列的数据类型一定要与主键列的数据类型一致
             score INT,
             courseid INT,
      );
      ALTER TABLE score ADD CONSTRAINT fk_student_score_stuid FOREIGN KEY(stuid) REFERENCES stu(stuid);
 
      select * from student;
      insert into student values(\'1001\',\'张三丰\');
      insert into student values(\'1002\',\'张无忌\');
      insert into student values(\'1003\',\'王尼玛\');
      insert into student values(\'1004\',\'王老五\');
 
      select * from score;
      insert into score values(\'1001\',\'98\',1);
      insert into score values(\'1002\',\'95\',1);
      insert into score values(\'1002\',\'67\',2);
      insert into score values(\'1003\',\'83\',2);
      insert into score values(\'1003\',\'57\',3);
         
 
    SQL中 PK、UK、DF、CK、FK 的意思:
    --主键约束 PK

        在表外修改:alter table xxx add constraint PK_字段 primary key(字段);

        在表中修改:constraint PK_字段 primary key(字段),

        在表中修改:字段 字段类型 primary key,