標籤:
約束:
1. 約束保證資料的完整性和一致性;
2. 約束分為表級約束和資料行層級條件約束;
3. 約束類型包括:NOT NULL, PRIMARY KEY, UNIQUE KEY, DEFAULT, FOREIGN KEY
- 外鍵約束
- 父表和子表必須使用相同的儲存引擎,而且禁止使用暫存資料表;
- 資料庫的儲存引擎只能為InnoDB;
- 外鍵列和參照列必須具有相似的資料類型。其中數位長度或是否有符號位必須相同;而字元的長度則可以不同;
- 外鍵列和參照列必須建立索引。如果外鍵列不存在索引的話,MySQL將自動建立索引。
- 外鍵約束的參照操作
- CASCADE:從父表刪除或更新且自動刪除或更新子表中匹配的行;
- SET NULL:從父表刪除或更新行,並設定子表中的外鍵列為NULL。如果使用該選項,必須保證子表列沒有指定NOT NULL;
- RESTRICT:拒絕對父表的刪除或更新操作;
- NO ACTION:標準的SQL關鍵字。
CREATE TABLE USERS (id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREAMENT,username VARCHAR(10) NOT NULL,pid SMALLINT UNSIGNED,FOREIGN KEY(pid) REFERENCES provinces (id) ON DELETE CASCADE);
View Code
- 資料行層級條件約束
- 對一個資料列建立的約束
- 資料行層級條件約束可以在列定義時聲明,也可以在列定義後聲明;
- NOT NULL, DEFAULT只存在資料行層級條件約束;
- 表級約束
- 對多個資料列建立的約束;
- 表級約束只能在列定義後聲明;
4. 修改資料表
- 添加單列
ALTER TABLE tbl_name ADD [COLUMN] col_namecolumn_definition [FIRST | AFTER col_name]
ALTER TABLE users ADD age SMALLINT UNSIGNED DEFAULT 10 AFTER username;
- 添加多列
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition, ...)
- 刪除一列
ALTER TABLE tbl_name DROP [COLUMN] col_name
- 添加主鍵約束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]]PRIMARY KEY [index_type] (index_col_name, ...)
- 刪除主鍵約束
ALTER TABLE tbl_name DROP PRIMARY KEY;
//刪除唯一約束ALTER TABLE tbl_name DROP {INDEX | KEY} index_name//刪除外鍵約束ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol(通過SHOW CREATE TABLE tbl_name查看fk_symbol)
- 修改列定義和更改表名稱
//修改列定義ALTER TABLE tbl_name MODIFY [COLUMN] col_namecolumn_definition [FIRST | AFTER col_name]//修改列名稱ALTER TABLE tbl_name CHANGE [COLUMN] old_col_namenew_col_name column_definition [FIRST|AFTER col_name]//修改資料表的名稱//法一:ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name//法二:RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2]...
MySQL(三) —— 約束以及修改資料表