有人可以告诉我在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))
有人能告诉我创建生成列的正确方法
答案 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的年份存储为独立列。这将允许您在其上放置索引,然后按年度进行分析,或者如果数据变大,则按年划分表。