MySQL表字段是否有可能具有如下默认值:
13-001
前2位是当前年份的最后2位数,例如2013 = 13
最后3位是最大行数+ 1,前2位数相同,并且为零 因此,当当前年份更改且最后一个值为13-461时,下一个值将为14-001。
tblPurchase 表有3个字段:
PRKey :自动递增INT
PRDate :Current_Timestamp
PRNo :VARCHAR(6)'这将包含13-999值
答案 0 :(得分:0)
没有。默认值必须是文字值,或者是一些特殊的内置函数之一(例如current_timestamp
列的timestamp
)。
答案 1 :(得分:0)
表结构与你的结构略有不同(我在发布你的结构之前开始写这个 - 我使用了datetime字段),但我认为你仍然应该知道它是如何工作的:
CREATE TABLE IF NOT EXISTS `TestTable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL,
`no` varchar(6) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这里是INSERT
触发器。
DELIMITER //
CREATE TRIGGER `Test` BEFORE INSERT ON `TestTable`
FOR EACH ROW BEGIN
DECLARE c INT;
SET c = (SELECT COUNT(*) + 1 FROM TestTable WHERE YEAR(date)=YEAR(NOW()));
SET NEW.date = NOW();
SET NEW.no = CONCAT( SUBSTR(YEAR(NOW()),-2) ,"-", LPAD(c,3,'0') );
END
//
DELIMITER ;
但您应该考虑其他结构并将PRNo
字段拆分为year
和number
字段,并仅使用计数部分创建自动增量年的
答案 2 :(得分:0)
根据@Barmar,将13-999设置为默认值是不可能的 @ t.niese提到的MySQL触发器有点棘手,但我到了那里。
我提出了一个解决方案,在INSERT期间包含13-999值:
INSERT INTO tblPurchase(PRNo, other_fields_here)
SELECT
CONCAT(
RIGHT(YEAR(CURDATE()),2),
'-',
LPAD(CAST(COUNT(PRKey) + 1 AS DECIMAL,3,'0')
),
other_fields_here
FROM
tblPurchase
WHERE
Year(PRDate)=YEAR(CURDATE())