关于mysql存储过程创建动态表名及参数处理

2020-02-21  本文已影响0人  心淡然如水

        网上找了好多动态创建表名以及参数处理的博客,但是写的都差强人意!自己也是一个刚入门没几个月的小白,一直自己百度以后能有一个规范完整能执行下来学习的代码!今天我在这里按照一些自己的学习以及对别人的博客理解在这里写几个测试例子,仅供参考......

prepare

        前几天写项目的时候,有用到存储过程,需要在存储过程中创建一张临时表,然和在动态增减临时表的字段,所以就用到了mysql的prepare预编译语句。

基本语法:

PREPARE stmt from '你的sql语句';

EXECUTE stmt (如果sql有参数的话, USING xxx,xxx); // 这里USING的只能是会话变量

DEALLOCATE PREPARE stmt;

这三句话分别就是预定义好sql.

执行预定义的sql

释放掉数据库连接

Truncate

        删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少

具体使用

CREATE DEFINER=`root`@`%` PROCEDURE `create_date_table`()

BEGIN

set @sql_create_table = concat(

'CREATE TABLE IF NOT EXISTS operrecord_', date_format(curdate(),'%y%m%d'),

"(

`oper_id` int(10) NOT NULL AUTO_INCREMENT,

`oper_role` int(11) NOT NULL,

`oper_type` varchar(30) NOT NULL DEFAULT '',

`oper_content` varchar(1000) NOT NULL DEFAULT '',

`oper_cls` int(10) NOT NULL DEFAULT '0',

`oper_date` datetime NOT NULL,

`oper_serverid` int(11) NOT NULL DEFAULT '1',

PRIMARY KEY (`oper_id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");

PREPARE sql_create_table FROM @sql_create_table; 

EXECUTE sql_create_table;

set @sql_table = concat(

'SELECT * FROM operrecord_', date_format(curdate(),'%y%m%d'));

PREPARE sql_table FROM @sql_table; 

EXECUTE sql_table;

END

动态创建日历表用法

首先在数据库创建一个create_calendar日历表

CREATE DEFINER=`root`@`%` PROCEDURE `create_calendar`(s_date DATE, e_date DATE)

BEGIN

  -- 生成一个日历表

    SET @createSql = 'truncate  TABLE calendar_custom';

    prepare stmt from @createSql;

    execute stmt;

    WHILE s_date <= e_date DO

        INSERT IGNORE INTO calendar_custom VALUES (DATE(s_date)) ;

        SET s_date = s_date + INTERVAL 1 DAY ;

    END WHILE ;

END

上一篇 下一篇

猜你喜欢

热点阅读