最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL一次性創(chuàng)建表格存儲過程實戰(zhàn)

 更新時間:2022年07月11日 15:20:15   作者:王小王_123  
這篇文章主要介紹了MySQL一次性創(chuàng)建表格存儲過程實戰(zhàn),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下

一、創(chuàng)建表格

創(chuàng)建下個月的每天對應(yīng)的表user_2022_01_01、...

需求描述:

我們需要用某個表記錄很多數(shù)據(jù),比如記錄某某用戶的搜索、購買行為(注意,此處是假設(shè)用數(shù)據(jù)庫保存),當每天記錄較多時,如果把所有數(shù)據(jù)都記錄到一張表中太龐大,需要分表,我們的要求是,每天一張表,存當天的統(tǒng)計數(shù)據(jù),就要求提前生產(chǎn)這些表——每月月底創(chuàng)建下一個月每天的表!

PREPARE stmt_name FROM preparable_stmt
EXECUTE stmt_name [USING @var_name [, @var_name] ...]
{DEALLOCATE | DROP} PREPARE stmt_name
-- 知識點 時間的處理
-- EXTRACT(unit FROM date)截取時間的指定位置值
-- DATE_ADD(date,INTERVAL expr unit) 日期運算
-- LAST_DAY(date) 獲取日期的最后一天
-- YEAR(date) 返回日期中的年
-- MONTH(date) 返回日期的月
-- DAYOFMONTH(date) 返回日

思路:構(gòu)建循環(huán)語句,創(chuàng)建單個表格比較的簡單,但是對于很多種表格,而且是下個月的表格,對于表命名有一定的要求,所以就需要用到我們之前的日期函數(shù),和字符串函數(shù)的一些知識。

-- 思路:循環(huán)構(gòu)建表名 user_2021_11_01 到 user_2020_11_30;并執(zhí)行create語句。
use mysql7_procedure;
drop procedure if exists proc22_demo;
delimiter $$
create procedure proc22_demo()
begin
declare next_year int;
declare next_month int;
declare next_month_day int;
declare next_month_str char(2);
declare next_month_day_str char(2);
-- 處理每天的表名
declare table_name_str char(10);
declare t_index int default 1;
-- declare create_table_sql varchar(200);

首先利用declare 定義需要的一些變量,next_year(下一年),next_month(下一個月),next_month_day(天數(shù)),這里為什么要這樣去定義,特別是年,月,不應(yīng)該是提前知道的嗎?答案是有時候比如是12月呢,那么下一個月的年份就不一樣了,所以需要利用日期函數(shù)的一些運算去解決這些問題。

-- 獲取下個月的年份
set next_year = year(date_add(now(),INTERVAL 1 month));
-- 獲取下個月是幾月
set next_month = month(date_add(now(),INTERVAL 1 month));
-- 下個月最后一天是幾號
set next_month_day = dayofmonth(LAST_DAY(date_add(now(),INTERVAL 1 month)));
if next_month < 10
then set next_month_str = concat('0',next_month);
else
set next_month_str = concat('',next_month);
end if;
while t_index <= next_month_day do
if (t_index < 10)
then set next_month_day_str = concat('0',t_index);
else
set next_month_day_str = concat('',t_index);
end if;

上面都是對表的名字的一些字段和別名進行獲取和拼接

set table_name_str = concat(next_year,'_',next_month_str,'_',next_month_day_str);
-- 拼接create sql語句
set @create_table_sql = concat(
'create table user_',
table_name_str,
'(`uid` INT ,`ename` varchar(50) ,`information` varchar(50)) COLLATE=\'utf8_general_ci\' ENGINE=InnoDB');
-- FROM后面不能使用局部變量!
prepare create_table_stmt FROM @create_table_sql;
execute create_table_stmt;
DEALLOCATE prepare create_table_stmt;
set t_index = t_index + 1;
end while;
end $$
delimiter ;
call proc22_demo();

這樣就實現(xiàn)了效果

二、補充:MySQL的存儲函數(shù)與存儲過程的區(qū)別

MySQL存儲函數(shù)(自定義函數(shù)),函數(shù)一般用于計算和返回一個值,可以將經(jīng)常需要使用的計算或功能寫成一個函數(shù)。

存儲函數(shù)和存儲過程一樣,都是在數(shù)據(jù)庫中定義一些 SQL 語句的集合。

存儲函數(shù)與存儲過程的區(qū)別;

  • 1.存儲函數(shù)有且只有一個返回值,而存儲過程可以有多個返回值,也可以沒有返回值。
  • 2.存儲函數(shù)只能有輸入?yún)?shù),而且不能帶in, 而存儲過程可以有多個in,out,inout參數(shù)。
  • 3.存儲過程中的語句功能更強大,存儲過程可以實現(xiàn)很復(fù)雜的業(yè)務(wù)邏輯,而函數(shù)有很多限制,如不能在函數(shù)中使用insert,update,delete,create等語句;
  • 4.存儲函數(shù)只完成查詢的工作,可接受輸入?yún)?shù)并返回一個結(jié)果,也就是函數(shù)實現(xiàn)的功能針對性比較強。
  • 5.存儲過程可以調(diào)用存儲函數(shù)、但函數(shù)不能調(diào)用存儲過程。
  • 6.存儲過程一般是作為一個獨立的部分來執(zhí)行(call調(diào)用)。而函數(shù)可以作為查詢語句的一個部分來調(diào)用.
create function func_name ([param_name type[,...]])
returns type
[characteristic ...]?
begin
? ? routine_body
end;

參數(shù)說明:

  • (1)func_name :存儲函數(shù)的名稱。
  • (2)param_name type:可選項,指定存儲函數(shù)的參數(shù)。type參數(shù)用于指定存儲函數(shù)的參數(shù)類型,該類型可以是MySQL數(shù)據(jù)庫中所有支持的類型。
  • (3)RETURNS type:指定返回值的類型。
  • (4)characteristic:可選項,指定存儲函數(shù)的特性。
  • (5)routine_body:SQL代碼內(nèi)容。
create database mydb9_function;
-- 導(dǎo)入測試數(shù)據(jù)
use mydb9_function;
set global log_bin_trust_function_creators=TRUE; -- 信任子程序的創(chuàng)建者
-- 創(chuàng)建存儲函數(shù)-沒有輸輸入?yún)?shù)
drop function if exists myfunc1_emp;

delimiter $$
create function myfunc1_emp() returns int
begin
? declare cnt int default 0;
? ? select count(*) into ?cnt from emp;
? return cnt;
end $$
delimiter ;
-- 調(diào)用存儲函數(shù)
select myfunc1_emp();
create database mydb9_function;
-- 導(dǎo)入測試數(shù)據(jù)
use mydb9_function;
set global log_bin_trust_function_creators=TRUE; -- 信任子程序的創(chuàng)建者
-- 創(chuàng)建存儲函數(shù)-沒有輸輸入?yún)?shù)
drop function if exists myfunc1_emp;

delimiter $$
create function myfunc1_emp() returns int
begin
? declare cnt int default 0;
? ? select count(*) into ?cnt from emp;
? return cnt;
end $$
delimiter ;
-- 調(diào)用存儲函數(shù)
select myfunc1_emp();

到此這篇關(guān)于MySQL一次性創(chuàng)建表格存儲過程實戰(zhàn)的文章就介紹到這了,更多相關(guān)MySQL創(chuàng)建表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何用SQL取出字段內(nèi)是json的數(shù)據(jù)

    詳解如何用SQL取出字段內(nèi)是json的數(shù)據(jù)

    數(shù)據(jù)庫中會遇到字段里面存的JSON結(jié)果的數(shù)據(jù),那么如果我們想直接取到JSON里的值該怎么辦呢?其實SQL自帶的函數(shù)就可解決本文就詳細的給大家介紹了如何用SQL取出字段內(nèi)是json的數(shù)據(jù),需要的朋友可以參考下
    2023-10-10
  • 安裝MySQL 5.7出現(xiàn)報錯:unknown variable ‘mysqlx_port=0.0‘的解決方法

    安裝MySQL 5.7出現(xiàn)報錯:unknown variable ‘mysqlx_port

    這篇文章主要介紹了安裝MySQL 5.7出現(xiàn)報錯:unknown variable ‘mysqlx_port=0.0‘的解決方法,文中通過圖文結(jié)合的方式介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • 帶你快速了解SQL窗口函數(shù)

    帶你快速了解SQL窗口函數(shù)

    窗口函數(shù),也叫OLAP函數(shù)(Online Anallytical Processing,聯(lián)機分析處理),可以對數(shù)據(jù)庫數(shù)據(jù)進行實時分析處理,下面這篇文章主要給大家介紹了關(guān)于SQL窗口函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • MySQL系列教程小白數(shù)據(jù)庫基礎(chǔ)

    MySQL系列教程小白數(shù)據(jù)庫基礎(chǔ)

    這篇文章主要為大家介紹了MySQL系列中的數(shù)據(jù)庫基礎(chǔ),非常適合數(shù)據(jù)庫小白的入門基礎(chǔ)篇,詳細的講解了數(shù)據(jù)庫的基本概念以及基礎(chǔ)命令及操作示例,有需要的朋友可以借鑒參考下
    2021-10-10
  • Windows Server2019安裝MySQL5.7.25的方法

    Windows Server2019安裝MySQL5.7.25的方法

    這篇文章主要介紹了Windows Server2019安裝MySQL5.7.25,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • SQL查詢執(zhí)行順序分析

    SQL查詢執(zhí)行順序分析

    這篇文章主要為大家介紹了SQL查詢執(zhí)行順序分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • mysql 數(shù)據(jù)同步 出現(xiàn)Slave_IO_Running:No問題的解決方法小結(jié)

    mysql 數(shù)據(jù)同步 出現(xiàn)Slave_IO_Running:No問題的解決方法小結(jié)

    mysql replication 中slave機器上有兩個關(guān)鍵的進程,死一個都不行,一個是slave_sql_running,一個是Slave_IO_Running,一個負責(zé)與主機的io通信,一個負責(zé)自己的slave mysql進程。
    2011-05-05
  • Mysql中count帶條件計數(shù)實例代碼

    Mysql中count帶條件計數(shù)實例代碼

    這篇文章主要給大家介紹了關(guān)于Mysql中count帶條件計數(shù)的相關(guān)資料,Mysql中count()函數(shù)的一般用法是統(tǒng)計字段非空的記錄數(shù),所以可以利用這個特點來進行條件統(tǒng)計,需要的朋友可以參考下
    2023-09-09
  • 淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))

    淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))

    下面小編就為大家?guī)硪黄獪\談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • mysql下普通用戶備份數(shù)據(jù)庫時無lock tables權(quán)限的解決方法

    mysql下普通用戶備份數(shù)據(jù)庫時無lock tables權(quán)限的解決方法

    mysql使用普通用戶備份出現(xiàn)無lock tables權(quán)限的解決方法,需要的朋友可以參考下。
    2011-10-10

最新評論

兴安县| 饶阳县| 邵东县| 繁峙县| 定襄县| 汽车| 威信县| 会泽县| 新泰市| 蓬莱市| 花莲市| 贺州市| 遂溪县| 安塞县| 古田县| 图片| 龙川县| 漳州市| 秀山| 鸡东县| 炎陵县| 英德市| 桓台县| 阿荣旗| 阳泉市| 巩留县| 酒泉市| 临夏县| 博白县| 东兰县| 鄱阳县| 南雄市| 建德市| 衡水市| 五寨县| 酒泉市| 西华县| 苏尼特右旗| 井研县| 确山县| 杨浦区|