SQL语句入门-创建表(PostgreSQL)

谁说胖子不能爱 提交于 2020-10-29 13:26:58

SQL-CREATE TABLE

本文讲讲关于建立数据库表结构的CREATE语句,我用的postgreSQL来实现,其他的应该大同小异,主要是了解SQL语句

语法

CREATE TABLE 的语法格式如下:

CREATE TABLE table_name(
	column1 datatype,
	column2 datatype,
	column3 datatype,
	...
);

CREATE TABLE 是一个关键词,table_name为表名,表明必须在同一模式的其他表、序列、索引、视图或外部表表名中唯一。

实例&讲解

这里我直接拿当时数据库的作业来详细讲解一下关于建立表结构的一些内容
现在需求如下:
在这里插入图片描述
在这里插入图片描述
这里我的实现的代码如下:



CREATE TABLE student(
	sno varchar(8) primary key not null,
	sname varchar(8) not null,
	ssex varchar(2) check((ssex = 'M') or (ssex='F')),
	sbirthday date,
	classno varchar(6) references class(classno),
	Totalcredit smallint default 0
);

CREATE TABLE class(
	classno varchar(6) primary key,
	classname varchar(20) not null,
	classmajor varchar(20),
	classdept varchar(20),
	studentnumber smallint check((studentnumber >=20) and (studentnumber <=40))
);

CREATE TABLE course(
	cno varchar(6) primary key,
	cname varchar(30) not null,
	ccredit smallint check((ccredit>=0) and (ccredit<=100))
);

CREATE TABLE sc(
	sno varchar(8) references student(sno),
	cno varchar(6) references course(cno),
	grade integer check((grade>=0) and (grade <= 100))
);

CREATE TABLE teacher(
	tno numeric(6) primary key,
	tname varchar(8) not null,
	tsex varchar(2) check ((tsex = 'M') or (tsex='F')),
	tbirthday date,
	ttitle varchar(20)
);

CREATE TABLE teaching(
	tno numeric(6) references teacher(tno),
	cno varchar(6) references course(cno),
	language varchar(10) check((language = 'Chinese') or (language = 'Bilingual') or (language = 'English'))
);

这里使用 \d 可以查看表格是否创建成功:
在这里插入图片描述

选取其中的CREATE TABLE student进行讲解:
第一行CREATE TABLE student 是创建了表名为’student’的一张表,变量分别为:

  • sno (varchar类型,长度为8位,作为主键)
  • sname(varchar类型,长度为8位,不为空)
  • ssex(varchar类型,长度为2位,只能为’M’或’F’)
  • sbirthday(date类型)
  • classno(varchar类型,长度为6位,此键为外键,参考class表的classno的值)
  • TotalCredit(smallint类型,默认值为0)

可以使用 \d tablename 来查看表格的信息
在这里插入图片描述
这里我解释一下第一行的index是怎么回事,这里的index是自动建立的,postgreSQL建立的默认索引是btree索引,根据sno,也就是我的表格的主键来建立的,至于索引是什么,我也曾经写过一篇博客,有兴趣的朋友可以去看看↓
BPTree索引
后面几行一目了然,我觉得没必要进行解释了,欢迎大家进行讨论。



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!