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.png
image.png
image.png

数据库关键字执行顺序

image.png

数据库去除重复记录DISTINCT

SELECT DISTINCT deptno FROM `t_emp`
image.png image.png

条件查询

image.png
image.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
上一篇下一篇

猜你喜欢

热点阅读