欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL一次性創(chuàng)建表格存儲(chǔ)過(guò)程實(shí)戰(zhàn)

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

一、創(chuàng)建表格

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

需求描述:

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

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

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

-- 思路:循環(huán)構(gòu)建表名 user_2021_11_01 到 user_2020_11_30;并執(zhí)行create語(yǔ)句。
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(下一個(gè)月),next_month_day(天數(shù)),這里為什么要這樣去定義,特別是年,月,不應(yīng)該是提前知道的嗎?答案是有時(shí)候比如是12月呢,那么下一個(gè)月的年份就不一樣了,所以需要利用日期函數(shù)的一些運(yùn)算去解決這些問(wèn)題。

-- 獲取下個(gè)月的年份
set next_year = year(date_add(now(),INTERVAL 1 month));
-- 獲取下個(gè)月是幾月
set next_month = month(date_add(now(),INTERVAL 1 month));
-- 下個(gè)月最后一天是幾號(hào)
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;

上面都是對(duì)表的名字的一些字段和別名進(jìn)行獲取和拼接

set table_name_str = concat(next_year,'_',next_month_str,'_',next_month_day_str);
-- 拼接create sql語(yǔ)句
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();

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

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

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

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

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

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

參數(shù)說(shuō)明:

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

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

相關(guān)文章

  • JDBC數(shù)據(jù)庫(kù)的使用操作總結(jié)

    JDBC數(shù)據(jù)庫(kù)的使用操作總結(jié)

    本篇文章介紹了,JDBC數(shù)據(jù)庫(kù)的使用操作方法的一些總結(jié)。需要的朋友可以參考一下
    2013-05-05
  • MySQL中子查詢的具體實(shí)現(xiàn)

    MySQL中子查詢的具體實(shí)現(xiàn)

    MySQL 提供了子查詢這一強(qiáng)大工具,幫助我們實(shí)現(xiàn)嵌套查詢,本文主要介紹了MySQL中子查詢的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • MySQL索引事務(wù)詳細(xì)解析

    MySQL索引事務(wù)詳細(xì)解析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)索引事務(wù),索引是為了加速對(duì)表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲(chǔ)結(jié);事物是屬于計(jì)算機(jī)中一個(gè)很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進(jìn)入文章了解具體內(nèi)容吧
    2022-01-01
  • PHP訪問(wèn)MySQL查詢超時(shí)處理的方法

    PHP訪問(wèn)MySQL查詢超時(shí)處理的方法

    PHP連接MySQL主要是使用Mysql提供的 libmysqlclient 的客戶端庫(kù),同時(shí)也延伸出來(lái) mysql 和 mysqli 兩套PHP的擴(kuò)展,相對(duì)來(lái)說(shuō) mysqli 比 mysql 更好,更穩(wěn)定。
    2011-05-05
  • 一篇文章弄懂MySQL查詢語(yǔ)句的執(zhí)行過(guò)程

    一篇文章弄懂MySQL查詢語(yǔ)句的執(zhí)行過(guò)程

    這篇文章主要給大家介紹了如何通過(guò)一篇文章弄懂MySQL查詢語(yǔ)句的執(zhí)行過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • MySQL replace into 語(yǔ)句淺析(一)

    MySQL replace into 語(yǔ)句淺析(一)

    這篇文章主要介紹了MySQL replace into 語(yǔ)句淺析(一),本文講解了replace into的原理、使用方法及使用的場(chǎng)景和使用示例,需要的朋友可以參考下
    2015-05-05
  • java連接mysql底層封裝詳解

    java連接mysql底層封裝詳解

    這篇文章主要介紹了java連接mysql底層封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • MySQL 8.0 redo log的深入解析

    MySQL 8.0 redo log的深入解析

    這篇文章主要介紹了MySQL 8.0 redo log的深入解析,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-03-03
  • mysql數(shù)據(jù)庫(kù)中字段的注釋和類型長(zhǎng)度獲取方式

    mysql數(shù)據(jù)庫(kù)中字段的注釋和類型長(zhǎng)度獲取方式

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)中字段的注釋和類型長(zhǎng)度獲取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解mysql表數(shù)據(jù)壓縮

    詳解mysql表數(shù)據(jù)壓縮

    mysql進(jìn)行壓縮是借助于zlib庫(kù),采用L777壓縮算法,這種算法在減少數(shù)據(jù)大小、CPU利用方面是成熟的、健壯的、高效的,這篇文章主要介紹了mysql表數(shù)據(jù)壓縮,需要的朋友可以參考下
    2022-01-01

最新評(píng)論