1. 程式人生 > >mysql 基礎知識總結

mysql 基礎知識總結

DDL 語句:

建立資料庫

CREATE DATABASE database_name;

檢視系統中有哪些資料庫

SHOW DATABASES;

選擇要操作的資料庫

USE database_name;

檢視資料庫中有哪些資料表

SHOW TABLES;

刪除資料庫

DROP DATABASE database_name;

注意:資料庫刪除後,下面的所有表資料都會全部刪除,所以刪除前一定要仔細檢查做好相應的備份。

建立表

CREATE TABLE  table_name(
column_name_1 column_type_1 constraints
, column_name_2 column_type_2 constraints, .... column_name_n column_type_n constraints, );

其中: cloumn_name 表示列名稱,column_type 是列的資料型別,constraints 是列的約束條件。

查看錶的定義

DESC table_name;

檢視建立表的 SQL 語句

SHOW CREATE TABLE table_name \G;

其中 “\G” 選項的含義是使得記錄能夠按照欄位豎向排列,便於顯示內容較長的記錄。

刪除表

DROP TABLE table_name;

修改表

1. 修改表型別

ALTER TABLE table_name MODIFY [COLUMN] cloumn_definition [FIRST | AFTER col_name];
eg: ALTER TABLE emp MODIFY ename varchar(20);

2. 增加表字段

ALTER TABLE table_name ADD [COLUMN] column_difinition [FIRST|AFTER col_name];
eg: ALTER TABLE emp ADD age int(3);

3. 刪除表字段

ALTER TABLE table_name DROP
[COLUMN] col_name;
eg: ALTER TABLE emp DROP age;

4. 欄位改名

ALTER TABLE table_name CHANGE [COLUMN] old_col_name  column_definition [FIRST|AFTER col_name];
eg: ALTER TABLE emp CHAGE age age1 int(4);

注意: change 和 modify 都可以修改表的定義,不同的是:
change 後面需要些兩次列名,可以修改列名稱。
modify 只能修改列的屬性,不能修改列的名稱。

5. 修改欄位排列順序
欄位增加(ADD) 和 欄位修改(CHANGE/MODIFY) 都有一個可選項 first|after col_name, 這個選項可以用來修改欄位在表中的位置。
ADD 增加的新欄位預設是加在表的最後位置,而 CHANGE/MODIFY 預設都不會改變欄位的位置。

eg: ALTER TABLE emp ADD birth date after ename;
eg: ALTER TABLE emp MODIFY age int(3) first;

6. 更改表名

ALTER TABLE table_name RENAME [TO] new_table_name;

DML 語句

插入記錄
插入指定列

INSERT INTO table_name (field1, field2,...fieldn) VALUES(value1, value2,...valuen);

插入所有列

INSERT INTO table_name VALUES (,,,,);

一次插入多行

INSERT INTO table_name VALUES    
(val1,val2……),
(val1,val2……),
(val1,val2……);

注意:可以 指定欄位名稱,也可不指定欄位名稱。如果不指定欄位名稱 VALUES 後面的順序應該和欄位的排列順序一致。

更新記錄

UPDATE table_name
SET 
field1=value1, field2=value2,....,fieldn=valuen
[WHERE CONDITION]

同時更新多個表中資料

UPDATE T1,T2,....,TN SET T1.field1=expr1, tn.fieldn=exprn [WHERE CONDITION];
eg: UPdate emp a, dept b  SET a.sal=a.sal*b.deptno,b.deptname=a.ename WHERE a.deptno=b.deptno;

注意:多表更新的語法更多的用在了根據一個表的欄位來動態地更新另外一個表的欄位。

刪除記錄

DELETE FROM table_name [WHERE CONDITION];

注意:如果不加 where 條件將會把表中的所有記錄刪除,操作時一定要小心。

查詢記錄

SELECT * FROM  table_name [WHERE CONDITION];

其中 “*” 表示要將所有的記錄都選出來,也可以用逗號分割所有欄位來代替。

查詢不重複的記錄:有時需要將表中的記錄去掉重複後顯示出來,可以用 distinct 關鍵字來實現:

select distinct deptno from emp;

條件查詢:

SELECT * FROM
table_name
[WHERE CONDITION];

where 後面的欄位是一個欄位的 比較 或是邏輯運費的多條件聯合查詢。

排序和限制

SELECT * FROM  
table_name
[WHERE CONDITION]
[ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],fieldn [DESC|ASC]];

DESC 和 ASC 是排序關鍵字, DESC 表示按照欄位進行降序排序
ASC 則表示升序排序,如果不寫此關鍵字預設是升序排序。
ORDER BY 後面可以跟多個不同的排序欄位,並且每個排序欄位可以有不同的排序順序。如果排序欄位的值一樣,則值相同的欄位按照第二個排序欄位進行排序,以此類推。如果只有一個排序欄位,則這些欄位瞎弄的記錄將會無序

SELECT......[LIMIT offset_start, row_count]

offset_start 表示記錄的起始偏移量, row_count 表示顯示的行數。
預設情況下,起始偏移量為 0 ,只需要寫記錄行數就可以。
LIMIT 經常和 ORDER BY 一起配合使用來進行記錄的分頁顯示。

聚合

SELECT [fild1,field2,...fieldn] fun_name
FROM table_name
[WHERE  CONDITION]
[GOUP BY field1,field2,....,fieldn]
[WITH ROLLUP]
[HAVING CONDITION]

fun_name 表示要做的聚合操作,也就是聚合函式,常用的有 sum(),count(*),max(),ming().
GROUP BY 關鍵字表示要進行分類聚合的欄位。
WITH ROLLUP 是可選語法,表示是否對分類聚合後的結果進行再彙總。
HAVING 表示對分類後的結果再進行條件的過濾。
注意: having 和 where 的區別在於,having 是對聚合後的結果進行條件的過濾,而whereshi zai
聚合前就對記錄進行過濾,如果邏輯允許,儘可能用 where 先過濾記錄,最後在根據邏輯看是否用 having 進行再過濾。