我是php的新手,我希望将用户输入限制为某个值。例如,Type应该只是M或C而不是其他。因此,我使用以下代码在数据库hactl下创建一个table1。
/**********************************************************************/
/*Create database and table*/
CREATE DATABASE Hactl;
CREATE TABLE Hactl.table1(
Type VARCHAR(1) NOT NULL,
Region VARCHAR(50) NOT NULL,
Country VARCHAR(50) NOT NULL,
City VARCHAR(3) NOT NULL,
Imp DECIMAL(10,2) NOT NULL,
Exp DECIMAL(10,2) NOT NULL,
TS DECIMAL(10,2) NOT NULL,
Year INT(4) NOT NULL,
Month VARCHAR(3) NOT NULL,
CONSTRAINT chk_hactl CHECK(Type IN ('M','C') AND
Month IN ('Jan', 'Feb', 'Mar',
'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec')
)
);
当我插入一个Type = K的新行时,它仍然可以成功插入。
答案 0 :(得分:2)
要限制其他条目,您只需使用ENUM
CREATE TABLE Hactl.table1(
Type enum('M','C') NOT NULL,
Region VARCHAR(50) NOT NULL,
Country VARCHAR(50) NOT NULL,
City VARCHAR(3) NOT NULL,
Imp DECIMAL(10,2) NOT NULL,
Exp DECIMAL(10,2) NOT NULL,
TS DECIMAL(10,2) NOT NULL,
Year INT(4) NOT NULL,
Month enum('Jan', 'Feb', 'Mar',
'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec') NOT NULL,
);
答案 1 :(得分:1)
CONSTRAINT ... CHECK
在MySQL中不是有效的语法。请参阅此处的文档:http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
从语法上讲,您可以在CHECK
中使用CREATE TABLE
子句,但所有MySQL存储引擎都会将其忽略为不受支持。请在文档中的此页面注释此评论The CHECK clause is parsed but ignored by all storage engines.
:http://dev.mysql.com/doc/refman/5.6/en/create-table.html
通常,通过使用ENUM
字段类型来强制执行此类数据验证。请参阅此处的文档:http://dev.mysql.com/doc/refman/5.6/en/enum.html