Как убрать ЧЕК в MySQL? - PullRequest
1 голос
/ 10 июля 2020

Я хочу сбросить чек со своей таблицы. Когда я использую этот запрос в 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`)
)`

1 Ответ

1 голос
/ 11 июля 2020

В MySQL 8.0.16 я протестировал вашу таблицу:

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

Теперь мы видим имя ограничения CHECK, которое MySQL сгенерировало автоматически.

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

Если вы используете версию MySQL до 8.0.16, вам не нужно ничего делать из этого, потому что более ранние версии MySQL не поддерживают ограничения CHECK. Нечего отбрасывать, потому что это не сохраняет ограничение при создании таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...