第四节——数据表与约束

数据表的使用

一、表的使用

  1. 表的创建,命令:
creaet table [if not exists] 表名 (列名 数据类型 列约束,列名 数据类型 列约束,......);
//if not exists不是必须的,列约束不是必须的

eg:

create table if not exists testtable (id int primary key,name test not null);
//若不存在testtable的表则创建,表中有两列,一列名为id存放数字,是主键,另一列为name存放字符,不能为空
//简化版:
create table qwe (id int,name test);
//不论存不存在qwe表都会创建,但是不存在才会创建成功,已有则会提示创建失败
  1. 表的查看,命令:
\d+      //查看当前数据库下的所有表的名字
\d 表表明  //查看具体表的构成,可以看到有哪些列名,哪些列约束

在这里插入图片描述

  1. 表的重命名:alter table 旧表明 rename to 新表名;

  2. 添加表字段:alter table 表名字 add column 列名 数据类型 约束条件,同样,约束条件可以省略
    eg:给表ttable增加一列名为name,数据类型为text的列,alter table ttable add column name text;
    在这里插入图片描述

  3. 删除表字段:alter table 表名字 drop column' 列名;
    eg:将ttable表里面的name列给删除,删除后列里面的数据也会被删除
    在这里插入图片描述

  4. 删除数据表:drop table 表名称;

二、常用的的数据类型

  1. numeric:数字类型
  2. int/integer:整数类型
  3. serial:自动增加的整数
  4. text:字符型,无限长度
  5. varchar(n):有限制的变长字符
  6. char(n):定长的字符,不足用空格补充

三、列的约束

  1. 默认值default:插入数据时,没有插入被默认值约束的列的数据,该列的值会被默认值填充,命令:create table 表名 (列名 数据类型 defaule 默认值);
    eg:创建ttable表,其中name列设置默认值为qwe,插入数据时,不对name列进行操作,插入成功后系统会自动将默认值插入
    在这里插入图片描述
  2. 检查约束check:插入数据时进行检查,若插入的数据不符合约束,则插入失败,命令:
创建默认名字的检查约束:create table 表名 (列名 数据类型 check (约束条件));  //默认名字:表名_字段名_约束类型
创建指定名字的检查约束:create table 表名 (列名 数据类型 constraint 约束名字 check (约束条件));
对已有的列增加默认名字的检查约束:alter table 表名 add check (约束条件);
对已有的列增加特定名字的检查约束:alter table 表名 add constraint 约束名 check (约束条件);
将约束从列中删除:alter table 表名 drop constraint 约束名; //通用且唯一的删除方式

eg:创建ttable表,id列约束为大于零,不指定名称,name列约束为不等于’’(注意’‘不等于空字符串),约束名为yuesu
在这里插入图片描述

  1. 非空约束not null:列中数据不允许为空(注意空与’‘不一样),命令:
创建表时对列设置非空约束:create table 表名 (列名 数据类型 not null);
对已有的列设置非空约束:alter table 表名 alter column 列名 set not null;
将非空约束从列中删除:alter table 表名 alter column 列名 drop not null;
  1. 唯一约束unique:为约束的列创建一个b树,使得列中的值不能重复出现,但是可以出现多个空值,命令:
创建表时对列设置默认名称的唯一约束:create table 表名 (列名 数据类型 unique);
创建表时对列设置特定名称的唯一约束:create table 表名 (列名 数据类型 constraint 约束名称 unique);
对已有的列设置默认名称的唯一约束:alter table 表名 add unique(列名);
对已有的列设置特定名称的唯一约束:alter table 表名 add constraint 约束名 unique(列名);
  1. 主键约束primary key:将一个列设置成主键,一个表中有且仅有一个主键,主键使用b树存储数据,使得主键值不能重复且非空,命令:
创建表时对列设置默认名称的主键约束:create table 表名 (列名 数据类型 primary key);
创建表时对列设置特定名称的主键约束:create table 表名 (列名 数据类型 constraint 约束名称 primary key);
对已有的列设置默认名称的主键约束:alter table 表名 add primary key(列名);
对已有的列设置特定名称的主键约束:alter table 表名 add constraint 约束名 primary key(列名);
  1. 外键约束:外键约束的列都来自主表,从表外键约束列只能插入与主表相同的内容
    a)主表从表:两个表a,b,b将a主键列设置为外键,则a为主表,b为从表,b中外键列所有数据都来自a
    命令:
创建从表时指定主表的默认名称的外键:create table 从表名 (列名 数据类型 references 主表名(需要绑定的主表列名));//绑定的列同名时,可以省略()里的主表列名
创建从表时创建特定名称的外键:create table 从表名 (列名 数据类型,constraint 约束名 foreign key (从表列名) references 主表名 (主表列名));
对从表已存在列设置默认名称外键约束:alter table 从表名 add foreign key (从表列名) references 主表名 (主表列名));
对从表已存在列设置特定名称外键约束:alter table 从表名 add constraint 约束名 foreign key (从表列名) references 主表名 (主表列名));

四、例子

一、外键举例:从表中被外键约束的列不能插入主表以外的内容
  1. 创建一个主表testtable,有两列id和name,其中name为主键
create table testtable (id int,name text primary key);
  1. 创建另一个从表ttable,有两列id和wname,其中wname为外键,绑定testtable表的name列,外键名为waijian
create table ttable (id int,wname text,constraint waijian foreign key (wname) references testtable (name));
  1. 向主表插入两条数据(1,‘qwe’)和(2,‘asd’)
insert into testtable values (1,'qwe'),(2,'asd');

在这里插入图片描述

  1. 向从表插入一条和主表相同的数据(1,‘qwe’);此时插入成功
insert into ttable values (1,'qwe');

在这里插入图片描述

  1. 向从表插入一条与主表不同的数据(2,‘zxc’);此时插入失败
insert into ttable values (2,'zxc');

在这里插入图片描述

  1. 向从表重复插入一条已有的数据(1,‘qwe’);插入成功
insert into ttable values (1,'qwe');

在这里插入图片描述

总结:外键只检查插入的值主表上是否存在,对于从表的值是否重复,不予检查
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值