MySQL数据库学习——约束与数据表修改

时间:2022-09-08 14:44:09

一、约束:保证数据的完整性和一致性,约束分为列级约束和表级约束

约束种类:not null(非空约束)primary key(主键约束)uniquekey(唯一约束)default(默认约束)foreign key(外键约束)

二、外键约束:用于保证数据的一致性,完整性,实现一对一或一对多关系。

三、外键约束的要求:

1.     父表和子表必须使用相同的存储引擎,而且禁止使用临时表。

2.     数据表的存储引擎只能为InnoDB

3.     外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。

4.     外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

四、外键约束的参照操作

1.     Cascade:从父表删除或更新且自动删除或更新子表中匹配的行

2.     Set null :从父表删除或更新行,并设置子表中的外键列为null。如果使用该选项,必须保证子表列没有指定not null

3.     Restrict:拒绝对父表的删除或更新操作。

4.     No action :标准SQL的关键字,在MySQL中于restrict相同。

五、数据表修改

1.     添加列(可以指定添加列的位置)

Alter table表名add [column]列名数据类型 约束条件 [first | after列名]

2.     添加多列(只能添加在列的最后)

Alter table表名add [column] (列名、数据类型,约束条件,…)

3.     删除列

Alter table表名drop [column]列名,drop [column]列名….

4.     添加主键约束

Alter table表名add [constraint [symbol]] primary key [index_type](index_col_name,..);

5.     添加唯一约束

Alter table表名add [constraint [symbol]]unique [index | key] [index_name] [index_type] (index_col_name,..);

6.     添加外键约束

Alter table表名add [constraint [symbol]]foreign key [index_name] (index_col_name,..) reference_definition;

例:alter table users2 add foreign key (pid) referencesprovinces (id);

7.     添加/删除默认约束

Alter table表名alter [columns]列名{set default | drop default};

8.     删除约束

删除主键约束

Alter table表名drop primary key

删除唯一约束

Alter table表名drop {index | key} index_name;

删除外键约束

Alter table表名drop foreign key fk_symbol

9.     修改列定义

Alter table表名modify [column]列名数据类型 约束条件[first | after列名]

10.  修改列名称

Alter table表名change [column]旧列名新列名 列定义[first | after列名]

11.  修改数据表名

方法一:alter table表名rename [TO | AS]新表名

方法二:rename table表名to新表名 [,表名to新表名]