我可以使MySQL表的两个属性始终具有相同的值吗?
这是我输入的命令:我可以使MySQL表的两个属性始终具有相同的值吗?,mysql,attributes,Mysql,Attributes,这是我输入的命令: create table inventory( idx int primary key, name varchar(20), location varchar(20), quantity int); 在这个表中,我希望属性name和location始终共享相同的值。我可以在表创建语句中执行此操作吗?或者我必须在创建后进行设置吗?您可以在create table语句中为这两个字段设置默认值 CREATE TABLE inventory (
create table inventory(
idx int primary key,
name varchar(20),
location varchar(20),
quantity int);
在这个表中,我希望属性
name
和location
始终共享相同的值。我可以在表创建语句中执行此操作吗?或者我必须在创建后进行设置吗?您可以在create table语句中为这两个字段设置默认值
CREATE TABLE inventory (
idx INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR (20) NOT NULL DEFAULT 'DEFAULT VALUE SET',
location VARCHAR (20) NOT NULL DEFAULT 'DEFAULT VALUE SET',
quantity INT
);
如果插入时没有为这两个字段提供任何值,则默认值将保持不变
编辑:
在触发器更新之前通过
可以完成此操作
DROP TRIGGER IF EXISTS `inventory_trigger`;
DELIMITER //
CREATE TRIGGER inventory_trigger BEFORE UPDATE ON inventory FOR EACH ROW
BEGIN
IF (NEW.name <> OLD.name ) THEN
SET NEW.location = NEW.name ;
END IF;
IF (NEW.location <> OLD.location ) THEN
SET NEW.name = NEW.location ;
END IF;
END//
DROP TRIGGER(如果存在)`inventory\u TRIGGER`;
分隔符//
在更新每行的库存之前创建触发器库存\u触发器
开始
如果(NEW.name OLD.name)那么
设置NEW.location=NEW.name;
如果结束;
如果(NEW.location.OLD.location),则
设置NEW.name=NEW.location;
如果结束;
结束//
如果位置
字段发生更改,则此更改也将反映在名称
列中,反之亦然。您可以对这两个字段使用默认值。您的意思是,在创建字段后不能更改它们?@不,当另一个字段发生更改时,我希望这两个字段中的一个也发生更改。I建议您只存储其中一个。你可以看看触发器,但我想不出其中的逻辑:-(嗯,好的,谢谢!事实上,下面使用NOTNULL~@#$的答案并不是我想要的。我认为我必须找到其他方法似乎仍然是一个愚蠢的想法,尽管这是我能想到的唯一解决方案,我可以在MySQL
end中单独完成。如果你愿意,你可以对答案做出贡献。@strawberry我建议不要“完成它”哈哈。这就是我所猜测的。顺便说一句,我同意你的看法。在采用触发器的同时还有其他方法(应用程序逻辑)存在某些问题。天哪,这是一个相当复杂的问题。thnx很多!