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)*每页条数),(每页条数)