zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    bzoj 1017 魔兽地图DotR
    poj 1322 chocolate
    bzoj 1045 糖果传递
    poj 3067 japan
    timus 1109 Conference(二分图匹配)
    URAL 1205 By the Underground or by Foot?(SPFA)
    URAL 1242 Werewolf(DFS)
    timus 1033 Labyrinth(BFS)
    URAL 1208 Legendary Teams Contest(DFS)
    URAL 1930 Ivan's Car(BFS)
  • 原文地址:https://www.cnblogs.com/iwsx/p/12348975.html
Copyright © 2011-2022 走看看