• 完整性约束


    完整性约束

    概览

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

      约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种:

    # NOT NULL :非空约束,指定某列不能为空; 
    # UNIQUE : 唯一约束,指定某列或者几列组合不能重复
    # PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录
    # FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性
    
    设置严格模式:
        不支持对not null字段插入null值
        不支持对自增长字段插入”值
        不支持text字段有默认值
    
    直接在mysql中生效(重启失效):
    mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
    
    配置文件添加(永久失效):
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    

    约束某一个字段
    无符号的 int unsigned
    不能为空 not null
    默认值 default
    唯一约束 unique
    联合唯一 unique(字段1,字段2)
    自增 auto_increment
    只能对数字有效.自带非空约束
    至少是unique的约束之后才能使用auto_increment
    主键 primary key
    一张表只能有一个
    如果不指定主键,默认是第一个非空+唯一
    联合主键 primary key(字段1,字段2)
    外键 Foreign key
    Foreign key(自己的字段) references 外表(外表字段)
    外表字段必须至少是"唯一"的

    on update cascade #级联更新
    on delete cascade # 级联删除 尽量不用

    不能重复  unique   值不能重复,但是null可以写入多个
    create table t13(
      id1 int unique,
      id2 int
    )
    
    联合唯一 unique
    create table t14(
        id int,
        server_name char(12),
        ip char(15),
        port char(5),
        unique(ip,port)
    );
    
    非空 + 唯一约束
    第一个被定义为非空+唯一的那一列会成为这张表的primary key
    一张表只能定义一个主键
    create table t15(
        id int not null unique,
        username char(18) not null unique
    );
    create table t16(
        username char(18) not null unique,
        id int not null unique
    );
    create table t17(
        username char(18) not null unique,
        id int primary key
    );
    
    联合主键
    create table t18(
        id int,
        server_name char(12),
        ip char(15) default '',
        port char(5) default '',
        primary key(ip,port)
    );
    
    create table t19(
        id int primary key,
        server_name char(12),
        ip char(15) not null,
        port char(5) not null,
        unique(ip,port)
    );
    
    自增
    create table t20(
        id int primary key auto_increment,
        name char(12)
    );
    insert into t20(name) values('alex');
    
    外键
    班级表
    create table class(
        cid int primary key auto_increment,
        cname char(12) not null,
        startd date
    )# 学生表
    # create table stu(
    #     id int primary key auto_increment,
    #     name char(12) not null,
    #     gender enum('male','female') default 'male',
    #     class_id int,
    #     foreign key(class_id) references class(cid)
    # )
    
    
    create table stu2(
        id int primary key auto_increment,
        name char(12) not null,
        gender enum('male','female') default 'male',
        class_id int,
        foreign key(class_id) references class(cid) #设置外键 涉及class表的cid
        on update cascade  #级联更新
        on delete cascade  # 级联删除 尽量不用
    )
    

  • 相关阅读:
    javascript-类型、值和变量
    词法结构
    前端js保存页面为图片下载到本地
    js生成带log的二维码(qrcodejs)
    工具函数
    css 水平垂直居中
    vue中的keep-alive
    vuex 的使用
    Spring源码解析
    Spring源码解析
  • 原文地址:https://www.cnblogs.com/wyh0717/p/13390383.html
Copyright © 2020-2023  润新知