MySql约束和分页

MySQL系列总结————约束

约束

  • 定义
    为了保证数据的一致性完整性,SQL规范以约束的方式来对表数据进行额外的条件限制
  • 解释

    • 约束是表级的强制规定(并不准确,因为由列级约束的存在)
    • 规定约束
      • 建表时规定约束
      • 建表后,通过ALTER TABLE语句来规定
  • 约束的种类

    • 非空约束(NOT NULL)
    • 唯一约束 (UNIQUE)
    • 主键 (PRIMARY KEY)
    • 外键 (FOREIGN KEY)
    • DEFAULT
    • CHECK 检查约束(MySQL不支持,不讨论)
  • 按约束范围分类

    • 列级约束

    • 表级约束

      非空约束,唯一约束,主键,外键都既可以是表级约束,有可以是列级约束

      DEFAULT属于列级约束


  • 非空约束

    • 使用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      /* 建表时 */
      CREATE TABLE t_user(
      id INT PRIMARY KEY auto_increment,
      name VARCAHR(32) NOT NULL
      );

      /* 对现有表增加非空约束 */
      ALTER TABLE emp
      MODIFY sex VARCHAR(30) NOT NULL;

      /* 取消非空约束 */
      ALTER TABLE emp
      MODIFY sex VARCHAR(30) NULL;

      /* 取消非空约束,增加默认值 */
      ALTER TABLE emp
      MODIFY sex VARCHAR(30) DEFAULT '男' NULL;
    • 解释

      • 规定指定字段不能为NULL
      • ""属于空字符串,不属于空NULL,下属语句可以正确执行
        INSERT INTO t_user(name) VALUE("");
  • 唯一约束

    • 使用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      /* 建表时规定 列级约束 */
      CREATE TABLE t_user(
      id INT PRIMARY KEY auto_increment,
      name VARCHAR(32) NOT NULL,
      email VARCHAR(32) UNIQUE
      );

      /* 建表时规定 表级约束 */
      CREATE TABLE t_user(
      id INT PRIMARY KEY auto_increment,
      name VARCHAR(20),
      email VARCHAR(20),
      -- UNIQUE(name, email) /* 表级约束 */

      CONSTRAINT t_user_n_e UNIQUE(name, email) /* 定义别名,方便统一的管理 */
      );

      /* 删除唯一约束 */
      ALTER TABLE USER
      DROP INDEX uk name pwd;
    • 注意:

      • 指的是设置的两列不能同时重复
        ,相当于把几个表级约束组成一个字符串,要求该字串不能重复
  • PRIMARY KEY约束

  • FOREIGN KEY约束


分页(LIMIT)

  • 背景: 查询返回的记录太多,查看不方便,所有就通过分页的方式来方便数据的查看。

  • 实现分页的方法

    • LIMIT 9, 10;

    • LIMIT 10 OFFSET 9

      上述两条公式,实现的效果是一样的。都是从第9条后的一条数据起,查询10条数据

      若引入pageSize(页大小),pageNum(页号)两个变量,那么分页查询具有一下计算公式

      1
      2
      3
      SELECT *
      FROM employees
      LIMIT (pageNum-1)*pageSize, pageSize;