数据库中约束的创建是否可以在创建表之后,如果是的适创建约克创需要注意什?

数据库中约束的创建是否可以在创建表之后,如果是的适创建约克创需要注意什?,第1张

是可以在创建表之后添加约束,但是需要注意以下几点:

1. 添加约束必须要保证表中没有数据,否则可能会导致数据不符合约束条件而无法添加或者修改数据。

2. 约束的添加可能需要修改表结构,比如添加对外键的约束可能需要对已有表添加外键列,所以需要谨慎 *** 作。

3. 添加约束可能会影响表的性能,特别是对大型表的 *** 作,所以需要根据具体情况进行评估和优化。

4. 在添加约束之前,需要对表的数据进行审核和清洗,以确保数据的完整性和正确性。

对表中的数据进行限定,保证数据的正确性、有效性和完整性。

分类:

①、主键约束:primary key

②、非空约束:not null

③、唯一约束:unique

④、外键约束:foreign key

一、非空约束:not null,某一列的值不能为null

创建表时添加约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20) NOT NULL -- name为非空

)

1

2

3

4

1

2

3

4

创建表完后,添加非空约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20)

)

ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL

1

2

3

4

5

6

1

2

3

4

5

6

在这里插入图片描述

删除name的非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20)

1

1

在这里插入图片描述

二、唯一约束:unique,某一列的值不能重复

注意:唯一约束可以有NULL值,但是只能有一条记录为null

在创建表时,添加唯一约束

CREATE TABLE stu(

id INT,

phone_number VARCHAR(20) UNIQUE -- 手机号

)

1

2

3

4

1

2

3

4

在这里插入图片描述

删除唯一约束

ALTER TABLE stu DROP INDEX phone_number

1

1

在这里插入图片描述

在表创建完后,添加唯一约束

ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE

1

1

三、主键约束:primary key。

注意:

①、含义:非空且唯一

②、一张表只能有一个字段为主键

③、主键就是表中记录的唯一标识

在创建表时,添加主键约束

create table stu(

id int primary key,-- 给id添加主键约束

name varchar(20)

)

1

2

3

4

1

2

3

4

在这里插入图片描述

删除主键

-- 错误 alter table stu modify id int

ALTER TABLE stu DROP PRIMARY KEY

1

2

1

2

在这里插入图片描述

创建完表后,添加主键

create table stu(

id int,

name varchar(20)

)

ALTER TABLE stu MODIFY id INT PRIMARY KEY

1

2

3

4

5

6

1

2

3

4

5

6

自动增长:

①、概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

②、在创建表时,添加主键约束,并且完成主键自增长

create table stu(

id int primary key auto_increment,-- 给id添加主键约束

name varchar(20)

)

1

2

3

4

1

2

3

4

在这里插入图片描述

③、 删除自动增长

ALTER TABLE stu MODIFY id INT

1

1

在这里插入图片描述

④、添加自动增长

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT

1

1

四、外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。

CREATE TABLE emp(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(30),

age INT,

dep_name VARCHAR(30),

dep_location VARCHAR(30)

)

INSERT INTO emp VALUES (1, '张三', 20, '研发部', '广州')

INSERT INTO emp VALUES (2, '李四', 21, '研发部', '广州')

INSERT INTO emp VALUES (3, '王五', 20, '研发部', '广州')

INSERT INTO emp VALUES (4, '老王', 20, '销售部', '深圳')

INSERT INTO emp VALUES (5, '大王', 22, '销售部', '深圳')

INSERT INTO emp VALUES (6, '小王', 18, '销售部', '深圳')

1

2

3

4

5

6

7

8

9

10

11

12

13

14

1

2

3

4

5

6

7

8

9

10

11

12

13

14

在这里插入图片描述

通过上面的表格,我们可以知道,表中的信息是员工在不同的部门里面,于是我们可以将上面的一张表分开,分成两张表格。一张部门的表,一张员工的表。

-- 创建部门表(id,dep_name,dep_location)

CREATE TABLE department(

id INT PRIMARY KEY AUTO_INCREMENT,

dep_name VARCHAR(20),

dep_location VARCHAR(20)

)

-- 创建员工表(id,name,age,dep_id)

CREATE TABLE employee(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20),

age INT,

dep_id INT -- 外键对应主表的主键

)

-- 添加两个部门

INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL ,'销售部', '深圳')

-- 添加员工信息

INSERT INTO employee (NAME,age,dep_id) VALUES('张三',20,1)

INSERT INTO employee (NAME,age,dep_id) VALUES('李四',21,1)

INSERT INTO employee (NAME,age,dep_id) VALUES('王五',20,1)

INSERT INTO employee (NAME,age,dep_id) VALUES('老王',20,2)

INSERT INTO employee (NAME,age,dep_id) VALUES('大王',22,2)

INSERT INTO employee (NAME,age,dep_id) VALUES('小王',18,2)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

在这里插入图片描述

倘若现在我们把删除department表里面的数据,是可以删除的;但是这不符合实际情况。因为我们此时虽然删除掉了deparment表里的数据,但是employee表里面还是存在部门的信息。只有当部门里面的员工全部开除后,我们才可以删除部门表。

1.添加外键

在创建表时,可以添加外键:

create table 表名(

....

外键列

constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)

)

1

2

3

4

5

1

2

3

4

5

-- 创建员工表(id,name,age,dep_id)

CREATE TABLE employee(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20),

age INT,

dep_id INT, -- 外键对应主表的主键

CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)

)

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称

1

1

创建表之后,添加外键

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)

1

1

2. 级联 *** 作

我们如果要是直接在deparment表中直接将id=1修改为id=5的话,是不可以的。因为department的id被关联到employee表中了,所以修改会产生错误。;但是我们可以通过级联 *** 作进行修改。

添加级联 *** 作

语法:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称

FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)

ON UPDATE CASCADE ON DELETE CASCADE

1

2

3

1

2

3

分类:

①、级联更新:ON UPDATE CASCADE

②、级联删除:ON DELETE CASCADE

示例演示:

①、删除外键employee表中的外键(因为此时表中已经添加外键,需要先删除)

-- 删除外键

ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk

1

2

1

2

②、添加外键的同时,还要添加级联 *** 作

ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY ( dep_id ) REFERENCES department ( id ) ON UPDATE CASCADE ON DELETE CASCADE

1

1

③、倘若我们现在要是删除employee表中id=1的数据,那么department表中的数据也会跟着一起更新数据。

delete from department where id=1

1

1

-- 查询department表数据

select * from department

1

2

1

2

在这里插入图片描述

-- 查询employee表数据

select * from employee

1

2

1

2

在这里插入图片描述

约束用于限制加入表数据的类型,目的是保证数据的一致性和完整性

创建格式:在创建表时规定约束(在Create添加),也可以在创建之后添加(Alter table)。

约束类型:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、DEFAULT。

非空约束就是限制必须为某个列提供值,不允许有空值的存在。

空值(NULL)是不存在的值,它既不是数字0也不是空字符串,而是不存在未知的情况,即:该列的所有值不能为空,但可以为空字符或者0。

结果:通过desc查看会发现Nullable那一列的Y消失,表示此列不能为空。且在插入数值的时候此列必须添加数值,否则会报错。

取消非空约束使用alter方法:alter table test1 modify Author null 设置test1的Author可以

唯一性约束强调所在的列不允许有相同的值,但可以有多个Null。

其定义比主键约束弱,即他的列允许有空值(主键不允许有空值),唯一性约束的主要作用是保证在除主键外,其他列值得唯一性。

即:直接在列后面添加unique,

或在列后面添加 constraint 约束名 unique,

或在最后添加constraint 约束 unique(列名),

或者alter table 表名 add constraint 约束名 unique(列名)

建议使用的方法为alter和在最后添加最后添加constraint 约束 unique(列名)。

注:添加约束名的好处为:便于删除 *** 作,在删除时需要通过约束名来完成 *** 作。同时如果不添加约束名则系统会自动生成约束名,在表移动等 *** 作时,约束名也会更改,会造成后期 *** 作的麻烦。

取消唯一性约束:alter table test3 drop constraint QQ_UK2

主键约束唯一地标识了每一行记录(非空+唯一),在一个表中,最多只能有一个主键约束,主键约束既可以由一个列组成,也可以由两个或两个以上列组成(这种称联合主键)。

具体的方法和添加唯一约束相同,建议使用的方法为alter和在最后添加最后添加constraint 约束 unique(列名)。

删除主键:alter table 表名 drop constraint 约束名

外键约束主要是在B表中的某一列受到A表的制约,B的那一列的值只能是A内的值,比如工资表的员工号必须受员工表的员工号限制一样,工资表不能有不存在的员工号。

一般外键约束会使用两个表进行关联,外键是指"当前表"引用"另一个表"的某一列或某几列。在另一个表中,被引用的列必须具有主键约束或者唯一性约束,不存在的数据不能出现在当前表的对应列中。一般情况下当删除被引用表中数据时,该数据也不能出现在外键列中,如果存在则删除失败。

删除外键约束:alter table test5_1 drop constraint FK_test_5_1

check约束是为了让表中某字段值只能输入固定的值。

check设置数值范围:constraint check 表名 check (列名 between 小范围 and 大范围)

设置为大写:constraint check 表名 check (列名 = upper(列名))

取消 alter table test6_2 drop constraint check_test_6_2

默认约束是设置列的默认值,即当插入一行时,若不给出该列的值,就用默认值代替。

结果:在添加数据的时候,如果在设置有默认值的列没有添加数据则会把默认值添加进去。

取消默认约束 alter table test2 modify BOOKNAME default null

注:

add用于修改字段类型和长度的(即修改字段的属性)

modify修改表的数据结构。

update是修改数据内容的。

drop是删除数据内容。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7981461.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存