Одиночный запрос mysql: сделать значение NULL для таблиц и столбцов в базе данных - PullRequest
0 голосов
/ 15 мая 2019

Возможно ли это с помощью одного запроса, мы можем сделать все столбцы и строки NULL или Zero (0) в качестве значения?

Я пытался, но не смог сделать 2 3 таблицы в базе данных;сделать их пустыми.

Ответы [ 3 ]

1 голос
/ 15 мая 2019

Возможно, это то, что вы хотите или нет.Я не понимаю, почему вы хотите установить значения столбцов в существующих строках на все NULL или 0.Не лучше ли очистить таблицу, чтобы не было строк?Затем вы можете добавить новые строки, которые вы хотите.

Чтобы эффективно очистить таблицу, используйте truncate:

truncate table t;

Если вы хотите установить значение всех столбцов в таблице, простоиспользуйте update и перечислите все столбцы:

update t
    set col1 = null,
        col2 = null,
        . . .;

Однако я не понимаю, почему это было бы полезно.

0 голосов
/ 15 мая 2019
$sql="SELECT CONCAT('UPDATE ', TABLE_SCHEMA,'.', TABLE_NAME, ' SET ',COLUMN_NAME,' = 0;') AS MySQLCMD FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DATABASE_NAME' ";

$result=$conn->query($sql);
if($result->num_rows> 0){
while($row=$result->fetch_assoc()){
    $exe=$conn->query($row['MySQLCMD']);
}

}

Вот ответ на вопрос, что мне нужно.Большое спасибо за все ваши ценные предложения.И особая благодарность: angel.bonev

0 голосов
/ 15 мая 2019

Чтобы обновить несколько таблиц в MySQL, вы можете использовать это:

UPDATE table1 , table2 SET table1.column = 0 , table2.column =0

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

SELECT CONCAT("UPDATE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` SET `",COLUMN_NAME,"` = 0 ") AS MySQLCMD FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "you_db_name_here"

теперь у вас есть все запросы на 0 всех столбцов во всех таблицах в базе данных, так что теперь, что вы можете использовать PREPARE EXECUTE

SET @query :="";
SELECT @query := CONCAT("UPDATE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` SET `",COLUMN_NAME,"` = 0 ") AS MySQLCMD FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "you_db_name_here";
PREPARE stmt FROM @query;
EXECUTE stmt;

Это не будет работать, если у вас есть первичные ключи,нам нужно пропустить их, и конечный результат будет выглядеть следующим образом

SET @query :="";
SELECT @query := CONCAT("UPDATE `", C.TABLE_SCHEMA,"`.`", C.TABLE_NAME, "` SET `",C.COLUMN_NAME,"` = '' ") AS MySQLCMD from information_Schema.Columns C LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U ON C.COLUMN_NAME = U.COLUMN_NAME WHERE C.TABLE_SCHEMA = "you_db_name_here" AND U.CONSTRAINT_NAME is NULL;
PREPARE stmt FROM @query;
EXECUTE stmt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...