<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      只為成功找方向,不為失敗找借口

      每天都不能停止前進的腳步
        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      Mysql獲取最大自增ID(auto_increment)的五種方式及其特點

      Posted on 2018-10-09 10:50  冰碟  閱讀(5262)  評論(0)    收藏  舉報

      在關系型數據庫的表結構中,一般情況下,都會定義一個具有‘AUTO_INCREMENT’擴展屬性的‘ID’字段,以確保數據表的每一條記錄都有一個唯一標識。

        而實際應用中,獲取到最近最大的ID值是必修課之一,針對于該問題,實踐整理如下:

         

      1、新建測試數據表get_max_id

       

       mysql>CREATETABLE `get_max_id` (
         `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '業務主鍵',
         `content` char(25) DEFAULT NULL COMMENT '業務內容',
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

       

      2、未初始化表獲取最大自增ID

        創建完數據表之后,我們知道,表中的內容暫時為空,此時,查詢max(id)獲取到的內容將是NULL;

        方式1 - max(id):

          該方式的優點是簡單粗暴,直奔菊花,啊不是( ̄m ̄),直奔主題;

          同時,它無視其它客戶端連接(db_connection)的影響,可以直奔第3點位置;

      復制代碼
      mysql>select max(id) from get_max_id;
       +---------+
       | max(id) |
       +---------+
       |    NULL |
       +---------+
       1 row in set (0.00 sec)
      復制代碼

        

        方式2 - LAST_INSERT_ID()函數:

          LAST_INERT_ID(),返回最后一個INSERT或 UPDATE 查詢中, AUTO_INCREMENT列設置的第一個表的值。

          這玩意兒的使用還是有些限制的:

           1、同一個Connection連接對象(同一客戶端)中,SELECT的結果為最后一次INSERT的AUTO_INCREMENT屬性列的ID。這句話的重點在于“同一個”,即其他連接的客戶端不對其查詢的結果造成影響。假設客戶端A和B,表ta原自增ID為3,在A中插入記錄后產生自增ID為4,在客戶端A中通過該函數查詢的結果為4,但在客戶端B中查詢的結果值仍為3;(已驗證)

           2、與表無關,即假設ta表和tb表,向ta插入記錄后,再向tb插入記錄,結果值為tb的max(id)值;(已驗證)

           3、使用非魔術方法('magic')來INSERT或UPDATE一條記錄時,即使用非0/非NULL值作為插入的字段,則LAST_INSERT_ID()返回值不會發生變化;(已驗證)

           4、同一條INSERT語句中,傳入多個VALUES值,則LAST_INSERT_ID()返回值為該查詢第一條記錄的ID;(已驗證)

              5、在進階方面,可運用作分表ID的唯一性。

          初始化查詢的結果,得到的是0,這點和max(id)還是有區別的;

      復制代碼
      mysql>select LAST_INSERT_ID();
       +------------------+
       | LAST_INSERT_ID() |
       +------------------+
       |                0 |
       +------------------+
       1 row in set (0.00 sec)
      復制代碼

        

        方式3 - 查看表狀態show table status

          該方式提供了當前DB(use db_name;)下每個表的基本信息;可以通過where條件獲取到Auto_increment屬性的值;

          下述提供的結果值,為下一個自增ID的數值。

      復制代碼
      mysql> show table status where Name='get_max_id';
      +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
      | Name       | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options| Comment |
      +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
      | get_max_id | InnoDB |      10 | Compact    |    0 |              0 |       16384 |               0 |            0 |  10485760 |              1 | 2015-04-20 11:49:07 | NULL        | NULL       | utf8_general_ci |     NULL |     |         |
      +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
      1 row in set (0.00 sec)
      復制代碼

        

        方式4 - information_schema.tables

          提供關于數據庫中的表(包括視圖)的信息。詳細描述了某個表屬于哪個schema,表類型,表引擎等等信息;

          下述提供的結果值,為下一個自增ID的數值。

      復制代碼
      mysql> select table_name, AUTO_INCREMENT from information_schema.tables where table_name="get_max_id";
      +------------+----------------+
      | table_name | AUTO_INCREMENT |
      +------------+----------------+
      | get_max_id |              1 |
      +------------+----------------+
      1 row in set (0.01 sec)
      復制代碼

        方式5 - @@IDENTITY全局變量

          基礎:以@@開頭的變量為全局變量,而以@開頭的變量為用戶自定義的變量。

          此處 @@IDENTITY表示最近一次向具有identity屬性(auto_increment)的表INSERT數據時對應的自增列的值。此處得到的值是0。

          1、類似于LAST_INSERT_ID()函數,該方式必須在同一個客戶端內進行的INSERT與SELECT,且不受其他客戶端影響;(已驗證)

          2、與表無關;(已驗證)

          3、非魔術方法插入不影響結果值;(已驗證)

          4、同一INSERT插入多條記錄,取第一條記錄的ID值為結果;(已驗證)

      復制代碼
      mysql> select @@IDENTITY;
      +------------+
      | @@IDENTITY |
      +------------+
      |          0 |
      +------------+
      1 row in set (0.00 sec)
      復制代碼

       

      轉載來源: http://www.rzrgm.cn/w3chen/p/4441512.html  

      主站蜘蛛池模板: 久久综合激情网| 99精品国产一区二区三区| 国产精品二区中文字幕| 亚洲国产成人AⅤ片在线观看| 国产成人一区二区不卡| 国产午夜亚洲精品福利| 亚洲欧美自偷自拍视频图片| 久久一日本综合色鬼综合色| 国产亚洲欧美精品久久久| av中文字幕国产精品| 西西444www高清大胆| 日韩国产亚洲一区二区三区| 亚洲男人的天堂网站| 亚洲色欲在线播放一区| 国产福利永久在线视频无毒不卡| 日韩人妻无码一区二区三区综合部| 日韩精品一区二区av在线| 亚洲av日韩在线资源| 国产明星精品无码AV换脸| 熟女少妇精品一区二区| 免费看亚洲一区二区三区| 香蕉EEWW99国产精选免费| 亚洲高清国产拍精品熟女| 福利在线视频一区二区| 国产精品天干天干综合网| 高清无码爆乳潮喷在线观看| 国产精品成人无码久久久| 中文字幕丰满伦子无码ab| 亚洲精品日本久久久中文字幕| 国产360激情盗摄全集| 久久久亚洲欧洲日产国码农村| 亚洲av鲁丝一区二区三区黄| 国产女人在线视频| 亚洲国产成人无码av在线影院| 国产二区三区不卡免费| 一区二区在线观看 激情| 国产亚洲天堂另类综合| 国内自拍av在线免费| 粉嫩av一区二区三区蜜臀| 麻豆亚洲精品一区二区| 中文字幕人妻无码一夲道|