美文网首页
mysql范式和约束和单表查询

mysql范式和约束和单表查询

作者: 俗人彭jin | 来源:发表于2022-01-27 18:25 被阅读0次

    关系型数据库的范式

    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

    相关文章

      网友评论

          本文标题:mysql范式和约束和单表查询

          本文链接:https://www.haomeiwen.com/subject/xilahrtx.html