如何在MariaDB 10.1.37 / Ver 15.1中正确使用“ ON UPDATE CASCADE”?

时间:2019-02-02 01:13:06

标签: mysql mariadb

我在使用UPDATE CASCADE与CONSTRAINT一起工作时遇到了麻烦。如果我使用UPDATE更改 customer 表中 customerName 的值,它将不会更改 city < / strong>表。没有错误消息出现。

MariaDB的版本:

Ver 15.1 Distrib 10.1.37-MariaDB

使用 SHOW CREATE TABLE城市时的城市表:

city  | CREATE TABLE `city` (
  `cityId` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `city` varchar(50) DEFAULT NULL,
  `countryId` int(10) unsigned DEFAULT NULL,
  `customerName` varchar(50) DEFAULT NULL,
  `address` varchar(50) DEFAULT NULL,
  `postalCode` varchar(50) DEFAULT NULL,
  `phone` varchar(50) DEFAULT NULL,
  `createDate` varchar(50) DEFAULT NULL,
  `createdBy` varchar(50) DEFAULT NULL,
  `lastUpdateBy` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`cityId`),
  KEY `customerNameChange01` (`customerName`),
  CONSTRAINT `customerNameChange01` FOREIGN KEY (`customerName`) 
      REFERENCES `customer` (`customerName`)
      ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

我的客户 SHOW CREATE TABLE客户

customer | CREATE TABLE `customer` (
  `customerId` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `customerName` varchar(50) DEFAULT NULL,
  `addressId` int(10) unsigned DEFAULT NULL,
  `active` int(10) unsigned DEFAULT NULL,
  `address` varchar(50) DEFAULT NULL,
  `city` varchar(50) DEFAULT NULL,
  `postalCode` varchar(50) DEFAULT NULL,
  `phone` varchar(50) DEFAULT NULL,
  `createDate` varchar(50) DEFAULT NULL,
  `createdBy` varchar(50) DEFAULT NULL,
  `lastUpdateBy` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`customerId`),
  KEY `CustomerName` (`customerName`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

这些是我用来创建索引和CONSTRAINT的命令:

CREATE INDEX CustomerName ON customer (customerName);

ALTER TABLE city
  ADD CONSTRAINT customerNameChange01
  FOREIGN KEY (customerName)
  REFERENCES customer (customerName)
  ON UPDATE CASCADE
  ON DELETE SET NULL;

在客户表中, CustomerName 键引用索引。否则,我将无法在 city 表中输入CONSTRAINT。

更新:该代码在适用于MariaDB 10.2的DB Fiddle中运行良好,并且个人测试确认那里的示例代码也可以在我自己的数据库中运行。

感谢您的度过。

0 个答案:

没有答案