2013-11-26 13 views
2

限制的整數值,我要創建使用對MySQL的列

CREATE TABLE clients 
(
empno  INTEGER  NOT NULL DEFAULT 7654 
cname  VARCHAR(20) NOT NULL 
); 

現在,我想的EMPNO值是7000-8000之間的表。如果不是,它應該被拒絕。第一種方法是使用CHECK,當然MYSQL會忽略。其次是創建一個可接受的值的另一個表,並將其用作外部約束或類似的東西。用1000個值創建表格非常不方便。必須有一個更簡單的方法,但我不知道。

+1

您可以在插入之前檢查的價值,無論您使用的方法插入代碼 – Ibu

+0

在MySQL仍然不支持檢查約束,你將不得不寫一個觸發器,以確保。 –

回答

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 
+0

好的建議,我會嘗試,謝謝。 – Modaresi

+0

你究竟如何做插入觸發器?我這樣做,但它給語法錯誤。定界符$$ CREATE TRIGGER empno_limit 之前插入 ON客戶 對於每一行BEGIN 如果new.empno <7000 SET new.empno = NULL; if new.empno> 8000 SET new.empno = null; end if; 結束; – Modaresi