数据表的使用
一、表的使用
- 表的创建,命令:
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表都会创建,但是不存在才会创建成功,已有则会提示创建失败
- 表的查看,命令:
\d+ //查看当前数据库下的所有表的名字
\d 表表明 //查看具体表的构成,可以看到有哪些列名,哪些列约束
-
表的重命名:
alter table 旧表明 rename to 新表名;
-
添加表字段:
alter table 表名字 add column 列名 数据类型 约束条件
,同样,约束条件可以省略
eg:给表ttable增加一列名为name,数据类型为text的列,alter table ttable add column name text;
-
删除表字段:
alter table 表名字 drop column' 列名;
eg:将ttable表里面的name列给删除,删除后列里面的数据也会被删除
-
删除数据表:
drop table 表名称;
二、常用的的数据类型
- numeric:数字类型
- int/integer:整数类型
- serial:自动增加的整数
- text:字符型,无限长度
- varchar(n):有限制的变长字符
- char(n):定长的字符,不足用空格补充
三、列的约束
- 默认值default:插入数据时,没有插入被默认值约束的列的数据,该列的值会被默认值填充,命令:
create table 表名 (列名 数据类型 defaule 默认值);
eg:创建ttable表,其中name列设置默认值为qwe,插入数据时,不对name列进行操作,插入成功后系统会自动将默认值插入
- 检查约束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
- 非空约束not null:列中数据不允许为空(注意空与’‘不一样),命令:
创建表时对列设置非空约束:create table 表名 (列名 数据类型 not null);
对已有的列设置非空约束:alter table 表名 alter column 列名 set not null;
将非空约束从列中删除:alter table 表名 alter column 列名 drop not null;
- 唯一约束unique:为约束的列创建一个b树,使得列中的值不能重复出现,但是可以出现多个空值,命令:
创建表时对列设置默认名称的唯一约束:create table 表名 (列名 数据类型 unique);
创建表时对列设置特定名称的唯一约束:create table 表名 (列名 数据类型 constraint 约束名称 unique);
对已有的列设置默认名称的唯一约束:alter table 表名 add unique(列名);
对已有的列设置特定名称的唯一约束:alter table 表名 add constraint 约束名 unique(列名);
- 主键约束primary key:将一个列设置成主键,一个表中有且仅有一个主键,主键使用b树存储数据,使得主键值不能重复且非空,命令:
创建表时对列设置默认名称的主键约束:create table 表名 (列名 数据类型 primary key);
创建表时对列设置特定名称的主键约束:create table 表名 (列名 数据类型 constraint 约束名称 primary key);
对已有的列设置默认名称的主键约束:alter table 表名 add primary key(列名);
对已有的列设置特定名称的主键约束:alter table 表名 add constraint 约束名 primary key(列名);
- 外键约束:外键约束的列都来自主表,从表外键约束列只能插入与主表相同的内容
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 主表名 (主表列名));
四、例子
一、外键举例:从表中被外键约束的列不能插入主表以外的内容
- 创建一个主表testtable,有两列id和name,其中name为主键
create table testtable (id int,name text primary key);
- 创建另一个从表ttable,有两列id和wname,其中wname为外键,绑定testtable表的name列,外键名为waijian
create table ttable (id int,wname text,constraint waijian foreign key (wname) references testtable (name));
- 向主表插入两条数据(1,‘qwe’)和(2,‘asd’)
insert into testtable values (1,'qwe'),(2,'asd');
- 向从表插入一条和主表相同的数据(1,‘qwe’);此时插入成功
insert into ttable values (1,'qwe');
- 向从表插入一条与主表不同的数据(2,‘zxc’);此时插入失败
insert into ttable values (2,'zxc');
- 向从表重复插入一条已有的数据(1,‘qwe’);插入成功
insert into ttable values (1,'qwe');