Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以使MySQL表的两个属性始终具有相同的值吗?_Mysql_Attributes - Fatal编程技术网

我可以使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很多!