1.回顾--约束的分类:

列级约束: 对一个数据列建立的约束;既可以在列定义时声明,也可以在列定以后声明

表级约束: 对多个数据列建立的约束;只能在列定义后声明 

按照功能可将约束分为: 非空约束、主键约束、唯一约束、外键约束、默认约束;

其中,按照参照操作数目的多少来划分,非空约束和默认约束不存在表级约束,剩余三种既可以存在表级约束也可以存在列级约束)

2. 修改数据表:

(1) 添加单列:ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name] ; first: 插入列在第一列, after * :插入列置于指定列的后方, 省略: 插入列位于所有列的最下面

修改mysql的unique约束 mysql如何修改约束_插入列

 

(2) 添加多列: 不能指定位置关系,只能在原来数据表列的下方。ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...)

 

(3)删除列: ALTER TABLE tbl_name DROP [COLUMN] col_name

修改mysql的unique约束 mysql如何修改约束_外键约束_02

 

 

(4) 添加、删除约束

a)添加主键约束(只能有一个): ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)

                           索引类型包括哈希索引和b-tree索引,默认为b-tree索引

修改mysql的unique约束 mysql如何修改约束_插入列_03

 

(b) 添加唯一约束(可以有多个): ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type]  (index_col_name,...)

修改mysql的unique约束 mysql如何修改约束_数据库_04

(c) 添加外键约束: ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition

修改mysql的unique约束 mysql如何修改约束_外键约束_05

 

(d) 添加或删除默认约束: ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

 

修改mysql的unique约束 mysql如何修改约束_插入列_06

 

 

(e) 删除主键约束: ALTER TABLE tbl_name DROP PRIMARY KEY

 

修改mysql的unique约束 mysql如何修改约束_插入列_07

 

(f) 删除唯一约束: ALTER TABLE tbl_name DROP {INDEX | KEY} index_name

删除的是约束,而并非字段

修改mysql的unique约束 mysql如何修改约束_插入列_08

修改mysql的unique约束 mysql如何修改约束_外键约束_09

修改mysql的unique约束 mysql如何修改约束_主键_10

 

(g) 删除外键约束: ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

修改mysql的unique约束 mysql如何修改约束_数据库_11

(删除FOREIGN KEY; 删除索引INDEX) 

 

(5) 修改列定义:(数据列的名字不存在问题,但是数据列的类型可能存在问题时,也有可能位置上有问题)

ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

 

修改mysql的unique约束 mysql如何修改约束_修改mysql的unique约束_12

修改mysql的unique约束 mysql如何修改约束_外键约束_13

 

!!!由大类型修改到小类型有可能造成数据的丢失!!! 例如将SMALLINT UNSIGNED(0~65535) 改成TINYINT UNSIGNED(0~255)

 

(6) 修改列名称:CHANGE除了可以修改列定义还可以修改列名称

ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name)

修改mysql的unique约束 mysql如何修改约束_主键_14

 

(7) 修改数据表:

(a)数据表更名: 

方法一: ALTER TABLE tbl_name RENAME [TO | AS] new_tbl_name

修改mysql的unique约束 mysql如何修改约束_主键_15

方法二: RENAME TABLE tbl_name TO new_tbl_name 

             [, tbl_name2 TO new_tbl_name2]...   (可以为多张数据表更名)

修改mysql的unique约束 mysql如何修改约束_主键_16

修改mysql的unique约束 mysql如何修改约束_修改mysql的unique约束_17

 

尽量少使用数据列的更名以及数据表的更名: 以后创建了索引或曾经使用过视图或存储过程、表名或列名被引用的情况下,表名列名被修改了可能导致某些视图或存储过程无法正常工作。

 

 

 

 

 


 

 

               


转载于: