约束
- 保证数据的完整性和一致性
- 约束分为表级约束和列级约束
- 约束类型包括:
NOT NULL
PAIMARY KEY
UNIQUE KEY
DEFAULT
FOREIGN KEY
外键约束(FOREIGN KEY):
作用:保证数据的一致性、完整性,实现一对一或一对多关系
要求:
1.父表和字表必须使用相同的存储引擎,禁止使用临时表
2.数据表的存储引擎只能是InnoDB
3.外键列和参照列必须有相似的数据类型,其中数字的长度和符号位必须相同,字符的长度可以不同
4.外键列和参照列必须创建索引,参照列没有索引,MySQL会自动创建索引
编辑数据表的默认存储引擎:
# my.ini(配置文件)
default-storage-engine=INNODB
外键约束的参照操作
1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL,如果使用该选项,必须保证子表列没有指定NOT NULL
3.RESTRICT:拒绝对父表的删除和更新操作
4.NO ACTION:标准的SQL关键字,在MySQL中和RESTRICT相同
表级和列级约束:
对一个数据列建立的约束,称为列级约束(常用)
对多个数据列建立的约束,称为表级约束
列级约束既可以在列定义时声明,也可以在列定义后声明,表级约束只能在列定以后声明
NOT NULL和DEFAULT只存在列级约束
修改数据表
添加单列:
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
添加多列:
ALTER TABLE tbl_name ADD [COLUMN]
(col_name column_definition,...)
区别:
1.添加单列的时候列不需要添加小括号
2.添加单列的时候可以指定位置关系,多列只能在原数据表的下方
删除列:
单列:
ALTER TABLE tbl_name DROP [COLUMN] col_name
多列:
ALTER TABLE tbl_name DROP [COLUMN], DROP [COLUMN],....
也可以同时删除一列并增加另一列,之间用逗号连接
添加约束
添加主键约束:
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,....)
添加唯一约束:
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,....)
添加外键约束:
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name]
添加或删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal}
删除主键约束:
ALTER TABLE tbl_name DROP PRIMARY KEY
因为每个数据表有且只有一个主键所以不用指定名称
删除唯一约束:
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
显示表中索引:
SHOW INDEXES FROM tbl_name
删除外键约束:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
修改列
修改列定义:
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FITST|AFTER col_name]
注:由大类型改到小类型有可能会导致数据的丢失
修改列名称(和定义):
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
修改数据表名称:
方法1:
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
方法2(可多张):
RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2]...