解决错误"生成列的表达' registrationno'包含一个不允许的功能"

时间:2016-03-22 13:16:05

标签: mysql

有人可以告诉我在mysql中执行生成列的正确方法。 我应该以格式生成registration_no:

SVSRYYYYinvoice_no
yyyy-> year

我一直在使用MYSQL工作台创建我的数据库,但我收到此错误

ERROR 3102: Expression of generated column 'registrationno' contains a disallowed function.
SQL Statement:>CREATE TABLE `invoicegeneration`.`registration` (
`invoice_no` SMALLINT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
`amount` INT(11) NULL,
`name` VARCHAR(45) NOT NULL,
`invoice_date` DATETIME NULL,
`amt_in_words` VARCHAR(45) NULL,
`mop` VARCHAR(45) NULL,
`registrationcol` VARCHAR(45) NULL,
`dated` VARCHAR(45) NULL,
`drawn_on` VARCHAR(45) NULL,
`course` VARCHAR(45) NOT NULL,
`towards` VARCHAR(45) NULL,
`duration` VARCHAR(45) NULL,
`registrationno` VARCHAR(45) GENERATED ALWAYS AS
(CONCAT('SVSR',YEAR(CURDATE()),invoice_no)) STORED,
PRIMARY KEY (`invoice_no`),
UNIQUE INDEX `invoice_no_UNIQUE` (`invoice_no` ASC))

有人能告诉我创建生成列的正确方法

1 个答案:

答案 0 :(得分:1)

问题是您无法基于非确定性函数创建虚拟列,因为这会在复制期间导致问题。 See the “Limitations section in this blog post for more details

您已经拥有"scripts": { "start": "watchify src/main.jsx -v -t [ babelify --presets [ react ] ] -o public/js/main.js" } 列,因此更好的解决方案是使用以下内容替换registrationno的列定义:

invoice_date

作为进一步优化,您可以将invoice_date的年份存储为独立列。这将允许您在其上放置索引,然后按年度进行分析,或者如果数据变大,则按年划分表。