gpt4 book ai didi

mysql - 检查 MySQL 数据库中许多表的唯一值

转载 作者:行者123 更新时间:2023-11-30 00:00:42 26 4
gpt4 key购买 nike

我正在寻找一种方法来轻松检查 MySQL 数据库的每个表并确保某个字段仅包含一个值。我有名为“作者”、“标题”、“地点”等的表。

每个表都包含一个名为xuser的字段,需要询问“xuser字段是否在所有表的所有记录中都包含值xy”。

如果可能的话,有人可以插入我如何使用 SQL 查询来做到这一点吗?

感谢您的阅读,问候

妮可

最佳答案

我创建了存储过程来检查所有表中提供的数据库:

DELIMITER $$

DROP PROCEDURE IF EXISTS `UTL_CHECK_BACKUP_FOR_USER` $$

CREATE PROCEDURE `UTL_CHECK_BACKUP_FOR_USER`(
IN i_database_name VARCHAR(255),
IN i_user_column_name VARCHAR(255),
IN i_user_column_value VARCHAR(255),
OUT o_result TINYINT(1)
)
BEGIN

DECLARE v_table_name VARCHAR(255);
DECLARE v_last_row_fetched TINYINT(3) DEFAULT 0;


DECLARE tables_cursor CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = i_database_name
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_last_row_fetched = 1;

SET v_last_row_fetched = 0;

OPEN tables_cursor;

SET @query =
CONCAT(
'SELECT SUM(IF(user_column=''',
i_user_column_value,
''', 1, -1)) = 1 INTO @o_result FROM ( SELECT ''test'' AS user_column FROM information_schema.tables WHERE 1<>1 '
)
;


table_loop: LOOP
FETCH tables_cursor INTO v_table_name;

IF (v_last_row_fetched = 1) THEN
LEAVE table_loop;
END IF;

SET @query =
CONCAT(
@query,
' UNION SELECT DISTINCT(',
i_user_column_name,
') AS user_column FROM ',
v_table_name
)
;


END LOOP table_loop;

CLOSE tables_cursor;

SET v_last_row_fetched=0;


SET @query =
CONCAT(
@query,
' ) all_xusers;'
)
;

PREPARE stmt FROM @query;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;

SET o_result = COALESCE(@o_result, 0);

END $$


DELIMITER ;

只需将此存储过程部署到数据库即可。然后可以通过以下方式执行:

-- db_name, user_column_name, user_column_value, result
call UTL_CHECK_BACKUP_FOR_USER('test', 'xuser', 'xxx', @result);
select @result;

关于mysql - 检查 MySQL 数据库中许多表的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25056025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com