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

sqlite3自動插入創(chuàng)建時間和更新時間的功能實現(xiàn)

 更新時間:2024年06月11日 09:01:31   作者:databook  
最近在記錄一些簡單的結(jié)構(gòu)化日志信息時,用到了sqlite3數(shù)據(jù)庫(保存的信息比較簡單,用Mysql,SQL Server,Postgres這些數(shù)據(jù)庫有點(diǎn)小題大做),這次使用,希望sqlite3也能提供幾個基本的功能,自動插入創(chuàng)建時間和更新時間,需要的朋友可以參考下

最近在記錄一些簡單的結(jié)構(gòu)化日志信息時,用到了sqlite3數(shù)據(jù)庫(保存的信息比較簡單,用Mysql,SQL Server,Postgres這些數(shù)據(jù)庫有點(diǎn)小題大做)。

以前開發(fā)系統(tǒng)時,用MysqlPostgres比較多,sqlite3接觸不多,這次使用,希望sqlite3也能提供幾個基本的功能,比如:

  • 主鍵ID自增
  • 插入數(shù)據(jù)時,自動更新創(chuàng)建時間created_at
  • 更新數(shù)據(jù)時,自動更新更新時間updated_at

調(diào)查這幾個功能的過程記錄如下。

1. 準(zhǔn)備

首先創(chuàng)建一個數(shù)據(jù)庫,sqlite3數(shù)據(jù)庫其實就是一個文件。

$  sqlite3.exe test.db
SQLite version 3.41.2 2023-03-22 11:56:21
Enter ".help" for usage hints.
sqlite>

這里不需要管 test.db 文件存不存在,如果不存在,會自動創(chuàng)建的。

創(chuàng)建一張表 position_info,這是我用來記錄賬戶凈值和利潤的表,其中字段的作用不用管,只需要關(guān)注 id,created_atupdated_at三個字段即可。

sqlite> CREATE TABLE IF NOT EXISTS position_info (
(x1...>     id INTEGER NOT NULL PRIMARY KEY,
(x1...>     equity REAL NOT NULL,
(x1...>     profit_loss REAL NOT NULL,
(x1...>     created_at TEXT NOT NULL,
(x1...>     updated_at TEXT NOT NULL
(x1...> );

創(chuàng)建之后,通過sqlite3的命令查看position_info表是否創(chuàng)建。

sqlite> .tables
position_info

sqlite3的自帶命令都是以點(diǎn)號.)開頭的。

表按照默認(rèn)的方式創(chuàng)建之后, 發(fā)現(xiàn)插入一條數(shù)據(jù)很麻煩,需要指定position_info表中所有5個字段才能插入成功。

sqlite> INSERT INTO position_info(id, equity,
(x1...>  profit_loss, created_at, updated_at)
   ...>  VALUES(1, 10, 2,
(x1...>   "2024-06-09 10:10:10", "2024-06-09 10:10:10");

sqlite> .headers on

sqlite> SELECT * FROM position_info;
id|equity|profit_loss|created_at|updated_at
1|10.0|2.0|2024-06-09 10:10:10|2024-06-09 10:10:10

其實,我希望實現(xiàn)的是插入和更新時,只關(guān)注equityprofit_loss兩個字段,其他3個字段由數(shù)據(jù)庫自動管理。

類似:INSERT INTO position_info(equity, profit_loss) VALUES(10, 2);

下面開始改造。

2. 主鍵ID自增

首先,讓主鍵ID能夠自動增長。

sqlite> drop table position_info;
sqlite> CREATE TABLE IF NOT EXISTS position_info (
(x1...>     id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
(x1...>         equity REAL NOT NULL,
(x1...>         profit_loss REAL NOT NULL,
(x1...>     created_at TEXT NOT NULL,
(x1...>     updated_at TEXT NOT NULL
(x1...> );
sqlite> select * from position_info;
sqlite>

先刪除創(chuàng)建的 position_info,然后重新創(chuàng)建position_info表,創(chuàng)建時指定id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT。

創(chuàng)建完成后,插入兩條數(shù)據(jù),插入時不指定ID字段,發(fā)現(xiàn)數(shù)據(jù)庫會幫我們自動插入ID。

sqlite> INSERT INTO position_info(equity,
(x1...>  profit_loss, created_at, updated_at)
   ...>  VALUES(10, 2,
(x1...>   "2024-06-09 10:10:10", "2024-06-09 10:10:10");

sqlite> INSERT INTO position_info(equity,
(x1...>  profit_loss, created_at, updated_at)
   ...>  VALUES(100, 20,
(x1...>   "2024-06-09 11:11:11", "2024-06-09 11:11:11");

sqlite> select * from position_info;
id|equity|profit_loss|created_at|updated_at
1|10.0|2.0|2024-06-09 10:10:10|2024-06-09 10:10:10
2|100.0|20.0|2024-06-09 11:11:11|2024-06-09 11:11:11

3. 創(chuàng)建時間(created_at)

接下來,設(shè)置創(chuàng)建時間created_at)和更新時間updated_at)自動插入:DEFAULT (DATETIME('now', 'localtime'))

sqlite> drop table position_info;
sqlite> CREATE TABLE IF NOT EXISTS position_info (
(x1...>     id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
(x1...>         equity REAL NOT NULL,
(x1...>         profit_loss REAL NOT NULL,
(x1...>     created_at TEXT NOT NULL DEFAULT (DATETIME('now', 'localtime')),
(x1...>     updated_at TEXT NOT NULL DEFAULT (DATETIME('now', 'localtime'))
(x1...> );

然后插入兩條測試數(shù)據(jù):

sqlite> INSERT INTO position_info(equity, profit_loss)
   ...>  VALUES(10, 2);
sqlite>
sqlite> INSERT INTO position_info(equity, profit_loss)
   ...>  VALUES(100, 20);

sqlite> select * from position_info;
id|equity|profit_loss|created_at|updated_at
1|10.0|2.0|2024-06-09 16:40:52|2024-06-09 16:40:52
2|100.0|20.0|2024-06-09 16:40:53|2024-06-09 16:40:53

現(xiàn)在,我們只要關(guān)注equityprofit_loss就可以了。

4. 更新時間(updated_at)

經(jīng)過上面的改造之后,插入數(shù)據(jù)沒有問題了,但是更新數(shù)據(jù)時還有一個瑕疵。
更新數(shù)據(jù)時,updated_at字段沒有變化,一直是插入數(shù)據(jù)時的那個時間。

更新前:

sqlite> select * from position_info;
id|equity|profit_loss|created_at|updated_at
1|10.0|2.0|2024-06-09 16:40:52|2024-06-09 16:40:52
2|100.0|20.0|2024-06-09 16:40:53|2024-06-09 16:40:53

更新第一條數(shù)據(jù):

sqlite> UPDATE position_info SET equity=500, profit_loss=100
   ...> WHERE id = 1;
sqlite> select * from position_info;
id|equity|profit_loss|created_at|updated_at
1|500.0|100.0|2024-06-09 16:40:52|2024-06-09 16:40:52
2|100.0|20.0|2024-06-09 16:40:53|2024-06-09 16:40:53

第一條數(shù)據(jù)的equityprofit_loss雖然更新成功了,但是它的updated_at沒有更新,還是插入時的2024-06-09 16:40:52。

為了讓updated_at也能自動更新,需要加一個監(jiān)聽器,當(dāng)數(shù)據(jù)有更新時,更新此數(shù)據(jù)的updated_at字段。

sqlite> CREATE TRIGGER IF NOT EXISTS trigger_position_info_updated_at AFTER UPDATE ON position_info
   ...> BEGIN
   ...>     UPDATE position_info SET updated_at = DATETIME('now', 'localtime') WHERE rowid == NEW.rowid;
   ...> END;

再更新一次數(shù)據(jù)看看:

sqlite> UPDATE position_info SET equity=1000, profit_loss=300
   ...> WHERE id = 1;
   
sqlite> select * from position_info;
id|equity|profit_loss|created_at|updated_at
1|1000.0|300.0|2024-06-09 16:40:52|2024-06-09 16:49:28
2|100.0|20.0|2024-06-09 16:40:53|2024-06-09 16:40:53

更新數(shù)據(jù)時,updated_at也更新了,變成2024-06-09 16:49:28,與created_at不再一樣。

5. 總結(jié)

最后,創(chuàng)建一個帶有自增ID,自動插入創(chuàng)建時間更新時間的完整SQL如下:

CREATE TABLE IF NOT EXISTS position_info (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    equity REAL NOT NULL,
    profit_loss REAL NOT NULL,
    created_at TEXT NOT NULL DEFAULT (DATETIME('now', 'localtime')),
    updated_at TEXT NOT NULL DEFAULT (DATETIME('now', 'localtime'))
);

CREATE TRIGGER IF NOT EXISTS trigger_position_info_updated_at AFTER UPDATE ON position_info
BEGIN
    UPDATE position_info SET updated_at = DATETIME('now', 'localtime') WHERE rowid == NEW.rowid;
END;

以上就是sqlite3自動插入創(chuàng)建時間和更新時間的功能實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于sqlite3自動創(chuàng)建和更新時間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SQLite學(xué)習(xí)手冊(SQLite在線備份)

    SQLite學(xué)習(xí)手冊(SQLite在線備份)

    在SQLite中提供了一組用于在線數(shù)據(jù)庫備份的APIs函數(shù)(C接口),可以很好的解決上述方法存在的不足。通過該組函數(shù),可以將源數(shù)據(jù)庫中的內(nèi)容拷貝到另一個數(shù)據(jù)庫,同時覆蓋目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)
    2013-12-12
  • SQLite?轉(zhuǎn)換字符串為日期的示例代碼

    SQLite?轉(zhuǎn)換字符串為日期的示例代碼

    在本文中,我們介紹了如何在SQLite數(shù)據(jù)庫中進(jìn)行字符串和日期的轉(zhuǎn)換,我們學(xué)習(xí)了如何使用date函數(shù)將字符串轉(zhuǎn)換為日期,以及如何使用strftime函數(shù)將日期轉(zhuǎn)換為字符串,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Linux環(huán)境下SQLite簡單實現(xiàn)(附示例說明)

    Linux環(huán)境下SQLite簡單實現(xiàn)(附示例說明)

    SQLite是一個c語言庫,它實現(xiàn)了一個小型、快速、自包含、高可靠性、全功能的SQL數(shù)據(jù)庫引擎,也是世界上使用最多的數(shù)據(jù)庫引擎,這篇文章主要介紹了Linux環(huán)境下SQLite簡單實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • SQLite數(shù)據(jù)庫常用語句及MAC上的SQLite可視化工具M(jìn)easSQLlite使用方法

    SQLite數(shù)據(jù)庫常用語句及MAC上的SQLite可視化工具M(jìn)easSQLlite使用方法

    這篇文章主要介紹了SQLite數(shù)據(jù)庫常用語句及MAC上的SQLite可視化工具M(jìn)easSQLlite使用方法,需要的朋友可以參考下
    2016-01-01
  • ubuntu下使用SQLite3的基本命令

    ubuntu下使用SQLite3的基本命令

    sqlite3一款主要用于嵌入式的輕量級數(shù)據(jù)庫,本文旨在為熟悉sqlite3基本命令提供技術(shù)文檔。希望對讀者們有所幫助,如有疑問請和我聯(lián)系,盡可能解答
    2014-08-08
  • SQLite教程(十三):C語言編程實例代碼(1)

    SQLite教程(十三):C語言編程實例代碼(1)

    這篇文章主要介紹了SQLite教程(十三):C語言編程實例代碼(1),本文講解了獲取表的Schema信息、動態(tài)創(chuàng)建表、刪除該表、常規(guī)數(shù)據(jù)插入、創(chuàng)建測試數(shù)據(jù)表、刪除測試表等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • sqlite3自動插入創(chuàng)建時間和更新時間的功能實現(xiàn)

    sqlite3自動插入創(chuàng)建時間和更新時間的功能實現(xiàn)

    最近在記錄一些簡單的結(jié)構(gòu)化日志信息時,用到了sqlite3數(shù)據(jù)庫(保存的信息比較簡單,用Mysql,SQL Server,Postgres這些數(shù)據(jù)庫有點(diǎn)小題大做),這次使用,希望sqlite3也能提供幾個基本的功能,自動插入創(chuàng)建時間和更新時間,需要的朋友可以參考下
    2024-06-06
  • SQLite教程(五):數(shù)據(jù)庫和事務(wù)

    SQLite教程(五):數(shù)據(jù)庫和事務(wù)

    這篇文章主要介紹了SQLite教程(五):數(shù)據(jù)庫和事務(wù),本文講解了Attach數(shù)據(jù)庫、Detach數(shù)據(jù)庫、事務(wù)等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • SQLite3 API 編程手冊

    SQLite3 API 編程手冊

    Sqlite3 的確很好用。小巧、速度快。但是因為非微軟的產(chǎn)品,幫助文檔總覺得不夠。這些天再次研究它,又有一些收獲,這里把我對 sqlite3 的研究列出來,以備忘記
    2013-12-12
  • sqlite循環(huán)批量插入數(shù)據(jù)采用批處理文件實現(xiàn)

    sqlite循環(huán)批量插入數(shù)據(jù)采用批處理文件實現(xiàn)

    需要在sqlite數(shù)據(jù)庫中插入大量測試數(shù)據(jù),需要通過一個批處理文件來循環(huán)調(diào)用插入sqlite語句,感興趣的朋友可以參考下哈,希望可以幫助到你
    2013-04-04

最新評論

喜德县| 新昌县| 乌兰浩特市| 高碑店市| 邢台市| 犍为县| 安仁县| 株洲县| 白山市| 开封县| 隆子县| 湖南省| 公安县| 格尔木市| 东兰县| 关岭| 临沭县| 嘉义县| 历史| 历史| 淮北市| 惠来县| 洱源县| 三亚市| 长岛县| 东丽区| 凤冈县| 偃师市| 宿州市| 宜良县| 清徐县| 云浮市| 保亭| 正定县| 桂阳县| 元氏县| 甘洛县| 黑山县| 通榆县| 焉耆| 浏阳市|