zoukankan      html  css  js  c++  java
  • MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束

    /* MySQL进阶13
    常见六大约束: 
        1.not null 非空
        2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10
        3.primary key : 主键,用于保证该字段的值具有唯一性,并且非空
        4.unique : 唯一约束,保证该字段的值可以为空,具有唯一性
        5.check : 检查约束[mysql不支持,不报错,没有实际效果]
        6.foreign key : 外键约束; 用于限制两个表的关系, 用于保证该字段的值必须来自于主表的关联列的值;
            在从表中添加外键约束,用于引用主表中的某列的值;
            比如: 学生表的专业编号,员工表的部门编号,员工表的工种编号;
    添加约束的时机:
        1.创建表时
        2.修改表时
        ----------
    约束的添加分类:
        列级约束  : 六大约束语法上都支持,但外键没有效果!! 
        表级约束  : 
        除了非空,默认, 其他的都支持!
        语法 : constraint 约束名 约束类型(字段名)
    主键和唯一:
        都可以组合!
        
    #二. 修改表的时候
        添加列级约束
        alter table 表名  modify column 字段名 字段类型 新类型;
        添加表级约束
        alter table 表名  add [constraint 约束名]  约束类型(字段名) [外键的引用];
        
        #********添加表名
        #    alter table 表名  add column 字段名 字段类型;
    */
    
    CREATE TABLE 表名(
        字段名 字段类型 列级约束,
        字段名 字段类型,
        表级约束
    );
    
    #一: 创建表时添加约束
    CREATE DATABASE students;    
        #1.添加列级约束
    USE students;
    CREATE TABLE stuinfo(
        id INT PRIMARY KEY,  #主键
        stuName VARCHAR(20) NOT NULL, #非空
        gender CHAR(1) CHECK(gender IN ('','')),   #检查约束
        seat INT UNIQUE, #唯一
        age INT DEFAULT 18  , #默认约束
        majorId INT  REFERENCES major(id) #设置为外键
    );
    DESC stuinfo;
    CREATE TABLE major(
        id INT PRIMARY KEY,
        majorName VARCHAR(20)
    );
        #2 添加表级约束
    DROP TABLE IF EXISTS stuinfo;
    CREATE TABLE stuinfo(
        id INT ,  #主键
        stuName VARCHAR(20), #非空
        gender CHAR(1),   #检查约束
        seat INT, #唯一
        age INT , #默认约束
        majorid INT,
        
        CONSTRAINT pk PRIMARY KEY(id), #设置主键
        CONSTRAINT uq    UNIQUE(seat), #唯一键
        CONSTRAINT ck CHECK(gender ='' OR gender =''), #检查
        CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键
    );
    SHOW INDEX FROM stuinfo;
        
        #组合写法,更常用! 主键和唯一:都可以组合!
    DROP TABLE IF EXISTS stuinfo;
    CREATE TABLE stuinfo(
        id INT ,  #主键
        stuName VARCHAR(20), #非空
        gender CHAR(1),   #检查约束
        seat INT, #唯一
        age INT , #默认约束
        majorid INT,
        
        PRIMARY KEY(id,stuName), #设置主键
        UNIQUE(seat), #唯一键
        CHECK(gender ='' OR gender =''), #检查
        CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键
    );
    
    #二. 修改表的时候添加约束
    DROP TABLE IF EXISTS stuinfo;
    CREATE TABLE stuinfo(
        id INT , 
        stuName VARCHAR(20),
        gender CHAR(1),  
        seat INT, 
        age INT , 
        majorid INT
        );
    DESC stuinfo;
        #1.添加非空约束
    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
        #2 添加默认约束
    ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
        #3添加主键: 1)列级约束
    ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
               #2) 表级约束
    ALTER TABLE stuinfo ADD PRIMARY KEY(id);
    
    #4.添加唯一
      #1.列级约束
    ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
      #2) 表级约束
    ALTER TABLE stuinfo ADD UNIQUE(id);
    
    #5.添加外键
    ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
    ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
    
    #三 .删除约束
    
    #1.删除非空约束
    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
    #2 删除默认约束
    ALTER TABLE stuinfo MODIFY COLUMN age INT;
    #3删除主键
    ALTER TABLE stuinfo DROP PRIMARY KEY;
    #4删除唯一
    ALTER TABLE stuinfo DROP INDEX seat;
    #5.删除外键
    ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
    
    DESC stuinfo;
  • 相关阅读:
    遗产
    (OK) C/S—心跳检测—heartbeat
    如何判断SOCKET已经断开
    accept() returns the same socket descriptor
    C/S—心跳检测—heartbeat
    Linux—Network—Socket—Programming—heartbeat—源代码
    CentOS 7
    yum—repo—yum源
    (OK) CentOS7—mp4—avi—视频播放—SMPlayer
    读史
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9872081.html
Copyright © 2011-2022 走看看