我即将使用
创建一个表CREATE TABLE clients
(
empno INTEGER NOT NULL DEFAULT 7654
cname VARCHAR(20) NOT NULL
);
现在,我希望empno值介于7000-8000之间。如果不是,它应该被拒绝。第一种方法是使用CHECK,当然MYSQL会忽略它。其次是创建一个具有可接受值的另一个表,并将其用作外部约束或类似的东西。创建具有1000个值的表非常不方便。必须有一个更简单的方法,但我不知道。
答案 0 :(得分:1)
向表中添加INSERT / UPDATE触发器并拒绝任何值不在定义范围内的INSERTS。
编辑以包含示例
/*
-- ================================================
-- Template generated from Template Explorer using:
-- Create Trigger (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- See additional Create Trigger templates for more
-- examples of different Trigger statements.
--
-- This block of comments will not be included in
-- the definition of the function.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
GO
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[utg_ClientsInsert]
ON [dbo].[Clients]
AFTER INSERT,UPDATE
AS
BEGIN
SET NO COUNT ON
IF(SELECT COUNT(*) FROM INSERTED) = 0
BEGIN
RETURN -- do not execute trigger if no rows
END
IF(SELECT COUNT(*) FROM INSERTED WHERE empno NOT BETWEEN 7000 AND 8000) > 0
BEGIN
-- don't allow the insert to happen
RAISERROR('Employee # must be between 7,000 and 8,000.', 18, 1)
END
END
GO