如何删除 MySQL 中的 CHECK?

How to remove CHECK in MySQL?

我想从我的 table 中删除支票。当我在 MySQL 中使用这个查询时,我没有得到任何检查约束的名称。

SHOW CREATE TABLE test

CREATE TABLE `test (``ID` int(11) NOT NULL AUTO_INCREMENT,
 `price` int(11) DEFAULT NULL CHECK (`price` > 20),
PRIMARY KEY (`ID`)
)`

在MySQL8.0.16,我测试了你的table:

mysql> CREATE TABLE test (ID int(11) NOT NULL AUTO_INCREMENT,  price int(11) DEFAULT NULL CHECK (price > 20), PRIMARY KEY (ID) );

mysql> SHOW CREATE TABLE test\G
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `price` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`),
  CONSTRAINT `test_chk_1` CHECK ((`price` > 20))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

现在我们看到 MySQL 自动生成的 CHECK 约束的名称。

mysql> ALTER TABLE test DROP CHECK test_chk_1;

这记录在 https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

| DROP {CHECK | CONSTRAINT} symbol

一旦我删除 CHECK 约束,它就不再出现:

mysql> SHOW CREATE TABLE test\G
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `price` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

如果您使用 8.0.16 之前的 MySQL 版本,则不需要执行任何操作,因为 MySQL 的早期版本不支持 CHECK 约束。没有什么可删除的,因为它不会在您创建 table.

时保存约束