BMW*_*BMW 25 mysql default default-value
如何将字段的默认值设置为Mysql中的其他列我已经使用虚拟字段完成了oracle但我不知道如何在Mysql中执行此操作这是我的表:
create table TSM_TRANSACTION_TBL
(
TRANS_ID INT primary key auto_increment,
LOCATION_ID INT,
TRANS_DATE DATE,
RESOURCE_ID INT,
TS_ID INT,
MAX_VALUE INT,
BOOKED_UNITS INT default 0,
REMAINING INT default MAX_VALUE - BOOKED_UNITS,
BOOKED INT not null,
USER_ID INT,
TRANS_TIME TIMESTAMP
)
Run Code Online (Sandbox Code Playgroud)
egg*_*yal 25
数据类型规范中的子句指示列的默认值.除了一个例外,默认值必须是常量; 它不能是一个功能或表达.这意味着,例如,您不能将日期列的默认值设置为函数的值,例如或.例外情况是您可以指定列的默认值.请参见第11.3.5节"自动初始化和更新".
DEFAULT valueNOW()CURRENT_DATECURRENT_TIMESTAMPTIMESTAMPTIMESTAMP
相反,您可以定义插入触发器:
CREATE TRIGGER foo BEFORE INSERT ON TSM_TRANSACTION_TBL FOR EACH ROW
IF NEW.REMAINING IS NULL THEN
SET NEW.REMAINING := NEW.MAX_VALUE - NEW.BOOKED_UNITS;
END IF;;
Run Code Online (Sandbox Code Playgroud)
小智 17
对于AFTER插入触发器,"新"是不可接受的.您应该通过BEFORE插入触发器执行"字段更新".所以,
CREATE TRIGGER foo BEFORE INSERT ON TSM_TRANSACTION_TBL FOR EACH ROW
IF NEW.REMAINING IS NULL THEN
SET NEW.REMAINING := NEW.MAX_VALUE - NEW.BOOKED_UNITS;
END IF;;
Run Code Online (Sandbox Code Playgroud)
从MySQL 8.0.13开始,您可以引用另一列作为列的默认值。
一列的表达式默认值可以引用其他表列,但对生成的列或具有表达式默认值的列的引用必须是表定义中较早出现的列。也就是说,表达式默认值不能包含对生成的列或具有表达式默认值的列的前向引用。
CREATE TABLE table1 (
id int NOT NULL AUTO_INCREMENT,
name varchar(250) NOT NULL,
name_url varchar(250) NOT NULL DEFAULT (`name`),
created datetime NOT NULL DEFAULT (UTC_TIMESTAMP()),
modified datetime NOT NULL DEFAULT (UTC_TIMESTAMP()),
PRIMARY KEY (id),
)
ENGINE = INNODB,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_0900_ai_ci;
Run Code Online (Sandbox Code Playgroud)