1、約束 :爲了保證數據的一致性和完整性,SQL規範以約束的方式對錶數據進行額外的條件限制
NOT NULL 非空約束,規定某個字段不能爲空
UNIQUE 唯一約束,規定某個字段在整個表中是唯一的
PRIMARY KEY 主鍵(非空且唯一)
FOREIGN KEY 外鍵
CHECK 檢查約束
DEFAULT 默認值
約束分類 :列級約束 vs 表級約束
約束的填加的方式 :
1.創建表的時候
2.修改表的時候
【1】not null 非空約束,規定某個字段不能爲空
CREATE TABLE emp(
emp_id INT NOT NULL, -- 列級約束
emp_name VARCHAR(20)
)
DESC emp
SELECT * FROM emp
INSERT INTO emp(emp_id,emp_name) VALUES(1,'aaaa')
INSERT INTO emp(emp_id) VALUES(2)
DELETE FROM emp
【2】修改表的時候添加約束
ALTER TABLE emp
MODIFY emp_name VARCHAR(20) NOT NULL
【3】UNIQUE 唯一約束,規定某個字段在整個表中是唯一的
CREATE TABLE emp2(
emp_id INT UNIQUE,
emp_name VARCHAR(20)
)
DESC emp2
SELECT * FROM emp2
INSERT INTO emp2(emp_id,emp_name) VALUES(3,'aaaa')
INSERT INTO emp2(emp_id,emp_name) VALUES(4,'aaaa')
CREATE TABLE emp3(
emp_name VARCHAR(20),
emp_password VARCHAR(20)
)
DROP TABLE emp3
【4】 將用戶名和密碼看成是一組,組和組 之間不能相同
ALTER TABLE emp3
ADD UNIQUE (emp_name,emp_password)
【5】添加約束: uk_name_pwd索引
ALTER TABLE emp3
ADD CONSTRAINT uk_name_pwd UNIQUE (emp_name,emp_password);
【6】刪除約束:刪除約束
ALTER TABLE emp3
DROP INDEX uk_name_pwd;
DESC emp3
SELECT * FROM emp3
INSERT INTO emp3(emp_name,emp_password)VALUES('aaaa','12234')
INSERT INTO emp3(emp_name,emp_password)VALUES('bbbb','12344')
【7】 PRIMARY KEY 主鍵(非空且唯一)
一個表中只能有一個主鍵 (可以將多個列進行組合成primary key)
CREATE TABLE emp4(
emp_id INT PRIMARY KEY,
emp_name VARCHAR(20)
)
INSERT INTO emp4(emp_id,emp_name)VALUES(2,'aaa')
CREATE TABLE emp5(
emp_id INT,
emp_name VARCHAR(20),
【8】 表級約束
CONSTRAINT rn_emp_id PRIMARY KEY(emp_id,emp_name)
)
DESC emp5
【9】FOREIGN KEY 外鍵 外鍵約束
員工表
注意 :1.deps叫做主表,emps叫做從表
2.先創建主表,再創建從表
3.外鍵關聯的那個列必須是主鍵
4.插入數據,應該先插入到主表,再插入到從表
CREATE TABLE emps(
emps_id INT PRIMARY KEY,
emps_name VARCHAR(20),
deps_id INT,
FOREIGN KEY(deps_id) REFERENCES deps(deps_id)
)
-- 部門表
CREATE TABLE deps(
deps_id INT PRIMARY KEY,
deps_name VARCHAR(20)
)
DROP TABLE deps
DESC deps
DESC emps
【10】 插入數據
INSERT INTO deps VALUES(10,'hr')
INSERT INTO emps VALUES(1,'aa',10)
【11】 查看錶的索引
SHOW INDEX FROM emp3
【12】 check : 檢查約束
-- mysql無效,orcal有效
CREATE TABLE temp(
id INT AUTO_INCREMENT,
NAME VARCHAR(20),
age INT CHECK(age>20),
PRIMARY KEY(id)
);
INSERT INTO temp VALUES(1,'aa',10)
SELECT * FROM temp
【13】 defult : 可以設置默認值
CREATE TABLE temp2(
id INT AUTO_INCREMENT,
NAME VARCHAR(20),
age INT DEFAULT 20,
PRIMARY KEY(id)
);
INSERT INTO temp2(id,NAME) VALUES(1,'aa')
SELECT * FROM temp2
【14】 AUTO_INCREMENT : 自增長
CREATE TABLE n(
n_id INT PRIMARY KEY AUTO_INCREMENT,
n_name VARCHAR(20)
)
INSERT INTO n(n_name) VALUES('aa')
DELETE FROM n
SELECT * FROM n
【15】 limit 分頁 :
SELECT * FROM employees LIMIT 0,20 -- 0從哪一條數據開始, 20偏移量
(當前頁數-1)*每頁條數,每頁條數
SELECT * FROM employees LIMIT ((當前頁數-1)*每頁條數),(每頁條數)