主頁 > 資料庫 > SQLite基礎語法速用大法(Flutter)

SQLite基礎語法速用大法(Flutter)

2022-09-23 08:21:57 資料庫

前記

(可跳過這段來自本up的羅里吧嗦,,,)

在做上一個專案的時候,需要用到本地資料庫,以前做公司專案用的是輕量級資料庫Realm,做自己小專案用的是greenDAO,大學學的是SQL server,但是在flutter中,相關插件用的資料庫是SQLite(sqflite插件),但本人還沒接觸過SQLite,問了后臺同事,他們用的也是SQLite,說大同小異,我就想著僅憑大學記憶,快速過一遍SQLite知識點,應該挺快的,想著抓點重要的就夠了,現在專案告一段落,就來寫這篇博客記錄一下(感覺有點標題黨了哈哈哈),

正文

小重點:

1、SQLite 是不區分大小寫的,但也有一些命令是大小寫敏感的,比如 GLOBglob 在 SQLite 的陳述句中有不同的含義,

2、注釋大法:

(1)-- 這是一句注釋

(2)/* 這是一句注釋 */

一、數值型別

用于指定任何物件的資料型別的屬性,

1、存盤類

(1)NULL:NULL值(空值),

(2)INTEGER:帶符號的整數,

(3)REAL:浮點值,

(4)TEXT:文本字串值,

(5)BLOB:二進制大物件,Binary Large Object,

2、親和型別(優先采用)

當資料插入時,該欄位的資料將會優先采用親緣型別作為該值的存盤方式,

(1)TEXT:數值型資料插入前先轉為文本格式再插入,

(2)NUMERIC:如果轉換操作不會導致資料丟失以及完全可逆,則會轉換為INTEGER和REAL,如果失敗則會以TEXT存盤,對于NULL和BLOB型別則不作型別轉換存盤,注意:浮點型別的文本,如"300.0",轉為INTEGER不會丟失數值資訊,則會轉換為INTEGER型別存盤,

(3)INTEGER:基本等同于NUMERIC,區別在于執行CAST運算式(轉換型別)時,

eg: 將column欄位 文本型別轉換為INTEGER型別,

SELECT * FROM Table ORDER BY CAST (column as INTEGER);

(4)REAL:基本等同于NUMERIC,區別在于不會將"300.0"這樣的文本資料轉為INTEGER型別存盤,

(5)NONE:不做轉換,以資料本身的資料型別存盤,

3、SQLite 親和型別(Affinity)及型別名稱(以下作了解)

(1)親和型別:INTEGER
對應資料型別:

  • INT
  • INTEGER
  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • BIGINT
  • UNSIGNED BIG INT
  • INT2
  • INT8

(2)親和型別:TEXT
對應資料型別:

  • CHARACTER(20)
  • VARCHAR(255)
  • VARYING CHARACTER(255)
  • NCHAR(55)NATIVE
  • CHARACTER(70)
  • NVARCHAR(100)
  • TEXT
  • CLOB

(3)親和型別:NONE
對應資料型別:

  • BLOB
  • no datatype specified

(4)親和型別:REAL
對應資料型別:

  • REAL
  • DOUBLE
  • DOUBLE PRECISION
  • FLOAT

(5)親和型別:NUMERIC
對應資料型別:

  • NUMERIC
  • DECIMAL(10,5)
  • BOOLEAN
  • DATE
  • DATETIME

4、Boolean資料型別

SQLite 沒有單獨的 Boolean 存盤類,相反,布林值被存盤為整數 0(false)和 1(true),

注:在我的專案中,直接存盤為INTEGER型別,0為false,1為true,

5、Date 與 Time資料型別

SQLite 沒有一個單獨的用于存盤日期和/或時間的存盤類,但 SQLite 能夠把日期和時間存盤為 TEXT、REAL 或 INTEGER 值,

注:在我的專案中,存盤的是時間戳,要用時取出時間戳轉換為具體的時間格式 [文本字串] 顯示,

Date 與 Time 資料型別

存盤類 日期格式
TEXT 格式為 "YYYY-MM-DD HH:MM:SS.SSS" 的日期,
REAL 從公元前 4714 年 11 月 24 日格林尼治時間的正午開始算起的天數,
INTEGER 從 1970-01-01 00:00:00 UTC 算起的秒數,

二、資料庫相關操作陳述句

1、創建、附加、分離資料庫

在此教程不作sqlite的資料操作的詳細講解,后續有時間補充,

原因:移動端的資料庫操作一般根據插件的陳述句來,

三、表相關操作陳述句

SQLite陳述句是以關鍵字開始,分號結束的陳述句,

關鍵字:SELECT、INSERT、UPDATE、DELETE、ALTER、DROP,

注: 在此提出關注 ALTER 關鍵字,本人因為把 ALTER 寫成 ALERT 導致陳述句執行錯誤,

1、表的創建

基本語法:(每一欄位用逗號隔開,最后一個欄位不用寫逗號)

CREATE TABLE database_name.table_name(
   column1 datatype  PRIMARY KEY(one or more columns),
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype
);

eg:創建三張公司表,欄位id自增,名稱不為空,年齡不為空,作業崗位,工資,(結合Flutter中 sqflite 插件的陳述句寫法,)

CREATE TABLE Company(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT NOT NULL,
   age INTEGER NOT NULL,
   job TEXT,
   salary REAL,
   hobby TEXT
);
CREATE TABLE Unimportant(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT NOT NULL,
   age INTEGER NOT NULL,
   job TEXT,
   salary REAL,
   hobby TEXT
);
CREATE TABLE Company_Second (
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT NOT NULL,
   age INTEGER NOT NULL,
   job TEXT,
   salary REAL,
   hobby TEXT
);

2、表的洗掉

注:謹慎使用,一旦刪了重要的表,可能會G!因為一旦一個表被洗掉,表中所有資訊也將永遠丟失,3(重要事情說三遍!!!)涉及洗掉操作的(無論是洗掉庫、表,還是資料)一定要慎之又慎!!!*

我的專案里沒有洗掉操作的陳述句,創建了,即使不用也留著,萬一后續又要用了呢,

基本語法:

DROP TABLE database_name.table_name;

eg:洗掉不重要表,

DROP TABLE Unimportant;

3、表的資料插入

(1)基本語法:

i. 該陳述句適用于所有欄位均插入資料或指定欄位插入資料,

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
VALUES (value1, value2, value3,...valueN);

ii. 或者不需要指定列,即每個欄位都有值插入,但用該陳述句,欄位一定要一 一對應,否則資料容易插入錯誤,

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

eg:往Company表中插入幾組資料,

INSERT INTO Company(id, name, age, job, salary, hobby)
VALUES (1, 'Paul', 32, 'CEO', 20000.00, 'basketball');

INSERT INTO Company(id, name, age, job, salary, hobby)
VALUES (2, 'Allen', 25, 'COO', 15000.00, 'soccer');

INSERT INTO Company(id, name, age, job, salary)
VALUES (3, 'Teddy', 23, 'CFO', 10000.00);

INSERT INTO Company(id, name, age, job, salary, hobby)
VALUES (4, 'Mark', 25, 'CTO', 65000.00, 'badminton');

INSERT INTO Company(id, name, age, job, salary)
VALUES (5, 'David', 27, 'CIO', 25000.00);

INSERT INTO Company(id, name, age, job, salary)
VALUES (6, 'Kim', 22, 'CHO', 15000.00);

或:

INSERT INTO Company VALUES (7, 'James', 24, 'COO', 30000.00);

(2)用一個表填充另一個表:

通過在一個有一組欄位的表上使用 select 陳述句,填充資料到另一個表中,WHERE 引出條件,可寫可不寫,

INSERT INTO first_table_name [(column1, column2, ... columnN)] 
   SELECT column1, column2, ...columnN 
   FROM second_table_name
   [WHERE condition];

eg:把Company表中id為1的人員的id、名字、年齡、作業崗位、工資填充到Company_Second表中,

INSERT INTO Company_Second [(id, name, age, job, salary, hobby)] 
   SELECT id, name, age, job, salary, hobby
   FROM Company
   WHERE id = 1;

4、表的資料選擇

注:選擇的回傳結果是一個結果集,一般為串列型別,

(1)基本語法:

SELECT column1, column2, columnN FROM table_name;

想獲取所有的欄位,可以用:

SELECT * FROM table_name;

eg:選擇Company表中所有人的id、名稱、作業崗位,

SELECT id, name, job FROM Company;

eg2:選擇Company表中所有人的所有資訊,

SELECT * FROM Company;

5、運算子

(1)算術運算子(+、-、*、/、%)

i. +、-、*、/:就是加、減、乘、除以,

ii. %:取模,被除數 除以 除數 得到的余數,

eg:6 % 2 = 0

eg2: 5 % 2 = 1

(2)比較運算子(加粗為常用的比較運算子)
假設變數 a=10,變數 b=20,則:
比較運算子串列

運算子 描述 + 實體
== 檢查兩個運算元的值是否相等,如果相等則條件為真, (a == b) 不為真,
= 檢查兩個運算元的值是否相等,如果相等則條件為真, (a = b) 不為真,
!= 檢查兩個運算元的值是否相等,如果不相等則條件為真, (a != b) 為真,
<> 檢查兩個運算元的值是否相等,如果不相等則條件為真, (a <> b) 為真,
> 檢查左運算元的值是否大于右運算元的值,如果是則條件為真, (a > b) 不為真,
< 檢查左運算元的值是否小于右運算元的值,如果是則條件為真, (a < b) 為真,
>= 檢查左運算元的值是否大于等于右運算元的值,如果是則條件為真, (a >= b) 不為真,
<= 檢查左運算元的值是否小于等于右運算元的值,如果是則條件為真, (a <= b) 為真,
!< 檢查左運算元的值是否不小于右運算元的值,如果是則條件為真, (a !< b) 為假,
!> 檢查左運算元的值是否不大于右運算元的值,如果是則條件為真, (a !> b) 為真,

(3)邏輯運算子(常用,重點掌握)

例子結合WHERE子句使用,

邏輯運算子串列

運算子 描述
AND AND 運算子允許在一個 SQL 陳述句的 WHERE 子句中的多個條件的存在
BETWEEN BETWEEN 運算子用于在給定最小值和最大值范圍內的一系列值中搜索值,
EXISTS EXISTS 運算子用于在滿足一定條件的指定表中搜索行的存在
IN IN 運算子用于把某個值與一系列指定串列的值進行比較,
NOT IN IN 運算子的對立面,用于把某個值與不在一系列指定串列的值進行比較,
LIKE LIKE 運算子用于把某個值與使用通配符運算子的相似值進行比較,
GLOB GLOB 運算子用于把某個值與使用通配符運算子的相似值進行比較,GLOB 與 LIKE 不同之處在于,它是區分大小寫的,
NOT NOT 運算子是所用的邏輯運算子的對立面,比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等,它是否定運算子,
OR OR 運算子用于結合一個 SQL 陳述句的 WHERE 子句中的多個條件,
IS NULL NULL 運算子用于把某個值與 NULL 值進行比較,
IS IS 運算子與 = 相似,
IS NOT IS NOT 運算子與 != 相似,
雙豎線 連接兩個不同的字串,得到一個新的字串,
UNIQUE UNIQUE 運算子搜索指定表中的每一行,確保唯一性(無重復),

(4)位運算子(不常用)
假設變數 a=10,變數 b=20,則:

位運算子串列

運算子 描述 + 實體
& 如果同時存在于兩個運算元中,二進制 AND 運算子復制一位到結果中, (A & B) 將得到 12,即為 0000 1100
單豎線 如果存在于任一運算元中,二進制 OR 運算子復制一位到結果中, 將得到 61,即為 0011 1101
~ 二進制補碼運算子是一元運算子,具有"翻轉"位效應,即0變成1,1變成0, (~A ) 將得到 -61,即為 1100 0011,一個有符號二進制數的補碼形式,
<< 二進制左移運算子,左運算元的值向左移動右運算元指定的位數, A << 2 將得到 240,即為 1111 0000
>> 二進制右移運算子,左運算元的值向右移動右運算元指定的位數, A >> 2 將得到 15,即為 0000 1111

6、運算式

運算式是一個或多個值、運算子和計算值的SQL函式的組合,

(1)基本語法:

SELECT column1, column2, columnN 
FROM table_name 
WHERE [CONDITION | EXPRESSION];

(2)布爾運算式

基本語法:

SELECT column1, column2, columnN 
FROM table_name 
WHERE SINGLE VALUE MATCHING EXPRESSION;

eg:查詢Company表中 工資為15000 的人員的所有資訊,

SELECT * FROM Company WHERE salary = 15000;

(3)數值運算式

基本語法:

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name WHERE CONDITION] ;

eg:以下數值運算式的結果為:ADDITION = 21

SELECT (15 + 6) AS ADDITION

注:有幾個內置的函式,比如 avg()sum()count(),等等,執行被稱為對一個表或一個特定的表列的匯總資料計算,

eg:查詢Company表中資料的總條數,并賦值給RECORDS,結果為:RECORDS = 7

SELECT COUNT(*) AS "RECORDS" FROM Company; 

(4)日期運算式

基本語法:以下日期運算式的結果為:datetime('now','localtime') = 2022-09-21 16:47:36

SELECT datetime('now','localtime');

7、WHERE 子句

用于指定從一個表或多個表中獲取資料的條件,

基本語法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

eg:查詢Company表中 年齡大于等于25,并且工資大于等65000的人員所有資訊,

SELECT * FROM Company WHERE Age >= 25 AND Salary >= 65000;

eg2:查詢Company表中年齡大于等于25,或者工資大于等65000的人員所有資訊,

SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

eg3:查詢Company表中 name 欄位以 'Ja' 開始,'Ja' 之后的字符不做限制 的所有人員的所有資訊,

SELECT * FROM Company WHERE name LIKE 'Ja%';

或:

SELECT * FROM Company WHERE name GLOB 'ja*';

eg4:查詢Company表中 age 的值為 25 或 27 的所有人員的所有資訊,

SELECT * FROM Company WHERE age IN (25, 27);

eg5:查詢Company表中 age 的值既不是 25 也不是 27 的所有人員的所有資訊,

SELECT * FROM Company WHERE age NOT IN (25, 27);

eg6:查詢Company表中 age 的值在 25 和 27 之間 的所有人員的所有資訊,

SELECT * FROM Company WHERE age BETWEEN 25 AND 27;

eg7:查詢Company表中 工資大于55000 的人員的年齡,

SELECT age FROM Company 
        WHERE EXISTS (SELECT age FROM Company WHERE salary > 55000);

決議:查詢從內往外剝,就是從最小的條件陳述句開始看起(最后一個條件看起),即 WHERE salary > 55000,查詢存在的工資大于55000人員的年齡,查詢結果集是age列,

eg8:查詢Company表中 年齡大于【工資大于55000 的人員的年齡】的所有人員的所有資訊,

SELECT * FROM Company 
        WHERE age > (SELECT age FROM Company WHERE salary > 55000);

決議:同理,從內往外剝,最底層的查詢條件為小括號中的 SELECT age FROM Company WHERE salary > 55000;,即查詢工資大于55000的年齡,假設查詢結果為年齡 25,接著繼續上一層的條件查詢:age > (...),即為 age > 25,所以最后一層的查詢可以簡化為:SELECT * FROM Company WHERE age > 25;, 結果就是查詢 年齡大于25 的所有員工的所有資訊,

8、AND 和 OR 運算子

允許在一個 SQL 陳述句的 WHERE 子句中的多個條件的存在,

(1)AND 運算子

使用 AND 運算子時,只有當所有條件都為真(true)時,整個條件為真(true),例如,只有當 condition1 和 condition2 都為真(true)時,[condition1] AND [condition2] 為真(true),

基本語法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

eg:查詢Company表中 age大于等于25 并且 salary大于等于65000 的所有員工的所有資訊,

SELECT * FROM Company WHERE age >= 25 AND salary >= 65000;

(2)OR 運算子

使用 OR 運算子時,只要當條件中任何一個為真(true)時,整個條件為真(true),例如,只要當 condition1 或 condition2 有一個為真(true)時,[condition1] OR [condition2] 為真(true),

基本語法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

eg:查詢Company表中 age大于等于 25 或salary大于等于 65000 的所有員工的所有資訊,

SELECT * FROM Company WHERE age >= 25 OR salary >= 65000;

9、UPDATE 陳述句

用于修改表中已有的記錄,可以使用帶有 WHERE 子句的 UPDATE 查詢來更新選定行,否則所有的行都會被更新,

基本語法:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

eg:更新Company表中 id為6的員工的hobby為Football

UPDATE Company SET hobby = 'Football' WHERE id = 6;

eg2:更新Company表中 所有hobby 和 salary 列的值

UPDATE Company SET hobby = 'Badminton', salary = 20000.00;

執行以上陳述句,Company表中hobby 和 salary 列的值全部都為Badminton和20000.00,

10、DELETE 陳述句

用于洗掉表中已有的記錄,(輕易不使用!!!若要洗掉資料,可使用軟洗掉,即用一個欄位來標識該資料是否被洗掉)

基本語法:

DELETE FROM table_name
WHERE [condition];

eg:洗掉Company表中 id為7 的員工資料,

DELETE FROM Company WHERE id = 7;

eg2:洗掉Company表中 所有 資料,

DELETE FROM Company;

11、LIKE 子句(不區分大小寫)

用來匹配通配符指定模式的文本值,LIKE 運算子將回傳真(true),也就是 1,以下兩個通配符與 LIKE 運算子一起使用(這兩個符號可以被組合使用),

(1)百分號 (%):表示零個、一個或多個數字或字符,

(2)下劃線 (_):表示一個單一的數字或字符,

基本語法:

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT column_list 
FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT column_list 
FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT column_list 
FROM table_name
WHERE column LIKE '_XXXX_'

eg:SELECT * FROM Company + (以下陳述句)

陳述句 描述
WHERE SALARY LIKE '200%' 查找以 200 開頭的任意值
WHERE SALARY LIKE '%200%' 查找任意位置包含 200 的任意值
WHERE SALARY LIKE '_00%' 查找第二位和第三位為 00 的任意值
WHERE SALARY LIKE '2_%_%' 查找以 2 開頭,且長度至少為 3 個字符的任意值
WHERE SALARY LIKE '%2' 查找以 2 結尾的任意值
WHERE SALARY LIKE '_2%3' 查找第二位為 2,且以 3 結尾的任意值
WHERE SALARY LIKE '2___3' 查找長度為 5 位數,且以 2 開頭以 3 結尾的任意值

12、GLOB子句(區分大小寫)

用來匹配通配符指定模式的文本值,GLOB 運算子將回傳真(true),也就是 1,以下兩個通配符與 GLOB 運算子一起使用(這兩個符號可以被組合使用),

(1)星號 (*):表示零個、一個或多個數字或字符,

(2)問號 (?):表示一個單一的數字或字符,

基本語法:

SELECT FROM table_name
WHERE column GLOB 'XXXX*'

or 

SELECT FROM table_name
WHERE column GLOB '*XXXX*'

or

SELECT FROM table_name
WHERE column GLOB 'XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '????'

eg:SELECT * FROM Company + (以下陳述句)

陳述句 描述
WHERE SALARY GLOB '200*' 查找以 200 開頭的任意值
WHERE SALARY GLOB '200' 查找任意位置包含 200 的任意值
WHERE SALARY GLOB '?00*' 查找第二位和第三位為 00 的任意值
WHERE SALARY GLOB '2??' 查找以 2 開頭,且長度至少為 3 個字符的任意值
WHERE SALARY GLOB '*2' 查找以 2 結尾的任意值
WHERE SALARY GLOB '?2*3' 查找第二位為 2,且以 3 結尾的任意值
WHERE SALARY GLOB '2???3' 查找長度為 5 位數,且以 2 開頭以 3 結尾的任意值

13、LIMIT 子句

用于限制由 SELECT 陳述句回傳的資料數量,
基本語法:

SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows]

LIMIT 子句與 OFFSET 子句一起使用:

SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows] OFFSET [row num]

eg:從Company表中提取 6名員工 的所有資訊,

SELECT * FROM Company LIMIT 6;

eg2:從Company表中的 第二位開始提取 3 名員工 的所有資訊,

SELECT * FROM Company LIMIT 3 OFFSET 2;

14、ORDER BY 子句

用來基于一個或多個列按升序或降序順序排列資料,

關鍵詞:ASC | DESC

(1)ASC:從小到大,升序排列,默認值ASC,

(2)DESC:從大到小,降序排列,

基本語法:

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

可以使用多個列排序:

SELECT
   select_list
FROM
   table
ORDER BY
    column_1 ASC,
    column_2 DESC;

column_1 與 column_2 如果后面不指定排序規則,默認為 ASC 升序,以上陳述句按 column_1 升序,column_2 降序讀取,

SELECT
   select_list
FROM
   table
ORDER BY
    column_1,
    column_2 DESC;

eg:查詢Company表中 按照工資升序排序 的所有員工的所有資訊,

SELECT * FROM Company ORDER BY salary ASC;

eg2:查詢Company表中 按 name 和 salary 升序排序 的所有員工的所有資訊,

SELECT * FROM Company ORDER BY name, salary ASC;

eg3:查詢Company表中 按 NAME 降序排序 的所有員工的所有資訊,

SELECT * FROM Company ORDER BY name DESC;

15、GROUP BY 子句

用于對相同的資料進行分組,

注:在 SELECT 陳述句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前,

基本語法:

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

eg:查詢Company表中 每個客戶的工資總額

SELECT name, SUM(salary) FROM Company GROUP BY name;

eg2:查詢Company表中 按 name 列進行分組的、按 name 列 升序 的每個客戶的工資總額,

SELECT name, SUM(salary) FROM Company GROUP BY name ORDER BY name;

以上也是把 ORDER BY 子句與 GROUP BY 子句一起使用的例子,

16、HAVING 子句

指定條件來過濾將出現在最終結果中的分組結果,WHERE 子句在所選列上設定條件,而HAVING 子句在由 GROUP BY 子句創建的分組上設定條件,

注:HAVING 子句必須放在 GROUP BY 子句之后,必須放在 ORDER BY 子句之前,

基本語法:

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

eg:查詢Company表中 按名稱計數小于 2 的所有記錄,

SELECT * FROM Company GROUP BY name HAVING count(name) < 2;

17、DISTINCT 關鍵字

用來消除所有重復的記錄,并只獲取唯一一次記錄,

基本語法:

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

eg:查詢Company表中 所有不重復的name

SELECT DISTINCT name FROM Company;

---------------------------------------------------------分割線---------------------------------------------------------------

以上,后續會再補充,各位小伙伴,歡迎提出問題~

我的學習檔案是 菜鳥教程,致謝,

The one who wants to wear the crown, bears the crown.

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/509373.html

標籤:其它

上一篇:MySQL InnoDB 鎖的二三事

下一篇:返回列表

標籤雲
其他(145167) Python(37270) JavaScript(24901) Java(16460) C(14967) 區塊鏈(8236) C#(7957) AI(7469) 爪哇(7405) html(6776) MySQL(6722) 基礎類(6313) sql(6084) 熊猫(6051) PHP(5787) 数组(5741) R(5305) 反应(5188) Linux(5180) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4413) 数据框(4310) css(4249) 节点.js(4029) C語言(3288) json(3241) 列表(3120) C++語言(3117) 扑(3085) 安卓(2997) 打字稿(2957) VBA(2784) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2398) ASP.NET(2364) MongoDB(2317) 麻木的(2285) 正则表达式(2232) 字典(2211) 循环(2197) 迅速(2174) 擅长(2159) 镖(2150) 功能(1967) Web開發(1951) python-3.x(1918) 弹簧靴(1911) xml(1884) for循环(1841) 谷歌表格(1837) Unity3D(1824) PostgreSQL(1808) .NET技术(1800) 網絡通信(1793) .NETCore(1790) 蟒蛇-3.x(1774)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • SQLite基礎語法速用大法(Flutter)

    前記 (可跳過這段來自本up的羅里吧嗦。。。) 在做上一個專案的時候,需要用到本地資料庫,以前做公司專案用的是輕量級資料庫Realm,做自己小專案用的是greenDAO,大學學的是SQL server,但是在flutter中,相關插件用的資料庫是SQLite(sqflite插件),但本人還沒接觸過S ......

    uj5u.com 2022-09-23 08:21:57 more
  • MySQL InnoDB 鎖的二三事

    近日, 在一個小型專案中, 遇到了一個觸及我知識盲區的bug. 專案用的是MySQL 5.7.25, 其中有一張表 config_data, 包含四個欄位, id, name, value, expireAt. 其中id為主鍵, name建有唯一索引, 表的用途大概就是存放一些有時效性的配置. 以上 ......

    uj5u.com 2022-09-23 08:21:21 more
  • 我眼中的大資料(二)——HDFS

    Hadoop的第一個產品是HDFS,可以說分布式檔案存盤是分布式計算的基礎,也可見分布式檔案存盤的重要性。如果我們將大資料計算比作烹飪,那么資料就是食材,而Hadoop分布式檔案系統HDFS就是燒菜的那口大鍋。這些年來,各種計算框架、各種演算法、各種應用場景不斷推陳出新,讓人眼花繚亂,但是大資料存盤的 ......

    uj5u.com 2022-09-23 08:21:07 more
  • 他來了!袋鼠云大資料基礎平臺EasyMR正式上線

    7月28日,在袋鼠云2022產品發布會上,袋鼠云技術負責人思樞正式宣布旗下產品「大資料基礎平臺EasyMR」發布。 EasyMR是袋鼠云自研的大資料基礎平臺,提供Hadoop、Hive、Spark、Trino、HBase、Kafka等組件,完全兼容Apache開源生態;支持企業級安全管控,一鍵開啟L ......

    uj5u.com 2022-09-23 08:20:45 more
  • MySQL DDL執行方式-Online DDL介紹

    日常開發我們對一條DML陳述句較為熟悉,很多開發人員都了解sql的執行程序,比較熟悉,但是DDL是如何執行的呢,大部分開發人員可能不太關心,也認為沒必要了解,都交給DBA吧。 其實不然,了解一些能盡量避開一些ddl的坑,那么下面帶大家一起了解一下DDL執行的方式,。 ......

    uj5u.com 2022-09-22 10:08:55 more
  • MySQL DDL執行方式-Online DDL介紹

    日常開發我們對一條DML陳述句較為熟悉,很多開發人員都了解sql的執行程序,比較熟悉,但是DDL是如何執行的呢,大部分開發人員可能不太關心,也認為沒必要了解,都交給DBA吧。 其實不然,了解一些能盡量避開一些ddl的坑,那么下面帶大家一起了解一下DDL執行的方式,。 ......

    uj5u.com 2022-09-22 10:08:03 more
  • 一條sql了解MYSQL的架構設計

    對于一個服務端開發來說 MYSQL 可能是他使用最熟悉的資料庫工具,然而,大部分的Java工程師對MySQL的了解和掌握程度,大致就停留在這么一個階段:它可以建庫、建表、建索引,然后就是對里面的資料進行增刪改查,陳述句性能有點差?沒關系,在表里建幾個索引或者調整一下查詢邏輯就可以了,一條sql,MYS... ......

    uj5u.com 2022-09-21 11:42:20 more
  • PostgreSQL邏輯復制解密

    在數字化時代的今天,我們都認同資料會創造價值。為了最大化資料的價值,我們不停的建立著資料遷移的管道,從同構到異構,從關系型到非關系型,從云下到云上,從數倉到資料湖,試圖在各種場景挖掘資料的價值。而在這縱橫交錯的資料網路中,邏輯復制扮演著及其重要的角色。

    讓我們將視角從復雜的網路拉回其中的一個端點,... ......

    uj5u.com 2022-09-21 11:42:10 more
  • 工具推薦-使用RedisInsight工具對Redis集群CURD操作及資料可視化

    RedisInsight 是一個直觀而高效的 Redis GUI (可視化工具),它提供了設計、開發和優化 Redis 應用程式的功能,查詢、分析您的 Redis 資料并與之互動,簡化您的 Redis 應用程式開發 。(必備)
    RedisInsight 現在采用了基于流行的 Electron 框架的... ......

    uj5u.com 2022-09-21 11:41:51 more
  • Redis——資料操作

    2022-09-20 Redis——select Redis資料庫中的資料庫的個數為: 16個,使用0號資料庫開始的,到第15個資料庫結束。 在ubantu中,進入Redis客戶端的命令: redis-cli 在ubantu中,如果選擇第0-15個資料庫中的一個的命令,例如第0個: select 0 ......

    uj5u.com 2022-09-21 11:40:44 more