为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。

主键约束(Primary Key Constraint):主键是唯一标识数据库表中每一行数据的列或一组列。主键约束要求主键值在表中是唯一的,并且不能为NULL

唯一约束(Unique Constraint):唯一约束要求某列或一组列的值在表中是唯一的,但可以为NULL。一个表可以有多个唯一约束。

非空约束(Not Null Constraint):非空约束要求某列的值不能为NULL

外键约束(Foreign Key Constraint):外键约束用于建立表之间的关系。它定义了一个列或一组列,该列的值必须在另一个表的主键或唯一约束列中存在。外键约束可以用来维护表之间的引用完整性。

默认约束(Default Constraint):默认约束规定了当插入新行时,如果没有为某列提供值,则使用默认值。

检查约束(Check Constraint):检查约束定义了一种条件,该条件必须在插入或更新数据时满足。它可以限制某列的取值范围或满足特定的条件。

这些约束可以帮助数据库管理系统在数据操作时自动执行验证和限制,从而确保数据的完整性和一致性

练习:

1,创建一个叫zu的用户

 create user zu identified by 'zu2023@zudb';
 ​
 alter user zu sysadmin;

2,创建一个表空间ps_stu

create tablespace ps_stu relative location 'tablespace/ps_stu';

3,以zu登陆,创建一个名为zudb的数据库,指定默认表空间ps_stu

 gsql -d postgres -p 26000 -U zu -W 'zu2023@zudb' -r;
 ​
 create database zudb with tablespace ps_stu;
 ​
 \c zudb;

4,创建模式scma_stu;

 create schema scma_stu;

5,进入zudb数据库,创建三张表存于模式scma_stu中,

student(编号 主键约束,姓名 非空约束,性别 检查约束(只能是‘男’和‘女’),年龄 检查约束(18-23),学号 唯一约束)几个字段。

 create table scma_stu.student(
     id serial primary key,
     name varchar(20) not null,
     sex char(2) check(sex='m' or sex='f'),
     age integer check(age>=18 and age<=23),
     sno integer unique
 ​
 );
 ​

创建科目表subject(编号 主键约束,科目名字 唯一约束).

 create table scma_stu.subject(id serial primary key,sname varchar(50) unique );

创建分数表score(编号 主键约束,科目编号 外键约束科目表主键,学生编号 外键约束学生表主键,分数 非空约束)

 create table scma_stu.score(
     id serial primary key,
     subjectno integer references scma_stu.subject(id),
     studentno integer references scma_stu.student(id),
     score_num float not null
 );
 -- 查询指定模式下的表信息
 select * from information_schema.tables where table_schema='scma_stu';

6,每表插入2条有效测试数据

 -- 插入学生信息
 insert into scma_stu.student values(default,'zhangsan','m',20,2023001);
 insert into scma_stu.student values(default,'lisi','f',21,2023002);
 ​
 --插入科目
 insert into scma_stu.subject values(default,'java');
 insert into scma_stu.subject values(default,'openGauss');
 ​
 -- 插入分数
 insert into scma_stu.score values(default,1,1,90.90);
 insert into scma_stu.score values(default,1,2,80);
 insert into scma_stu.score values(default,2,1,92);
 insert into scma_stu.score values(default,2,2,89);

7,更新分数和科目名字

 -- 更新分数
 update scma_stu.score set score_num=99 where id=1;
 -- 更新科目
 update scma_stu.subject set sname='oop java' where id=1;
 ​

8,查询表内所有数据

9,删除所有测试数据

10,删除表

11,删除模式scma_stu和表空间ps_stu;

12,删除数据库

13,删除用户

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐