触发器实现添加数据时根据id建表
时间: 2024-05-07 08:19:18 浏览: 96
在MySQL中,可以使用触发器实现添加数据时根据id建表。具体实现方法如下:
1. 创建一个存储过程,用于创建新表。
```
DELIMITER $$
CREATE PROCEDURE `create_table`(IN `new_id` INT)
BEGIN
SET @table_name = CONCAT('table_', new_id);
SET @sql = CONCAT('CREATE TABLE ', @table_name, ' (id INT PRIMARY KEY, name VARCHAR(50))');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
```
2. 创建一个触发器,用于在插入新数据时自动创建表。
```
CREATE TRIGGER `insert_trigger` BEFORE INSERT ON `main_table`
FOR EACH ROW
BEGIN
DECLARE `new_id` INT;
SET `new_id` = NEW.`id`;
IF NOT EXISTS (SELECT * FROM `information_schema`.`tables` WHERE `table_name` = CONCAT('table_', `new_id`)) THEN
CALL `create_table`(`new_id`);
END IF;
END;
```
3. 在插入数据时,自动触发触发器,根据id创建新表。
```
INSERT INTO `main_table` (`id`, `name`) VALUES (1, 'John');
```
以上就是使用触发器实现添加数据时根据id建表的方法。需要注意的是,每个新表的表名应该是动态生成的,所以需要使用 CONCAT 函数来动态生成表名。
阅读全文