所以我知道我可以使用像PHP这样的其他语言来检查条件,然后只在条件匹配时插入,但是有没有办法在纯SQL中执行此操作?我想我可以创建一个具有这种条件的VIEW,但是假设我有效地拥有表Event(EventID,StartDate,EndDate),有没有办法让SQL只插入数据,如果EndDate>开始日期?如果没有,则返回错误。我猜逻辑会像下面那样,但显然它不会起作用......
INSERT INTO Event(EventID, StartDate, EndDate) VALUES(1, 01/01/2016, 02/02/2016) WHERE EndDate > StartDate
Soooooo ......使用纯粹的SQL是可能的吗?
答案 0 :(得分:0)
是的,这是可能的。您可以使用检查约束。有点像下面
Alter date _ column add constant const_name Check( value>Get date()).
或者,如果您无法更改架构,则可以使用sql存储过程来插入和检查此条件。 希望它有所帮助。
答案 1 :(得分:0)
如果您希望数据库保证数据正确,那么您需要check
约束:
alter table event
add constraint chk_startdate_enddate check (startdate < enddate);
并非所有数据库都支持检查约束(尽管它们是标准SQL),因此您可能需要使用触发器。
如果您只想在应用程序级别进行验证,请使用insert . . . select
。典型语法是:
INSERT INTO Event(EventID, StartDate, EndDate)
SELECT EventID, StartDate, EndDate
FROM (SELECT 1 as EventId, '2016-01-01' as StartDate, '2016-02-02' as EndDate
) x
WHERE EndDate > StartDate;
注意:某些数据库在子查询中需要FROM
子句,例如FROM dual
。