mysql范式和约束和单表查询
2022-01-27 本文已影响0人
俗人彭jin
关系型数据库的范式
1.唯一性
2.原子性
3.关联性
字段约束
image.png-- 一. 主键约束——PRIMARY KEY
-- 二. 外键约束——FOREIGN KEY
-- 三. 唯一约束——UNIQUE KEY
-- 四. 非空约束 NOT NULL
-- CREATE TABLE t_teacher(
-- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-- name VARCHAR(20) NOT NULL,
-- tel CHAR(11) NOT NULL UNIQUE,
-- married BOOLEAN NOT NULL DEFAULT FALSE
-- );
-- CREATE TABLE t_dept(
-- deptno INT UNSIGNED NOT NULL PRIMARY KEY,
-- -- deptno INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-- dname VARCHAR(20) NOT NULL UNIQUE,
-- tel CHAR(11) NOT NULL UNIQUE
-- );
-- CREATE TABLE t_emp(
-- empno INT UNSIGNED NOT NULL PRIMARY KEY,
-- empame VARCHAR(20) NOT NULL,
-- sex ENUM("男","女") NOT NULL,
-- tel CHAR(11) NOT NULL UNIQUE,
-- deptno INT UNSIGNED NOT NULL,
-- hiredate DATE NOT NULL,
#外键约束
-- FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
-- );
数据库索引
#数据库索引
-- CREATE TABLE t_message (
-- id INT UNSIGNED NOT NULL PRIMARY KEY,
-- content VARCHAR(200) NOT NULL,
-- type ENUM("公告","通报","个人通知") NOT NULL,
-- create_time TIMESTAMP NOT NULL,
-- # 索引
-- INDEX idx_type(type)
-- );
# 删除数据表里面的索引
-- DROP INDEX idx_type ON t_message;
# 创建数据表里面的索引
-- CREATE INDEX idx_type ON t_message(type);
# 在表里面直接创建索引
ALTER TABLE t_message ADD INDEX idx_type(type);
SHOW INDEX FROM t_message;
image.png
数据查询和分页
image.png#LIMIT分页(0,20)从下标0的地方,取后面20条
SELECT * FROM `t_emp` LIMIT 0,2;
数据库排序
image.pngimage.png
image.png
数据库关键字执行顺序
image.png数据库去除重复记录DISTINCT
SELECT DISTINCT deptno FROM `t_emp`
image.png
image.png
条件查询
image.pngimage.png
image.png
# t_emp 表里面查找部门为10和20的年收入>30000的并且已经入职6年以上的员工
-- SELECT deptno ,empame ,sal,hiredate FROM `t_emp` WHERE (deptno=10 OR deptno=20) AND sal*12 > 30000 AND DATEDIFF(NOW(),hiredate)/365 >=6
#t_emp 表里面查找部门包含10,20的年收入>30000的并且入职年份大于2010-01-01的员工
SELECT deptno ,empame ,sal,hiredate FROM `t_emp` WHERE deptno IN(10,20) AND sal*12 > 30000 AND hiredate > "2010-01-01"
image.png
#t_emp 表里面查找部门工资2000-5000之间,并且empame字段包含张的数据
-- SELECT deptno ,empame ,sal,hiredate FROM `t_emp` WHERE sal BETWEEN 2000 AND 5000 AND empame LIKE "%张%"
#t_emp 表里面查找部门工资2000-5000之间,并且empame正则REGEXP
SELECT deptno ,empame ,sal,hiredate FROM `t_emp` WHERE sal BETWEEN 2000 AND 5000 AND empame LIKE REGEXP "[azAZ]{4}"
image.png