3.约束及修改数据表

(一) 约束

  1. 约束保证数据的完整性和一致性。

  2. 约束分为表级约束列级约束。

  3. 约束类型包括:

  • NOT NULL(非空约束)

  • PRIMARY KEY(主键约束)

  • UNIQUE KEY(唯一约束)

  • DEFAULT(默认约束)

  • FOREIGN KEY(外键约束)

FOREIGN KEY

外键约束的作用:

  • 保证数据一致性,完整性

  • 实现一对一或一对多关系

1.外键约束的要求

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

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

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

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

编辑修改数据表的默认存储引擎

MySQL配置文件

default-storage-engine=INNODB

搞清楚父表和子表

2.外键约束的参照操作

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

  2. SET NULL:从父表中删除或更新行,并设置子表中的外键列为NULL。若使用该项,必须保证子表列没有指定为NOT NULL

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

  4. NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

CASCADE:

==实际开发中很少使用物理外键约束,使用逻辑的外键约束==

3.表级约束与列级约束

对一个数据列建立的约束,称为列级约束。

对个数据列建立的约束,称为表级约束。

列级约束既可以在列定义时声明,也可以在列定义后声明。

表级约束,只能在列定义后声明。

==实际开发中列级约束用的较多,表级约束很少在用。==

(二)数据表的修改

数据表的修改无非就是列的删除和添加,约束的删除和添加等等。

1.添加删除列

添加单列

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

默认放在所有列后面

可以指定顺序

 

 

添加多列

ALTER TABLE tbl_name ADD [COLUMN](col_name column_name,..)

无法指定数据字段的顺序

删除列

ALTER TABLE tbl_name DROP [COLUMN] col_name

删除多列

2.添加约束

ALTER TABLE tbl_name ADD [CONSTEAINT [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 ALTER [COLOUMN] col_name {SET DEFAULT literal |DROP DEFAULT}

删除默认值

3.删除约束

删除主键约束

ALTER TABLE tbl_name DROP PRIMARY KEY

删除唯一约束

ALTER TABLE tbl_name DROP {INDEX|KEY} index_name

执行之前有3个约束

执行之后有两个约束

删除外键约束

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

删除外键约束必须要知道外键名称

SHOW CREATE TABLE users2;
ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;

4.修改列定义和更名数据表

修改列定义

ALTER TAble tbl_name MODIFY [COLUMN] col_name column_defination [FIRST|AFTER col_name]

ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;

ALTER TABLE users2 MODIFY id TINYINT UNSIGNED NOT NULL;

修改数据类型有时会引起数据表数据的丢失问题要慎用!

修改列名称

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

 

 

ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;

数据表更名

方法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] ...

 

_

 ALTER TABLE users2 RENAME users3;

RENAME TABLE users3 TO users2;

 

 

不要随意更改数据表和数据列的名字,存储过程禁用

总结

 

原文地址:https://www.cnblogs.com/kosinggit/p/10686435.html