这就是我想要做的:
CREATE TABLE IF NOT EXISTS hashes (
id int NOT NULL AUTO_INCREMENT,
text varchar(50) NOT NULL,
hash varchar(64) NOT NULL AS (SHA2(CONCAT(text), 256) STORED,
PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;
然后我要运行这样的插入:
INSERT INTO `hashes` (`text`) VALUES ('testing');
根据我所做的研究,由于id
已启用,因此auto_increment
应该是自动生成的,因此我不需要在插入查询中对其进行定义。
根据我的CREATE TABLE
查询,应根据在hash
字段中输入的数据自动生成text
。但是,当我运行CREATE TABLE
命令时,出现以下错误:
hash varchar(64) NOT NULL AS (SHA2(CONCAT(text), 256) STORED
我只是希望自动生成hash
,类似于CURRENT_TIMESTAMP
默认情况下会自动生成当前时间。
我在做什么错了?
答案 0 :(得分:1)
似乎您有语法错误。您应该在NOT NULL
哈希函数之后编写SHA2
。请尝试:
CREATE TABLE IF NOT EXISTS hashes (
id int NOT NULL AUTO_INCREMENT,
text varchar(50) NOT NULL,
hash varchar(64) AS (SHA2(CONCAT(text), 256)) STORED NOT NULL ,
PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;
INSERT INTO `hashes` (`text`) VALUES ('testing');
答案 1 :(得分:0)
您无需将hash
列声明为NOT NULL。它基于另一个NOT NULL列text
,因此哈希自然也将是NOT NULL。
您还忘记了右括号。
hash varchar(64) AS (SHA2(CONCAT(text), 256) STORED,
1 2 3 3 2 ^
您需要在我指示^
的位置使用另一个结束括号。