【问题标题】:Error on MySQl trigger and is there any way of better writing?MySQl 触发器出错,有没有更好的写作方法?
【发布时间】:2011-06-20 15:11:21
【问题描述】:

您好,当我使用下面的触发器时出现以下错误:

inser into shift
-> values<15,3, '08:00:00','14:00:00'>;

ERROR 1048 <23000>: Column 'CashierCode' can not be null

这是为什么呢?还有,下面有没有更好的写法?

DELIMITER @
create trigger shist_start
before insert on shift
for each row
begin
if(new.CashierCode not in(
select w.EmployeeCode from WorksOn as w
join shop as s on w.ShopCode = s.ShopCode
join CashMachine as c on s.ShopCode = c.ShopCode
where c.CashMachineID=new.CashMachineID ))
then set new.CashierCode = NULL;
end if;
end;

【问题讨论】:

  • 旁注:应该是new.CashierCode,而不是new, CashierCode。是不是印错了?
  • 谢谢,是的,我打错了

标签: mysql sql triggers


【解决方案1】:

似乎列'CashierCode'被定义为NOT NULL。您确定此列有一个非空值吗?

看起来您的触发器正在尝试向该列插入 NULL 值。更改表定义或在触发器中提供有效值。

【讨论】:

  • 是的,CashierCode 被定义为 NOT NULL。我该如何改变呢?
  • 您需要在系统中为“not”值制定一个约定,而不是 NULL。有些使用 -1 或 0...如果您从头开始设计此系统,您可以随时更改表定义以允许在“CashierCode”列中使用 NULL。
  • 是的,看来答案是“因为你告诉MySQL CashierCode 字段永远不能为NULL”
  • @doublen: 如果可以为空,使用ALTER TABLE : ALTER TABLE table_name CHANGE COLUMN CashierCode CashierCode [the same type as before] NULL ;
  • 你能告诉我不重视约定只是为了提高我的知识吗?
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
相关资源
最近更新 更多