• MySQL基础(6) | check约束


    MySQL基础(6) | check约束


    前言

    在一些情况下,我们需要字段在指定范围的输入,
    例如:性别只能输入 '男'或者'女',余额只能大于0等条件,
    我们除了在程序上控制以外,我们还能使用 CHECK 约束 来规范数据。

    》》》然而:
    mysql所有的存储引擎均不支持check约束,MySQL会对check子句进行分析,但是在插入数据时会忽略,因此check并不起作用,因此实现对数据约束有两种方法:
    1.在mysql种约束,如使用enum类型或者触发器等。
    2.在应用程序里面对数据进行检查再插入。

    方法一

    使用 ENUM 限制插入的值,但是这种方式只能用于离散型数据,对于范围数据则无能为力

    -- 创建一张测试表,规定sex字段只能是 ‘男’ 或者 ‘女’
    CREATE TABLE `user` (
      `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(18) COLLATE utf8_estonian_ci NOT NULL,
      `sex` ENUM('男','女') COLLATE utf8_estonian_ci DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci
    
    测试:
    INSERT INTO `user`(`name`,`sex`) VALUES('秀吉','秀吉');
    
    结果:
    错误代码: 1265
    Data truncated for column 'sex' at row 1
    

    方法二

    如果我们需要限制范围内数据,例如:余额只能大于100这样的条件,我们可以使用触发器来实现。

    DELIMITER $$
    CREATE
        TRIGGER `remaining_BeforeInsert` BEFORE INSERT ON `user`
        FOR EACH ROW BEGIN
        IF NEW.remaining > 100 THEN  
            SET NEW.remaining = 100;  
        END IF;  
        END$$
    DELIMITER ;
    

    参考:https://www.cnblogs.com/lixingwu/p/7280597.html

  • 相关阅读:
    PHP PSR 标准规范
    PHP线程安全与非线程安全的区别(NTS/TS)选择?
    goto 语法在 PHP 中的使用
    linux命令post请求发送json串
    接口日志表sql【我】
    sentinel最简单接入【我】
    Jps命令—使用详解
    MyBatis-Plus Wrapper条件构造器查询大全
    IDEA项目启动不起来也不打印日志【我】
    linux下查看nginx配置文件地址
  • 原文地址:https://www.cnblogs.com/iwsx/p/12348975.html
Copyright © 2020-2023  润新知