資料庫定義語言(DDL) 資料庫 創建資料庫 CREATE DATABASE IF NOT EXISTS 資料庫名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 刪除資料庫 drop database 資料庫名; 切換資料庫 use 資料庫名; 查看所有 ...
目錄
資料庫定義語言(DDL)
資料庫
-
創建資料庫
CREATE DATABASE IF NOT EXISTS 資料庫名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
-
刪除資料庫
drop database 資料庫名;
-
切換資料庫
use 資料庫名;
-
查看所有資料庫
show databases;
-
修改資料庫編碼
alter database 資料庫名 character set utf8
表
-
創建表
create table if not exists 表名( 列名 數據類型[列級約束條件], 列名 數據類型[列級約束條件], ... [,表級約束條件])
-
SQL數據類型
- char(n)可以存儲任意字元串,但是是固定長度為n,如果插入的長度小於定義長度時,則用空格填充。
- varchar(n)可以存儲任意數量字元串,長度不固定,但不能超過n,不會用空格填充。
- smallint用於存儲小的整數,範圍在 (-32768,32767)
- int用於存儲一般的整數,範圍在 (-2147483648,2147483647)
- bigint用於存儲大型整數,範圍在 (-9,223,372,036,854,775,808,9,223,372,036,854,775,807)
- float用於存儲單精度小數
- double用於存儲雙精度的小數
- date存儲日期
- time存儲時間
- year存儲年份
- datetime用於混合存儲日期+時間
-
列級約束條件
就是可以在列名後面寫的
主鍵Primary key、外鍵foreign key 、唯一 unique、檢查 check 、預設default 、非空/空值 not null/ null
-
表級約束條件
就是列都寫完了,你可以單獨拿出來在最下麵寫的,和列級約束條件是兩種不同的書寫模式,但是作用都是一樣的
主鍵、外鍵、唯一、檢查
-
-
刪除表
drop table 表名
-
查看表
# 查看所有表 show tables; # 查看表的創建語句 show create table 表名; # 查看表結構 desc 表名
-
修改表
# 添加列 alter table 表名 add 列名 列類型 [列級約束條件], ... # 修改列 alter table 表名 modify 列名 列類型; # 修改列名 alter table 表名 change 原列名 新列名 列類型 # 刪除列 alter table 表名 drop 列名 # 修改表名 alter table 表名 rename to 表名
資料庫操縱語言(DML)
-
插入
INSERT INTO 表名 VALUES(值1, 值2, 值3); INSERT INTO 表名(列名1, 列名2) VALUES(值1, 值2), (值1, 值2), (值1, 值2);
-
修改
UPDATE 表名 SET 列名=值,... WHERE 條件
警告:如果忘記添加
WHERE
字句來限定條件,將使得整個表中此列的所有數據都被修改! -
刪除
DELETE FROM 表名 WHERE 條件
警告:如果忘記添加WHERE
字句來限定條件,將使得整個表中此列的所有數據都被刪除!
資料庫查詢語言(DQL)
-
單表查詢
SELECT 列名1 as 列1, 列名2 as 列2 FROM 表名 -- 查詢不重覆值 SELECT DISTINCT * FROM 表名 WHERE 約束條件
- where後的約束條件
>, <, <=, >=, =, <>
between n1 and n2
in (n1, n2, ...)
列名 like %xxx%
isnull
and
,or
,not
- where後的約束條件
-
多表查詢
-- 基礎多表查詢 SELECT * FROM 表1, 表2 WHERE 條件 -- 內聯 -- 左聯 LEFT JOIN 返回左邊所有的行 -- 右聯 RIGHT JOIN 返回右邊所有的行 SELECT column_name(s) FROM table_name1 INNER[LEFT, RIGHT] JOIN table_name2 ON table_name1.column_name=table_name2.column_name
-
排序查詢
SELECT * FROM 表名 WHERE 條件 ORDER BY 列名1 ASC|DESC, 列名2 ASC|DESC
- ASC(升序,即從小到大排序)
- DESC(降序,即從大到小排序)
-
分組查詢
select 列名 from 表名 group by 列名 having 約束條件(可以使用聚集函數)
-
where 和 having 的區別?
-
where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
-
where 後不可以跟聚合函數,having可以進行聚合函數的判斷。
-
-
-
分頁查詢
select * from 表名 limit n1, n2
-
嵌套查詢
SELECT * FROM 表名 WHERE 列名 = (SELECT 列名 FROM 表名 WHERE 條件)