zoukankan      html  css  js  c++  java
  • mysql约束

    1.主键约束

      一张表中只能有一个主键,主键数据不能重复,主键默认不可以为空。

    1.1 增加主键

    方案一:在创建表时:

      

    CREATE TABLE tb_user(
      id INT PRIMARY KEY AUTO_INCREMENT comment 'id',
      username VARCHAR(255) comment '用户名',
      age INT,
      PASSWORD VARCHAR(255),
      role_id INT,
      FOREIGN KEY(role_id) REFERENCES tb_role(id)
    )charset utf8;

    方案二:在创建表时,在所有字段后面,使用primary key(字段列表),如果有2个及以上各字段,则成为复合主键

    CREATE TABLE tb_grade(
        number CHAR(10) COMMENT '学号',
        course CHAR(10) COMMENT '课程代码',
        score TINYINT UNSIGNED DEFAULT 0 COMMENT '成绩',
        -- 学号和课程号 组合唯一
        PRIMARY KEY (number, course)
    )CHARSET utf8;

    方案三:当表已经创建了,可以修改字段属性,也可以额外追加主键

    -- 通过修改字段
    ALTER TABLE 表名 MODIFY number CHAR(10) PRIMARY KEY  COMMENT '';
    
    -- 追加主键
    ALTER TABLE 表名 ADD PRIMARY KEY(字段列表);
    -- 例如
    ALTER TABLE tb_grade ADD PRIMARY KEY(number, score);

    前提:表中的数据符合主键条件,否则无法追加主键。

    1.2 更新主键 & 删除主键

      必须先删除主键,然后才能更新主键。

    -- 删除主键, 因为一个表中只有一个主键,所以不需要指定主键名称
    ALTER TABLE tb_grade DROP PRIMARY KEY; 

    1.3 主键分类

      在开发中,很少使用业务数据作为主键。大部分使用逻辑性的字段(值和业务逻辑没有关系)作为主键,成为逻辑主键

      逻辑主键:int primary key

      业务主键:s_id char(10) primary key

    2 自增长属性 

    2.1 添加自增长

      当字段不给值,或者给默认值,或者为null时,会自动的被系统触发,系统会用最大值+1,得到一个新的值。

      自增长通常和主键搭配使用。primary key auto_increment

      

      自增长特定:auto_increment

    • 自增长的字段必须是一个索引。
    • 自增长字段必须是整型的数字。
    • 一张表最多有一个自增长字段

    2.2 使用自增长

    表:tb_student

    CREATE TABLE tb_student (
        sid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键自增长
        sname VARCHAR(20) COMMENT '学生姓名'
    )CHARSET utf8;

      插入数据:

    -- 触发自增长
    insert into tb_student(sname) values('张三');
    
    -- 使用默认值
    insert into tb_student values(null, '莉莉丝');
    insert into tb_student values(default, 'hh');
    -- 可以指定自增长字段,但是下次插入时,系统还是使用最大值+1
    INSERT INTO tb_student VALUES(10, 'admin');

      每次插入数据后,就会把下次的自增长字段值准备好。

    2.3 修改自增长  自增长是表选项

       一张表只能有一个自增长字段,因此,要修改自增长,必须先删除自增长,然后重新添加自增长字段。

      修改当前自增长的下一次准备值:只能改成更大的,如果修改成更小的,则不会生效

    -- 下一次的值
    alter table tb_student auto_increment = 20;

    -- 自增长变量,系统变量
    SHOW VARIABLES LIKE 'auto_increment%';

     2.4 删除自增长

      自增长是字段的属性:可以使用modify对字段进行重新定义。

    -- 删除自增长
    ALTER TABLE tb_student MODIFY sid INT PRIMARY KEY;  -- 错误:主键约束是独立的,不是字段的属性,不可以重复定义
    ALTER TABLE tb_student MODIFY sid INT;

    3 唯一性约束

      一张表中往往有很多字段具有唯一性,数据不能重复:unique

      unique允许字段为null,而且允许多个记录为null

    3.1 添加unique约束

    方案一:创建表时,字段后面加上 unique / unique key

    CREATE TABLE tb_student (
        sid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键自增长
        sname VARCHAR(20) UNIQUE COMMENT '学生姓名'
    )CHARSET utf8;

      注意:unique+非空 和主键的效果一样,但不是主键。

    方案二:创建表时,字段后面  unique(字段列表),复合唯一键。

    CREATE TABLE tb_user(
        id INT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(30),
        pwd VARCHAR(30),
        UNIQUE(username, pwd)
    )

      注意:主键约束、唯一约束不是字段的属性。

    方案三:创建表后,追加唯一键

    CREATE TABLE tb_student (
        sid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键自增长
        sname VARCHAR(20) COMMENT '学生姓名'
    )CHARSET utf8;
    
    -- 在创建表后,追加unique
    ALTER TABLE tb_student ADD UNIQUE(sname);

    3.2 删除唯一键

      唯一键可以有多个。唯一键本身是一个索引,每个索引都有一个唯一的名字,因此删除索引:alter table drop index xxx

      索引默认使用字段名称作为索引名。

    -- 删除索引(unique唯一索引)
    ALTER TABLE tb_student DROP INDEX sname;

    4.外键约束

      外键也是索引

    4.1 添加外键

    方法一:创建表时,

    CREATE TABLE tb_student (
        sid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键自增长
        sname VARCHAR(20) COMMENT '学生姓名',
        c_id INT,
        FOREIGN KEY(c_id) REFERENCES tb_clazz(id)
    )CHARSET utf8;

     结果:产生一个key,和一个外键约束   (外键要求字段本身必须是索引

      外键默认名称为:tb_student_ibfk_1   ->表名_ibfk_1

    方法二:创建表后

    ALTER TABLE tb_student ADD [CONSTRAINT 外键名字] FOREIGN KEY 外键字段 REFERENCES 父表(id)
    ALTER TABLE tb_student ADD [CONSTRAINT f_student_clazz_1] FOREIGN KEY c_id REFERENCES tb_clazz(id)

    4.2 修改&删除外键

      外键不可修改,只能先删除,在添加。一个表可以有多个外键

    -- 删除外键,外键名
    ALTER TABLE tb_student DROP FOREIGN KEY tb_student_ibfk_1;

      删掉外键约束后,字段的索引仍然存在。

    end

  • 相关阅读:
    JAVA进阶17
    JAVA进阶16
    Map in C++ Standard Template Library (STL)
    数据结构入门
    Day 17:Python 对象的相等性比较
    cmd of windows
    Nmap扫描工具
    Day16: python生产列表的使用方法
    Day 15:一些数据分析、机器学习和深度学习包和框架&&入门案例
    端口
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/9859014.html
Copyright © 2011-2022 走看看