數據庫的基本概念
什么是數據庫?
- 用於存儲和管理數據的倉庫
- 英文單詞為:DataBase,簡稱DB
數據庫的好處?
- 可以持久化存儲數據
- 方便存儲和管理數據
- 使用了統一的方式操作數據庫 -- SQL
常見的數據庫有哪些?

MySQL數據庫的介紹和安裝
MySQL數據庫介紹
- 小型的數據庫
- 開源免費(6版本之前免費)
- 所屬於Oracle公司
MySQL數據庫安裝
-
通過secureCRT工具連接Linux系統
-
上傳 mysql 的安裝包
alt + p -------> put d:/setup/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
- 解壓 mysql 的安裝包
mkdir mysql
tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C mysql/
- 安裝客戶端
cd mysql/
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps
- 安裝服務端
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
- 修改mysql默認字符集
vi /etc/my.cnf
添加如下內容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
-- 需要在最下方填寫
[client]
default-character-set=utf8
- 啟動mysql服務
service mysqld start
- 登錄mysql
mysql -u root -p 敲回車,輸入密碼
初始密碼查看:cat /var/log/mysqld.log
在root@localhost: 后面的就是初始密碼
- 修改mysql登錄密碼
set global validate_password_policy=0;
set global validate_password_length=1;
set password=password('密碼');
- 授予遠程連接權限
//授權
grant all privileges on *.* to 'root' @'%' identified by '密碼';
//刷新
flush privileges;
- 關閉Linux系統防火牆
systemctl stop firewalld.service
MySQL數據庫登錄
- sqlyog工具登錄mysql

SQL語句
數據庫、數據表、數據的關系介紹
- 數據庫
- 用於存儲和管理數據的倉庫
- 一個庫中可以包含多個數據表
- 數據表
- 數據庫最重要的組成部分之一
- 它由縱向的列和橫向的行組成(類似excel表格)
- 可以指定列名、數據類型、約束等
- 一個表中可以存儲多條數據
- 數據
- 想要永久化存儲的數據

SQL介紹
-
什么是
SQLStructured Query Language:結構化查詢語言- 其實就是定義了操作所有關系型數據庫的規則。每一種數據庫操作的方式可能會存在一些不一樣的地方,我們稱為“方言”。
-
SQL通用語法SQL語句可以單行或多行書寫,以分號結尾。- 可使用空格和縮進來增強語句的可讀性。
- MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
- 數據庫的注釋:
- 單行注釋:-- 注釋內容 #注釋內容(mysql特有)
- 多行注釋:/* 注釋內容 */
-
SQL分類DDL(Data Definition Language)數據定義語言- 用來定義數據庫對象:數據庫,表,列等。關鍵字:
create,drop,alter等
- 用來定義數據庫對象:數據庫,表,列等。關鍵字:
DML(Data Manipulation Language)數據操作語言- 用來對數據庫中表的數據進行增刪改。關鍵字:
insert,delete,update等
- 用來對數據庫中表的數據進行增刪改。關鍵字:
DQL(Data Query Language)數據查詢語言- 用來查詢數據庫中表的記錄(數據)。關鍵字:
select,where等
- 用來查詢數據庫中表的記錄(數據)。關鍵字:
DCL(Data Control Language)數據控制語言(了解)- 用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:
GRANT,REVOKE等
- 用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:

DDL-操作數據庫
-
R(Retrieve):查詢- 查詢所有數據庫
-- 查詢所有數據庫
SHOW DATABASES;
- 查詢某個數據庫的創建語句
-- 標准語法
SHOW CREATE DATABASE 數據庫名稱;
-- 查看mysql數據庫的創建格式
SHOW CREATE DATABASE mysql;
-
C(Create):創建- 創建數據庫
-- 標准語法
CREATE DATABASE 數據庫名稱;
-- 創建db1數據庫
CREATE DATABASE db1;
-- 創建一個已存在的數據庫會報錯
-- 錯誤代碼:1007 Can't create database 'db1'; database exists
CREATE DATABASE db1;
- 創建數據庫(判斷,如果不存在則創建)
-- 標准語法
CREATE DATABASE IF NOT EXISTS 數據庫名稱;
-- 創建數據庫db2(判斷,如果不存在則創建)
CREATE DATABASE IF NOT EXISTS db2;
- 創建數據庫、並指定字符集
-- 標准語法
CREATE DATABASE 數據庫名稱 CHARACTER SET 字符集名稱;
-- 創建數據庫db3、並指定字符集utf8
CREATE DATABASE db3 CHARACTER SET utf8;
-- 查看db3數據庫的字符集
SHOW CREATE DATABASE db3;
- 練習:創建db4數據庫、如果不存在則創建,指定字符集為gbk
-- 創建db4數據庫、如果不存在則創建,指定字符集為gbk
CREATE DATABASE IF NOT EXISTS db4 CHARACTER SET gbk;
-- 查看db4數據庫的字符集
SHOW CREATE DATABASE db4;
-
U(Update):修改- 修改數據庫的字符集
-- 標准語法
ALTER DATABASE 數據庫名稱 CHARACTER SET 字符集名稱;
-- 修改數據庫db4的字符集為utf8
ALTER DATABASE db4 CHARACTER SET utf8;
-- 查看db4數據庫的字符集
SHOW CREATE DATABASE db4;
-
D(Delete):刪除- 刪除數據庫
-- 標准語法
DROP DATABASE 數據庫名稱;
-- 刪除db1數據庫
DROP DATABASE db1;
-- 刪除一個不存在的數據庫會報錯
-- 錯誤代碼:1008 Can't drop database 'db1'; database doesn't exist
DROP DATABASE db1;
- 刪除數據庫(判斷,如果存在則刪除)
-- 標准語法
DROP DATABASE IF EXISTS 數據庫名稱;
-- 刪除數據庫db2,如果存在
DROP DATABASE IF EXISTS db2;
-
使用數據庫
- 查詢當前正在使用的數據庫名稱
-- 查詢當前正在使用的數據庫
SELECT DATABASE();
- 使用數據庫
-- 標准語法
USE 數據庫名稱;
-- 使用db4數據庫
USE db4;
DDL-操作數據表
-
R(Retrieve):查詢- 查詢數據庫中所有的數據表
-- 使用mysql數據庫
USE mysql;
-- 查詢庫中所有的表
SHOW TABLES;
- 查詢表結構
-- 標准語法
DESC 表名;
-- 查詢user表結構
DESC user;
- 查詢表字符集
-- 標准語法
SHOW TABLE STATUS FROM 庫名 LIKE '表名';
-- 查看mysql數據庫中user表字符集
SHOW TABLE STATUS FROM mysql LIKE 'user';
-
C(Create):創建- 標准語法
CREATE TABLE 表名(
列名1 數據類型1,
列名2 數據類型2,
....
列名n 數據類型n
);
-- 注意:最后一列,不需要加逗號
- 數據類型
1. int:整數類型
* age int
2. double:小數類型
* score double(5,2)
* price double
3. date:日期,只包含年月日 yyyy-MM-dd
4. datetime:日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:時間戳類型 包含年月日時分秒 yyyy-MM-dd HH:mm:ss
* 如果將來不給這個字段賦值,或賦值為null,則默認使用當前的系統時間,來自動賦值
6. varchar:字符串
* name varchar(20):姓名最大20個字符
* zhangsan 8個字符 張三 2個字符
- 創建數據表
-- 使用db3數據庫
USE db3;
-- 創建一個product商品表
CREATE TABLE product(
id INT, -- 商品編號
NAME VARCHAR(30), -- 商品名稱
price DOUBLE, -- 商品價格
stock INT, -- 商品庫存
insert_time DATE -- 上架時間
);
- 復制表
-- 標准語法
CREATE TABLE 表名 LIKE 被復制的表名;
-- 復制product表到product2表
CREATE TABLE product2 LIKE product;
-
U(Update):修改- 修改表名
-- 標准語法
ALTER TABLE 表名 RENAME TO 新的表名;
-- 修改product2表名為product3
ALTER TABLE product2 RENAME TO product3;
- 修改表的字符集
-- 標准語法
ALTER TABLE 表名 CHARACTER SET 字符集名稱;
-- 查看db3數據庫中product3數據表字符集
SHOW TABLE STATUS FROM db3 LIKE 'product3';
-- 修改product3數據表字符集為gbk
ALTER TABLE product3 CHARACTER SET gbk;
-- 查看db3數據庫中product3數據表字符集
SHOW TABLE STATUS FROM db3 LIKE 'product3';
- 添加一列
-- 標准語法
ALTER TABLE 表名 ADD 列名 數據類型;
-- 給product3表添加一列color
ALTER TABLE product3 ADD color VARCHAR(10);
- 修改列名稱和數據類型
-- 修改數據類型 標准語法
ALTER TABLE 表名 MODIFY 列名 新數據類型;
-- 將color數據類型修改為int
ALTER TABLE product3 MODIFY color INT;
-- 查看product3表詳細信息
DESC product3;
-- 修改列名和數據類型 標准語法
ALTER TABLE 表名 CHANGE 列名 新列名 新數據類型;
-- 將color修改為address,數據類型為varchar
ALTER TABLE product3 CHANGE color address VARCHAR(30);
-- 查看product3表詳細信息
DESC product3;
- 刪除列
-- 標准語法
ALTER TABLE 表名 DROP 列名;
-- 刪除address列
ALTER TABLE product3 DROP address;
-
D(Delete):刪除- 刪除數據表
-- 標准語法
DROP TABLE 表名;
-- 刪除product3表
DROP TABLE product3;
-- 刪除不存在的表,會報錯
-- 錯誤代碼:1051 Unknown table 'product3'DROP TABLE product3;
- 刪除數據表(判斷,如果存在則刪除)
-- 標准語法
DROP TABLE IF EXISTS 表名;
-- 刪除product3表,如果存在則刪除
DROP TABLE IF EXISTS product3;
DML-INSERT語句
-
新增表數據語法
- 新增格式1:給指定列添加數據
-- 標准語法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);
-- 向product表添加一條數據
INSERT INTO product(id,NAME,price,stock,insert_time) VALUES (1,'手機',1999,22,'2099-09-09');
-- 向product表添加指定列數據
INSERT INTO product (id,NAME,price) VALUES (2,'電腦',4999);
-- 查看表中所有數據
SELECT * FROM product;
- 新增格式2:默認給全部列添加數據
-- 標准語法
INSERT INTO 表名 VALUES (值1,值2,值3,...);
-- 默認給全部列添加數據
INSERT INTO product VALUES (3,'電視',2999,18,'2099-06-06');
-- 查看表中所有數據
SELECT * FROM product;
- 新增格式3:批量添加數據
-- 默認添加所有列數據 標准語法
INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);
-- 批量添加數據
INSERT INTO product VALUES (4,'冰箱',999,26,'2099-08-08'),(5,'洗衣機',1999,32,'2099-05-10');
-- 查看表中所有數據
SELECT * FROM product;-- 給指定列添加數據 標准語法INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
-- 批量添加指定列數據
INSERT INTO product (id,NAME,price) VALUES (6,'微波爐',499),(7,'電磁爐',899);
-- 查看表中所有數據
SELECT * FROM product;
-
注意事項
- 列名和值的數量以及數據類型要對應
- 除了數字類型,其他數據類型的數據都需要加引號(單引雙引都可以,推薦單引)
DML-UPDATE語句
- 修改表數據語法
-- 標准語法
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... [where 條件];
-- 修改手機的價格為3500
UPDATE product SET price=3500 WHERE NAME='手機';
-- 查看所有數據
SELECT * FROM product;
-- 修改電視的價格為1800、庫存為36
UPDATE product SET price=1800,stock=36 WHERE NAME='電視';
-- 修改電磁爐的庫存為10
UPDATE product SET stock=10 WHERE id=7;
- 注意事項
- 修改語句中必須加條件
- 如果不加條件,則將所有數據都修改
DML-DELETE語句
- 刪除表數據語法
-- 標准語法
DELETE FROM 表名 [WHERE 條件];
-- 刪除product表中的微波爐信息
DELETE FROM product WHERE NAME='微波爐';
-- 刪除product表中庫存為10的商品信息
DELETE FROM product WHERE stock=10;
-- 查看所有商品信息
SELECT * FROM product;
- 注意事項
- 刪除語句中必須加條件
- 如果不加條件,則將所有數據刪除
DQL-單表查詢
- 數據准備(直接復制執行即可)
-- 創建db1數據庫
CREATE DATABASE db1;
-- 使用db1數據庫
USE db1;
-- 創建數據表
CREATE TABLE product(
id INT,
-- 商品編號
NAME VARCHAR(20),
-- 商品名稱
price DOUBLE,
-- 商品價格
brand VARCHAR(10),
-- 商品品牌
stock INT,
-- 商品庫存
insert_time DATE
-- 添加時間);
-- 添加數據
INSERT INTO product VALUES
(1,'華為手機',3999,'華為',23,'2088-03-10'),
(2,'小米手機',2999,'小米',30,'2088-05-15'),
(3,'蘋果手機',5999,'蘋果',18,'2088-08-20'),
(4,'華為電腦',6999,'華為',14,'2088-06-16'),
(5,'小米電腦',4999,'小米',26,'2088-07-08'),
(6,'蘋果電腦',8999,'蘋果',15,'2088-10-25'),
(7,'聯想電腦',7999,'聯想',NULL,'2088-11-11');
- 查詢語法
select 字段列表
from 表名列表
where 條件列表
group by 分組字段
having 分組之后的條件
order by 排序
limit 分頁限定
- 查詢全部
-- 標准語法
SELECT * FROM 表名;
-- 查詢product表所有數據
SELECT * FROM product;
-
查詢部分
- 多個字段查詢
-- 標准語法
SELECT 列名1,列名2,... FROM 表名;
-- 查詢名稱、價格、品牌
SELECT NAME,price,brand FROM product;
- 去除重復查詢
- 注意:只有全部重復的才可以去除
-- 標准語法
SELECT DISTINCT 列名1,列名2,... FROM 表名;
-- 查詢品牌
SELECT brand FROM product;
-- 查詢品牌,去除重復
SELECT DISTINCT brand FROM product;
- 計算列的值(四則運算)
-- 標准語法
SELECT 列名1 運算符(+ - * /) 列名2 FROM 表名;/* 計算列的值 標准語法: SELECT 列名1 運算符(+ - * /) 列名2 FROM 表名; 如果某一列為null,可以進行替換 ifnull(表達式1,表達式2) 表達式1:想替換的列 表達式2:想替換的值*/
-- 查詢商品名稱和庫存,庫存數量在原有基礎上加10
SELECT NAME,stock+10 FROM product;
-- 查詢商品名稱和庫存,庫存數量在原有基礎上加10。進行null值判斷
SELECT NAME,IFNULL(stock,0)+10 FROM product;
- 起別名
-- 標准語法
SELECT 列名1,列名2,... AS 別名 FROM 表名;
-- 查詢商品名稱和庫存,庫存數量在原有基礎上加10。進行null值判斷。起別名為getSumSELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;
SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;
-
條件查詢
- 條件分類
符號 功能 > 大於 < 小於 >= 大於等於 <= 小於等於 = 等於 <> 或 != 不等於 BETWEEN ... AND ... 在某個范圍之內(都包含) IN(...) 多選一 LIKE 占位符 模糊查詢 _單個任意字符 %多個任意字符 IS NULL 是NULL IS NOT NULL 不是NULL AND 或 && 並且 OR 或 || 或者 NOT 或 ! 非,不是 - 條件查詢語法
-- 標准語法
SELECT 列名 FROM 表名 WHERE 條件;
-- 查詢庫存大於20的商品信息
SELECT * FROM product WHERE stock > 20;
-- 查詢品牌為華為的商品信息
SELECT * FROM product WHERE brand='華為';
-- 查詢金額在4000 ~ 6000之間的商品信息
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;
-- 查詢庫存為14、30、23的商品信息
SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
SELECT * FROM product WHERE stock IN(14,30,23);
-- 查詢庫存為null的商品信息
SELECT * FROM product WHERE stock IS NULL;
-- 查詢庫存不為null的商品信息
SELECT * FROM product WHERE stock IS NOT NULL;
-- 查詢名稱以小米為開頭的商品信息
SELECT * FROM product WHERE NAME LIKE '小米%';
-- 查詢名稱第二個字是為的商品信息
SELECT * FROM product WHERE NAME LIKE '_為%';
-- 查詢名稱為四個字符的商品信息
SELECT * FROM product WHERE NAME LIKE '____';
-- 查詢名稱中包含電腦的商品信息
SELECT * FROM product WHERE NAME LIKE '%電腦%';
-
聚合函數
- 將一列數據作為一個整體,進行縱向的計算
- 聚合函數分類
函數名 功能 count(列名) 統計數量(一般選用不為null的列) max(列名) 最大值 min(列名) 最小值 sum(列名) 求和 avg(列名) 平均值 - 聚合函數語法
-- 標准語法
SELECT 函數名(列名) FROM 表名 [WHERE 條件];
-- 計算product表中總記錄條數
SELECT COUNT(*) FROM product;
-- 獲取最高價格
SELECT MAX(price) FROM product;
-- 獲取最高價格的商品名稱
SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);
-- 獲取最低庫存
SELECT MIN(stock) FROM product;
-- 獲取最低庫存的商品名稱
SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);
-- 獲取總庫存數量
SELECT SUM(stock) FROM product;
-- 獲取品牌為蘋果的總庫存數量
SELECT SUM(stock) FROM product WHERE brand='蘋果';
-- 獲取品牌為小米的平均商品價格
SELECT AVG(price) FROM product WHERE brand='小米';
-
排序查詢
- 排序分類
- 注意:多個排序條件,當前邊的條件值一樣時,才會判斷第二條件
關鍵詞 功能 ORDER BY 列名1 排序方式1,列名2 排序方式2 對指定列排序,ASC升序(默認的) DESC降序 - 排序語法
- 排序分類
-- 標准語法
SELECT 列名 FROM 表名 [WHERE 條件] ORDER BY 列名1 排序方式1,列名2 排序方式2;
-- 按照庫存升序排序
SELECT * FROM product ORDER BY stock ASC;
-- 查詢名稱中包含手機的商品信息。按照金額降序排序
SELECT * FROM product WHERE NAME LIKE '%手機%' ORDER BY price DESC;
-- 按照金額升序排序,如果金額相同,按照庫存降序排列
SELECT * FROM product ORDER BY price ASC,stock DESC;
- 分組查詢
-- 標准語法
SELECT 列名 FROM 表名 [WHERE 條件] GROUP BY 分組列名 [HAVING 分組后條件過濾] [ORDER BY 排序列名 排序方式];
-- 按照品牌分組,獲取每組商品的總金額
SELECT brand,SUM(price) FROM product GROUP BY brand;
-- 對金額大於4000元的商品,按照品牌分組,獲取每組商品的總金額
SELECT brand,SUM(price) FROM product WHERE price > 4000 GROUP BY brand;
-- 對金額大於4000元的商品,按照品牌分組,獲取每組商品的總金額,只顯示總金額大於7000元的
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000;
-- 對金額大於4000元的商品,按照品牌分組,獲取每組商品的總金額,只顯示總金額大於7000元的、並按照總金額的降序排列
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000 ORDER BY getSum DESC;
- 分頁查詢
-- 標准語法
SELECT 列名 FROM 表名 [WHERE 條件] GROUP BY 分組列名 [HAVING 分組后條件過濾] [ORDER BY 排序列名 排序方式] LIMIT 開始索引,查詢條數;
-- 公式:開始索引 = (當前頁碼-1) * 每頁顯示的條數
-- 每頁顯示2條數據
SELECT * FROM product LIMIT 0,2;
-- 第一頁 開始索引=(1-1) * 2
SELECT * FROM product LIMIT 2,2;
-- 第二頁 開始索引=(2-1) * 2
SELECT * FROM product LIMIT 4,2;
-- 第三頁 開始索引=(3-1) * 2
SELECT * FROM product LIMIT 6,2;
-- 第四頁 開始索引=(4-1) * 2
- 分頁查詢圖解

約束
約束的概念和分類
- 約束的概念
- 對表中的數據進行限定,保證數據的正確性、有效性、完整性!
- 約束的分類
| 約束 | 說明 |
|---|---|
| PRIMARY KEY | 主鍵約束 |
| PRIMARY KEY AUTO_INCREMENT | 主鍵、自動增長 |
| UNIQUE | 唯一約束 |
| NOT NULL | 非空約束 |
| FOREIGN KEY | 外鍵約束 |
| FOREIGN KEY ON UPDATE CASCADE | 外鍵級聯更新 |
| FOREIGN KEY ON DELETE CASCADE | 外鍵級聯刪除 |
主鍵約束
- 主鍵約束特點
- 主鍵約束包含:非空和唯一兩個功能
- 一張表只能有一個列作為主鍵
- 主鍵一般用於表中數據的唯一標識
- 建表時添加主鍵約束
-- 標准語法
CREATE TABLE 表名( 列名 數據類型 PRIMARY KEY, 列名 數據類型, ...);
-- 創建student表
CREATE TABLE student( id INT PRIMARY KEY -- 給id添加主鍵約束);
-- 添加數據
INSERT INTO student VALUES (1),(2);
-- 主鍵默認唯一,添加重復數據,會報錯
INSERT INTO student VALUES (2);
-- 主鍵默認非空,不能添加null的數據
INSERT INTO student VALUES (NULL);
-- 查詢student表
SELECT * FROM student;
-- 查詢student表詳細
DESC student;
- 刪除主鍵
-- 標准語法
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 刪除主鍵
ALTER TABLE student DROP PRIMARY KEY;
- 建表后單獨添加主鍵
-- 標准語法
ALTER TABLE 表名 MODIFY 列名 數據類型 PRIMARY KEY;
-- 添加主鍵
ALTER TABLE student MODIFY id INT PRIMARY KEY;
主鍵自動增長約束
- 建表時添加主鍵自增約束
-- 標准語法
CREATE TABLE 表名( 列名 數據類型 PRIMARY KEY AUTO_INCREMENT, 列名 數據類型, ...);
-- 創建student2表
CREATE TABLE student2( id INT PRIMARY KEY AUTO_INCREMENT -- 給id添加主鍵自增約束);
-- 添加數據
INSERT INTO student2 VALUES (1),(2);
-- 添加null值,會自動增長
INSERT INTO student2 VALUES (NULL),(NULL);
-- 查詢student2表
SELECT * FROM student2;
-- student2表詳細
DESC student2;
- 刪除自動增長
-- 標准語法
ALTER TABLE 表名 MODIFY 列名 數據類型;
-- 刪除自動增長
ALTER TABLE student2 MODIFY id INT;
- 建表后單獨添加自動增長
-- 標准語法
ALTER TABLE 表名 MODIFY 列名 數據類型 AUTO_INCREMENT;
-- 添加自動增長
ALTER TABLE student2 MODIFY id INT AUTO_INCREMENT;
唯一約束
- 建表時添加唯一約束
-- 標准語法
CREATE TABLE 表名( 列名 數據類型 UNIQUE, 列名 數據類型, ...);
-- 創建student3表
CREATE TABLE student3( id INT PRIMARY KEY AUTO_INCREMENT, tel VARCHAR(20) UNIQUE -- 給tel列添加唯一約束);
-- 添加數據
INSERT INTO student3 VALUES (NULL,'18888888888'),(NULL,'18666666666');
-- 添加重復數據,會報錯
INSERT INTO student3 VALUES (NULL,'18666666666');
-- 查詢student3數據表
SELECT * FROM student3;-- student3表詳細DESC student3;
- 刪除唯一約束
-- 標准語法
ALTER TABLE 表名 DROP INDEX 列名;
-- 刪除唯一約束
ALTER TABLE student3 DROP INDEX tel;
- 建表后單獨添加唯一約束
-- 標准語法
ALTER TABLE 表名 MODIFY 列名 數據類型 UNIQUE;
-- 添加唯一約束
ALTER TABLE student3 MODIFY tel VARCHAR(20) UNIQUE;
非空約束
- 建表時添加非空約束
-- 標准語法
CREATE TABLE 表名( 列名 數據類型 NOT NULL, 列名 數據類型, ...);
-- 創建student4表
CREATE TABLE student4( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL -- 給name添加非空約束);
-- 添加數據
INSERT INTO student4 VALUES (NULL,'張三'),(NULL,'李四');
-- 添加null值,會報錯
INSERT INTO student4 VALUES (NULL,NULL);
- 刪除非空約束
-- 標准語法
ALTER TABLE 表名 MODIFY 列名 數據類型;
-- 刪除非空約束
ALTER TABLE student4 MODIFY NAME VARCHAR(20);
- 建表后單獨添加非空約束
-- 標准語法ALTER TABLE 表名 MODIFY 列名 數據類型 NOT NULL;
-- 添加非空約束
ALTER TABLE student4 MODIFY NAME VARCHAR(20) NOT NULL;
MySQL數據類型
各數據類型及字節長度一覽表:
| 數據類型 | 字節長度 | 范圍或用法 |
|---|---|---|
| Bit | 1 | 無符號[0,255],有符號[-128,127],天緣博客備注:BIT和BOOL布爾型都占用1字節 |
| TinyInt | 1 | 整數[0,255] |
| SmallInt | 2 | 無符號[0,65535],有符號[-32768,32767] |
| MediumInt | 3 | 無符號[0,2^24-1],有符號[(-2)^23,2^23-1] |
| Int | 4 | 無符號[0,2^32-1],有符號[(-2)^31,2^31-1] |
| BigInt | 8 | 無符號[0,2^64-1],有符號[(-2)^63 ,2^63 -1] |
| Float(M,D) | 4 | 單精度浮點數。天緣博客提醒這里的D是精度,如果D<=24則為默認的FLOAT,如果D>24則會自動被轉換為DOUBLE型。 |
| Double(M,D) | 8 | 雙精度浮點。 |
| Decimal(M,D) | M+1或M+2 | 未打包的浮點數,用法類似於FLOAT和DOUBLE,天緣博客提醒您如果在ASP中使用到Decimal數據類型,直接從數據庫讀出來的Decimal可能需要先轉換成Float或Double類型后再進行運算。 |
| Date | 3 | 以YYYY-MM-DD的格式顯示,比如:2009-07-19 |
| Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式顯示,比如:2009-07-19 11:22:30 |
| TimeStamp | 4 | 以YYYY-MM-DD的格式顯示,比如:2009-07-19 |
| Time | 3 | 以HH:MM:SS的格式顯示。比如:11:22:30 |
| Year | 1 | 以YYYY的格式顯示。比如:2009 |
| Char(M) | M | 定長字符串。 |
| VarChar(M) | M | 變長字符串,要求M<=255 |
| Binary(M) | M | 類似Char的二進制存儲,特點是插入定長不足補0 |
| VarBinary(M) | M | 類似VarChar的變長二進制存儲,特點是定長不補0 |
| Tiny Text | Max:255 | 大小寫不敏感 |
| Text | Max:64K | 大小寫不敏感 |
| Medium Text | Max:16M | 大小寫不敏感 |
| Long Text | Max:4G | 大小寫不敏感 |
| TinyBlob | Max:255 | 大小寫敏感 |
| Blob | Max:64K | 大小寫敏感 |
| MediumBlob | Max:16M | 大小寫敏感 |
| LongBlob | Max:4G | 大小寫敏感 |
| Enum | 1或2 | 最大可達65535個不同的枚舉值 |
| Set | 可達8 | 最大可達64個不同的值 |
| Geometry | ||
| Point | ||
| LineString | ||
| Polygon | ||
| MultiPoint | ||
| MultiLineString | ||
| MultiPolygon | ||
| GeometryCollection | ||
