mysql 创建非空表_MySQL – 在多个列上创建非空的表

无论如何都要创建一个包含多个列的表,其中2个在同一记录中永远不应为null.

例如,我需要以某种方式使C和D,如果另一个在同一记录中不为null,则它们中的每一个都可以为null.

我有什么办法吗?

| A | B | C | D | E |

|---|---|---|---|---|

| | | | | |

| | | | | |

| | | | | |

他们永远不应该有共同的价值

解决方法:

MySQL不支持CHECK约束,如@ lad2025所述.正如@RaymondNijland评论的那样,您可以使用触发器执行此操作.

这是它的外观(在MySQL 5.6.37上测试):

mysql> DELIMITER ;;

mysql> CREATE TRIGGER not_both_null BEFORE INSERT ON a_table_with_multiple_columns

FOR EACH ROW BEGIN

IF (NEW.c IS NULL AND NEW.d IS NULL) THEN

SIGNAL SQLSTATE '45000'

SET MESSAGE_TEXT = 'One of C and D must be non-null';

END IF;

END ;;

mysql> DELIMITER ;

mysql> insert into a_table_with_multiple_columns set c=null, d=null;

ERROR 1644 (45000): One of C and D must be non-null

请记住在UPFATE之前创建一个类似的触发器以检查无效条件,否则在创建行之后,无效数据可以通过UPDATE潜入.

标签:check-constraints,sql,mysql,database

来源: https://codeday.me/bug/20190828/1747676.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值