MySQL約束和分類

約束

  • 定義
    爲了保證數據的一致性完整性,SQL規範以約束的方式來對錶數據進行額外的條件限制

  • 解釋

    • 約束是表級的強制規定(並不準確,因爲由列級約束的存在)
    • 規定約束
      • 建表時規定約束
      • 建表後,通過ALTER TABLE語句來規定
  • 約束的種類

    • 非空約束(NOT NULL)
    • 唯一約束 (UNIQUE)
    • 主鍵 (PRIMARY KEY)
    • 外鍵 (FOREIGN KEY)
    • DEFAULT
    • CHECK 檢查約束(MySQL不支持,不討論)
  • 按約束範圍分類

    • 列級約束
    • 表級約束

    非空約束,唯一約束,主鍵,外鍵都既可以是表級約束,有可以是列級約束

    DEFAULT屬於列級約束


  • 非空約束

    • 使用
    /* 建表時 */
    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("");
  • 唯一約束

    • 使用
    /* 建表時規定 列級約束 */
    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(頁號)兩個變量,那麼分頁查詢具有一下計算公式

      SELECT *
      FROM employees
      LIMIT (pageNum-1)*pageSize, pageSize;
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章