經常使用SQL語句及在node中使用MySQL

摘要:一些重要的SQL命令

SELECT - 從數據庫中提取數據node

UPDATE - 更新數據庫中的數據mysql

DELETE - 從數據庫中刪除數據sql

INSERT INTO - 向數據庫中插入新數據數據庫

CREATE DATABAS - 建立新數據庫網站

ALTER DATABASE - 修改數據庫ui

CREATE TABLE - 建立新表url

ALTER TABLE - 變動(改變)數據庫表spa

DROP TABLE - 刪除表code

CREATE INDEX - 建立索引(搜索鍵)orm

DROP INDEX - 刪除索引

SELECT - 從數據庫中提取數據

SELECT 語句用於從數據庫中選取數據。

語法SELECT column_name,column_name FROM table_name;

SQL SELECT DISTINCT 語句

在表中,一個列可能會包含多個重複值,有時但願僅僅列出不一樣(distinct)的值。

DISTINCT 關鍵詞用於返回惟一不一樣的值。

語法SELECT DISTINCT column_name,column_name FROM table_name;

SQL WHERE 子句

語法SELECT column_name,column_name FROM table_name WHERE column_name operator value;

SELECT * FROM Websites WHERE id=1;

SQL AND & OR 運算符

若是第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。

若是第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。

AND 運算符實例

下面的 SQL 語句從 "Websites" 表中選取國家爲 "CN" 且alexa排名大於 "50" 的全部網站

SELECT * FROM Websites WHERE country='CN' AND alexa > 50;

OR 運算符實例

下面的 SQL 語句從 "Websites" 表中選取國家爲 "USA" 或者 "CN" 的全部客戶:

SELECT * FROM Websites WHERE country='USA' OR country='CN';

結合 AND & OR

您也能夠把 AND 和 OR 結合起來(使用圓括號來組成複雜的表達式)。

下面的 SQL 語句從 "Websites" 表中選取 alexa 排名大於 "15" 且國家爲 "CN" 或 "USA" 的全部網站:

SELECT * FROM Websites
WHERE alexa > 15
AND (country='CN' OR country='USA');

SQL ORDER BY 關鍵字

ORDER BY 關鍵字用於對結果集按照一個列或者多個列進行排序。

ORDER BY 關鍵字默認按照升序對記錄進行排序。若是須要按照降序對記錄進行排序,可使用 DESC 關鍵字。

語法SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;

ORDER BY 實例

SELECT * FROM Websites
ORDER BY age;

ORDER BY DESC 實例

下面的 SQL 語句從 "Websites" 表中選取全部網站,並按照 "age" 列降序排序:

SELECT * FROM Websites
ORDER BY age DESC;

按價格(price)升序排列,若是價格相同,按銷量(sales)降序排列

ORDER BY price ASC,sales DESC

ORDER BY 多列

下面的 SQL 語句從 "Websites" 表中選取全部網站,並按照 "country" 和 "alexa" 列排序:

SELECT * FROM Websites
ORDER BY country,alexa;

SQL INSERT INTO

INSERT INTO 語句能夠有兩種編寫形式。

第一種形式無需指定要插入數據的列名,只需提供被插入的值便可:

語法INSERT INTO table_name VALUES (value1,value2,value3,...);

第二種形式須要指定列名及被插入的值:

語法INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

在指定的列插入數據

下面的 SQL 語句將插入一個新行,可是隻在 "name"、"url" 和 "country" 列插入數據(id 字段會自動更新):

INSERT INTO Websites (name, url, country)
VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');

SQL UPDATE 語句

語法UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;

請注意 SQL UPDATE 語句中的 WHERE 子句!

WHERE 子句規定哪條記錄或者哪些記錄須要更新。若是您省略了 WHERE 子句,全部的記錄都將被更新!

UPDATE Websites 
SET alexa='5000', country='USA' 
WHERE name='菜鳥教程';

SQL DELETE 語句

DELETE 語句用於刪除表中的行。

語法DELETE FROM table_name WHERE some_column=some_value;

請注意 SQL DELETE 語句中的 WHERE 子句!

WHERE 子句規定哪條記錄或者哪些記錄須要刪除。若是您省略了 WHERE 子句,全部的記錄都將被刪除!

DELETE FROM Websites
WHERE name='百度' AND country='CN';

刪除全部數據

您能夠在不刪除表的狀況下,刪除表中全部的行。這意味着表結構、屬性、索引將保持不變:

DELETE FROM table_name;

或

DELETE * FROM table_name;

GROUP 聚類-合併相同的

統計每一個班的人數 SELECT * FROM student_table GROUP BY class;
// GROUP BY class,以class爲合併依據,單獨用只是個去重的做用

SELECT class FROM student_table GROUP BY class; //只是單獨列出有哪些班級

SELECT class,COUNT(class) FROM student_table GROUP BY class;

//每一個班級的平均分 SELECT class,AVG(score) FROM student_table GROUP BY class;

SELECT class,AVG(score),MAX(score),MIN(SCORE),AVG(age) FROM student_table GROUP BY class;

SUM(price) //總和

LIMIT限制輸出

SELECT * form 表名 WHERE 條件 limit 5,10; //檢索6-15條數據

SELECT * form 表名 WHERE 條件 limit 5,-1; //檢索6到最後一條數據

SELECT * form 表名 WHERE 條件 limit 5; //檢索前5條數據

如分頁:

LIMIT 10; //前10條

LIMIT 5,8; //從5開始,要8個

第1頁 0,20 0-19

第2頁 20,20 20-39

第3頁 40,20

第n頁 (n-1)*20,20

子句間的順序

WHERE GROUP ORDER LIMIT

篩選 合併 排序 限制

在node中使用MySQL

const mysql=require('mysql');
// 連接數據庫
// createConnection(那臺數據庫,用戶名,密碼,庫)
var db=mysql.createConnection({host:'localhost',port:9999,user:'root',password:'root',database:'student'});
// console.log(db)
// 查詢
db.query('SELECT * FROM user_table',(err,data)=>{
    if(err) console.log(err);
    else
        console.log(data);
        console.log(JSON.stringify(data));
})

//按條件查詢
db.query('SELECT name,age FROM user_table')

數據庫鏈接建議

若是每一個請求都連接一次數據庫也很差。

若是隻鏈接一個也很差,若是其中一個沒有查完,後面的就得等着。

建議,保持20個左右的鏈接:

// 鏈接池
const db=mysql.createPool({host:'localhost',port:9999,user:'root',password:'root',database:'student'});


//錯誤時加一個狀態碼
if(err){
    res.status(500),send('database error').end();
}
相關文章
相關標籤/搜索