SQL,如何使用SELECT

如何從SQL數據庫表中獲取數據 您可以使用SELECT命令從表中獲取數據。 獲取所有行和列: SELECT * FROM people; age | name -----+-------- 37 | Flavio 8 | Roger 只獲取name列: SELECT name FROM people; name -------- Flavio Roger 計算表中的項目數量: SELECT COUNT(*) from people; count ------- 2 您可以使用WHERE子句過濾表中的行: SELECT age FROM people WHERE name='Flavio'; age ----- 37 查詢的結果可以按列值升序(默認)或降序使用ORDER BY進行排序: SELECT * FROM people ORDER BY name; SELECT * FROM people ORDER BY name DESC;

SQL,將資料添加至資料表

如何在 SQL 資料庫中插入資料表 一旦你有了一個資料表,你就可以將資料插入其中。 請參考以下範例資料表: CREATE TABLE people ( age INT, name CHAR(20) ); 你可以使用 INSERT INTO 命令把資料添加到資料表中,如下所示: INSERT INTO people VALUES (37, 'Flavio'); 你可以使用逗號分隔的方式一次性插入多筆資料,如下所示: INSERT INTO people VALUES (37, 'Flavio'), (8, 'Roger');

SQL,從一個表複製數據到另一個表

其中一個維護任務:將數據從一個表複製到另一個表。 你可以這樣將一個表的所有元素複製到另一個表中: INSERT INTO some\_table SELECT \* FROM other\_table 當然,如果你只想選擇一些數據,你可以這樣寫: INSERT INTO some\_table SELECT \* FROM other\_table WHERE list=94 如果你要將數據複製到的表已經有數據,你可能會遇到主鍵重複的問題。 為了讓表自動填充主鍵的自增值,你可以在選擇數據時排除主鍵列: INSERT INTO some\_table (`age`, `name`, `email`) SELECT `age`, `name`, `email` FROM other\_table 在我的案例中,id 是主鍵列,我將其排除在外。

SQL,創建表格

如何在SQL數據庫中創建一個表格 一個數據庫由一個或多個表格組成。 在SQL中創建一個表格是通過使用CREATE TABLE命令來完成的。 在創建時,您需要指定表格的列名,以及它們將要保存的數據類型。 在SQL中定義了幾種不同的數據類型。 最重要的,也是您將最常見到的是: CHAR TEXT VARCHAR DATE TIME DATETIME TIMESTAMP 數值類型包括: TINYINT 1字節 INT 4字節 BIGINT 8字節 SMALLINT 2字節 DECIMAL FLOAT 它們都保存數字。不同的是這個數字可以是多大。 TINYINT的範圍是0到255. INT的範圍是-2^31到+2^31。 字節大小越大,存儲所需的空間就越多。 以下是創建一個具有2列的“people”表格的語法,其中一列是整數,另一列是可變長字符串: CREATE TABLE people ( age INT, name CHAR(20) );

SQLite 用戶權限

SQLite 用戶權限的快速介紹 我已經談過 MySQL 和 PostgreSQL 中的用戶權限。 關於 SQLite,需要注意的一點是,使用 GRANT 和 REVOKE 來管理權限是不可用的。 這是因為不可能這樣做。 原因是 SQLite 數據庫是包含在單一文件中的獨立性的。 這是由於 SQLite 的架構所致。 任何擁有對 SQLite 文件的訪問權限的東西都可以訪問數據庫中的任何內容。 無法在數據庫層面上提供權限。 如果您的應用程序需要實現用戶權限,您可以在應用程序層面上進行,例如在 API 服務器中,但這取決於您自己。 如果您的應用程序確實需要用戶權限,您也可以重新考慮您的 DBMS 選擇,考慮使用 PostgreSQL 而不是 MySQL/MariaDB。

SQL介紹

SQL(Structured Query Language)是我們用來與數據庫管理系統(DBMS)進行交互的語言。 在我們介紹了最流行的概念性數據模型,實體關係(ER),以及最受歡迎的邏輯數據模型(關聯模型)之後,是時候介紹SQL了。 SQL(Structured Query Language)是我們用來與數據庫管理系統(DBMS)進行交互的語言。 正如其名所示,它不是一種編程語言,而是一種查詢語言,後來發展成為一種用於執行比僅執行查詢更高級操作的數據庫接口。 我說“發展”,但實際上SQL一直在不斷發展。它是一個標準,最初於1986年發布,然後在1989年、1992年、1999年、2003年、2006年、2008年、2011年、2016年和寫作時最新版本的2019年進行了更新。 SQL在許多流行的DBMS中得到實現:PostgreSQL、MySQL、Oracle、SQLite、MicroSoft SQL Server等等。每個不同的數據庫實現標準,或者實現特定版本,並在其上添加自定義功能,以簡化創建查詢或添加特定功能。 除非另有說明,每次我談到SQL時,我都是談論SQL標準,而不是特定的實現。 SQL是一個非常廣泛的主題。我在不同的博客文章中涵蓋了許多其內容,包括: SQL,創建表 SQL,向表中添加數據 SQL,如何使用SELECT SQL,如何更新表結構 SQL,如何更新數據 SQL,如何刪除數據和表 SQL,處理空單元格 SQL,唯一鍵和主鍵 SQL 視圖 SQL 聯接

SQL注入

SQL注入是對於使用SQL查詢的基於數據庫的應用程序而言的最大威脅之一,並且與輸入數據消毒聯繫在一起。 假設我們使用Node.js運行這樣一個簡單的查詢(這裡使用偽代碼): const color = //來自用戶輸入 const query = `select * from cars where color = '${color}'` 如果color是一個包含顏色(如red或blue)的字符串,一切正常運作。 但是如果你接受來自表單中input字段的字符串,並且攻擊者輸入字符串"blue';drop table cars;",你看到發生了什麼嗎? 現在query的值是: select * from cars where color = 'blue';drop table cars;' 如果你執行這個查詢,除非你在數據庫使用者的權限中移除了刪除表的選項,否則這將刪除所有數據。 再舉個例子。 假設你執行這樣一個查詢: const query = 'SELECT * FROM users where name = "' + name + '"' 如果你接受來自表單的name變量,並且沒有對其進行消毒,有人可能輸入以下值: flavio"; DELETE * FROM users; SELECT * FROM users where name ="flavio 看到了嗎?現在查詢變成了: SELECT * FROM users where name = "flavio"; DELETE * FROM users; SELECT * FROM users where name ="flavio" 這將導致用戶表被刪除。...

SQL連結

如何在兩個資料庫表之間執行簡單的連結 連結是一個非常強大的工具。還記得資料庫介紹模組中的關聯代數嗎? 連結是應用的關聯代數。 假設你有兩個表,名為people和cars: CREATE TABLE people ( age INT NOT NULL, name CHAR(20) NOT NULL PRIMARY KEY ); CREATE TABLE cars ( brand CHAR(20) NOT NULL, model CHAR(20) NOT NULL, owner CHAR(20) NOT NULL PRIMARY KEY ); 我們新增一些資料: INSERT INTO people VALUES (37, 'Flavio'); INSERT INTO people VALUES (8, 'Roger'); INSERT INTO cars VALUES ('Ford', 'Fiesta', 'Flavio'); INSERT INTO cars VALUES ('Ford', 'Mustang', 'Roger'); 現在,假設我們想要關聯這兩個表,因為警方攔下了Roger,他看起來年輕,並希望從資料庫中得知他的年齡。 Roger是我的狗,但假設狗可以開車。 我們可以使用以下語法創建一個連結: SELECT age FROM people JOIN cars ON people....

Streams API(流式API)

使用流式API,我們可以在第一個位元抵達時,立即從網路或其他來源接收資源並處理它。 不必等待資源完全下載後再使用它,可以立即開始處理。 什麼是流? 首先遇到的例子是載入YouTube視頻 - 在您開始觀看它之前,您不必完全載入它。 或者是直播,您甚至不知道內容何時結束。 內容甚至不必結束,它可以無限生成。 Streams API(流API) Streams API允許我們處理這種類型的內容。 我們有兩種不同的流模式:從流程讀取和寫入流程。 可讀流在除了Internet Explorer之外的所有現代瀏覽器中都可用。 可寫流在Firefox和Internet Explorer中不可用。 一如既往,請參閱caniuse.com上有關此問題的最新信息。 讓我們從可讀流開始 可讀流 當涉及到可讀流時,我們有三種對象類別: ReadableStream ReadableStreamDefaultReader ReadableStreamDefaultController 我們可以使用ReadableStream對像來消耗流。 這是第一個可讀流的例子。Fetch API允許從網絡中獲取資源並將其作為流程提供。 const stream = fetch('/resource') .then(response => response.body) fetch響應的body屬性是ReadableStream對象實例。這就是我們的可讀流。 閱讀器 在ReadableStream對像上調用getReader()方法會返回ReadableStreamDefaultReader對像,即閱讀器。我們可以按如下方式獲取: const reader = fetch('/resource').then(response => response.body.getReader()) 我們按塊讀取數據,其中一個塊是一個位元組或一個類型化數組。將塊排入流程,並逐個塊讀取它們。 單個流程可以包含不同類型的块。 一旦我們有了ReadableStreamDefaultReader對象,我們可以使用read()方法訪問數據。 只要創建了閱讀器,流程就鎖定了,其他讀者不能從它獲取塊,直到我們在閱讀器上調用releaseLock()。 您可以使用tee()方法來實現這種效果,後面將更詳細介紹。 從可讀流讀取數據 一旦我們有了ReadableStreamDefaultReader對象實例,就可以從中讀取數據。 以下是如何按字節(由於CORS原因,您可以在打開了該頁面的DevTools窗口中執行此操作)逐個字節讀取flaviocopes.com網頁的首個块的數據的方法。 fetch('https://flaviocopes.com/') .then(response => { response.body .getReader() .read() .then(({value, done}) => { console.log(value) }) }) 如果你打開每組數組項,你會得到單個項目。這些都是以Uint8Array存儲的字元: 您可以使用Encoding API將這些字節轉換為字符: const decoder = new TextDecoder('utf-8') fetch('https://flaviocopes....

String padEnd()方法

了解JavaScript的字串 padEnd()方法的所有資訊 字串填充的目的是添加字元到字串,直到它達到指定的長度。 padEnd()在ES2017中引入,它會在字串的尾端添加這些字元。 padEnd(targetLength [, padString]) 使用範例: padEnd() ‘test’.padEnd(4) ‘test’ ‘test’.padEnd(5) ‘test ’ ‘test’.padEnd(8) ‘test ’ ‘test’.padEnd(8, ‘abcd’) ‘testabcd’ 參閱 padStart()。