openGauss数据库-头歌实验1-4 数据库及表的创建

一、创建数据库

(一)任务描述

本关任务:创建指定数据库。

(二)相关知识

数据库其实就是可以存放大量数据的仓库,学习数据库我们就从创建一个数据库开始吧。

为了完成本关任务,你需要掌握:

1.OpenGauss 数据库逻辑结构图

1.OpenGauss 数据库的特征;

2.如何连接数据库;

3.如何创建数据库。

(三)数据库逻辑结构图

openGauss 的数据库节点负责存储数据,其存储介质也是磁盘,下面主要从逻辑视角介绍数据库节点都有哪些对象,以及这些对象之间的关系。数据库逻辑结构如下图。

说明:

1.Tablespace,即表空间,是一个目录,可以存在多个,里面存储的是它所包含的数据库的各种物理文件。每个表空间可以对应多个Database。

2.Database,即数据库,用于管理各类数据对象,各数据库间相互隔离。数据库管理的对象可分布在多个Tablespace上。

3.Datafile Segment,即数据文件,通常每张表只对应一个数据文件。如果某张表的数据大于1GB,则会分为多个数据文件存储。

4.Table,即表,每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。

5.Block,即数据块,是数据库管理的基本单位,默认大小为8KB。

(四)OpenGauss数据库的特征

以下是 OpenGauss 数据库特征:

1.用户必须拥有数据库创建的权限或者是数据库的系统管理员权限才能创建数据库;

2.openGauss 默认包含两个模板数据库 template0、template1,以及一个默认的用户数据库 postgres。如图所示:

3.用户创建数据库时实际上就是通过拷贝模板数据库(默认 template1)来创建新的数据库,同时,要避免使用客户端或其他手段连接及操作两个模板数据库;

4.openGauss 允许创建的数据库总数目上限为 128 个。数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。

(五)如何连接数据库

gsql 是 openGauss 提供的在命令行下运行的数据库连接工具。平台连接数据库的语句如下:

 gsql -d postgres -U gaussdb -W'passwd123@123';

其中 -d 参数代表数据库,-U 参数代表用户名,-W 参数代表密码;

连接成功后,系统会显示"DBNAME=>"。

退出连接使用以下语句:

postgres=> \q

openGauss 常用操作语句:

切换数据库:

\c test 

上述语句代表从当前数据库切换到test数据库。

查看数据库列表:

\l

查看表列表及表信息:

\d

(六)如何创建数据库

创建数据库:

创建一个新的数据库。缺省情况下新数据库将通过复制标准系统数据库 template0来创建,且仅支持使用 template0 来创建。另外需要注意的是,在创建数据库过程中,若出现类似"could not initialize database directory"的错误提示,可能是由于文件系统上数据目录的权限不足或磁盘满等原因引起。

创库语法格式:

CREATE DATABASE database_name
    [ [ WITH ] { [ OWNER [=] user_name ] |
               [ TEMPLATE [=] template ] |
               [ ENCODING [=] encoding ] |
               [ LC_COLLATE [=] lc_collate ] |
               [ LC_CTYPE [=] lc_ctype ] |
               [ DBCOMPATIBILITY [=] compatibilty_type ] |
               [ TABLESPACE [=] tablespace_name ] |
               [ CONNECTION LIMIT [=] connlimit ]}[...] ];     

上述建表语句中,OWNER 参数可用于指定表的所属用户,TEMPLATE 参数可用于指定模板数据库,ENCODING 参数可用于编码格式,TABLESPACE 参数可用于指定表空间。

创建数据库示例:

--创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。
postgres=# CREATE DATABASE music ENCODING 'GBK' template = template0;
--创建数据库music2,并指定所有者为jim。
postgres=# CREATE DATABASE music2 OWNER jim;
--用模板template0创建数据库music3,并指定所有者为jim。
postgres=# CREATE DATABASE music3 OWNER jim TEMPLATE template0;

(七)编程要求

在右侧命令行中连接 openGauss,并创建一个名为 mydb 的数据库。

连接数据库的用户名为:gaussdb,密码为:passwd123@123。

(八)编程实现

二、创建表

(一)任务描述

本关任务:在数据库中创建一个表。

(二)相关知识

我们知道数据库就是存储数据的地方,那数据库中的数据到底存放在哪里呢?数据库中的数据是存放在一张一张的表中的。

你可以想象数据库就像一个文件夹,而表你可以理解为一个excel表格,其实他们本来就挺像。

那要完成本关任务,你需要掌握:如何在指定数据库中创建表。

如何在指定数据库中创建表

我们先来了解一下在数据库中创建表的规则:

CREATE TABLE 表名
(
    字段名,数据类型,
    字段名,数据类型,
    .....
) 

首先创建数据库,如下:

create database mydb; 

然后选择数据库:

\c mydb; 

最后创建 tb1 表:

CREATE TABLE tb1
(
    c_sk             integer,
    c_id             char(5),
    c_name              char(6),
    c_sex               char(8)
);

上述建表语句中, c_sk 、c_id、c_name 和 c_sex 代表表的字段名,integer、char(5)、char(6) 和 char(8) 分别是这四字段名称的数据类型。

当结果显示如下信息时,表示表创建成功:

 CREATE TABLE

也可以输入 \d 命令查看数据库下的表列表;

\d+ 可以查看表的具体信息。

(三)编程要求

在右侧命令行中操作,创建数据库 testdb,在 testdb 下创建表 t_emp,表结构如下:

(四)编程实现

三、使用主键约束

(一)任务描述

本关任务:创建表并且添加主键约束。

(二)相关知识

主键,是表中一列或者多列的组合,主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空,主键能够唯一的标识表中的每一条记录,可以结合外键来定义与不同数据表之间的关系。

怎么理解主键呢?我们知道数据库中的表可以存放很多数据,如果把表中的每一个数据比作一个人的话,那么表的主键就可以看做是人的身份证。

为了完成本关任务,你需要掌握:怎么给表中的字段添加主键约束。

(三)添加主键约束

有两种方式可以添加主键约束:

1.在定义列的同时指定主键;

2.在定义完字段之后再指定主键。

(1) 在定义列的同时指定主键:

CREATE TABLE tb1(
    id int PRIMARY KEY,
    name varchar(32),
    deptId int,
    salary float
); 

指定 id 列为主键。

(2) 在定义完所有列之后指定主键。

CREATE TABLE tb1(
    id int ,
    name varchar(32),
    deptId int,
    salary float,
    PRIMARY KEY(id)
); 

(3)多字段联合主键

在开发中还有一种情况很常见,就是将几个字段联合在一起作为主键,那这个在代码中怎么实现呢?

举个例子,我们将员工的名字和部门 ID 联合起来作为主键:

CREATE TABLE tb1(
    id int ,
    name varchar(32),
    deptId int,
    salary float,
    PRIMARY KEY(id,name)
);  

语句执行后,会将name和id字段组合成为表tb1的多字段组合主键。

(四)编程要求

在数据库MyDb中,创建两张表t_user1,t_user2,表结构如下,请为两张表分别创建主键约束,t_user1的主键为userId,t_user2的主键为联合主键,将字段name和phone作为t_user2的联合主键。

表t_user1

表t_user2

(五)编程实现

四、添加常见约束

(一)任务描述

本关任务:编写一个能计算数组平均值和最大值的小程序。

(二)相关知识

在数据库的使用过程中我们经常要限制字段的取值,比如有些字我们不能让它为空,我们就需要添加非空约束,本关我们就来学习如何添加这些常用的约束。

为了完成本关任务,你需要掌握:

1.怎么添加唯一约束;

2.怎么添加非空约束;

3.怎么添加默认约束;

4.怎么设置字段的值自动增加。

怎么添加唯一约束

唯一约束(Unique Constraint)要求该列唯一,允许为空,但是只能有一个空值。唯一约束可以确保一列或者几列不出现重复值。

定义部门表的部门名称唯一,SQL语句如下:关键词 UNIQUE。

 CREATE TABLE t_dept(
    id INT PRIMARY KEY,
    name VARCHAR(22) UNIQUE,
    location VARCHAR(50)
);

怎么添加非空约束

关键词:NOT NULL;

例如:

CREATE TABLE t_dept(
    id INT PRIMARY KEY,
    name VARCHAR(22) NOT NULL,
    location VARCHAR(50)
); 

怎么使用默认约束

默认约束:即给字段一个默认值。

关键词:DEFAULT;

例如:

 CREATE TABLE t_emp(
    id INT PRIMARY KEY,
    name VARCHAR(22),
    sex VARCHAR(2) DEFAULT '男'
) ;

注意:

如果是添加字符串型默认值要使用单引号,如果是整型则不需要加任何符号;

设置表的属性值自动增加

在数据库应用中,经常有个需求就是,在每次插入新纪录时,系统自动生成字段的主键值,即:

关键词:serial,默认情况下初始值和增量都为1。

例如:

CREATE TABLE T1
(
    id    serial,
    name  text,
    primary key(id)

); 

(三)编程要求

在数据库mydb中创建表t_user,表结构如下:

提示:若要给字段添加两个或者两个以上的约束,约束之间以空格隔开即可。

(四)编程实现

相关推荐
White_Mountain17 分钟前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship18 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站21 分钟前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶24 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡2 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO2 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong2 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起3 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~4 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21554 小时前
Liunx下MySQL:表的约束
数据库·mysql