【数据库】SQL建表

SQL语句建新表

例1:

create table department
	( dept_name		varchar(20),
	building		varchar(15),
	budget		numeric(12,2),
	primary key (dept_name));

解析:

  • 创建表名称为:department
  • 创建属性1:dept_name 最大长度为20的字符串
  • 创建属性2:building 最大长度为15的字符串
  • 创建属性3:budget 是一个12位的数,其中2位数字在小数点后面
  • 指明主码:dept_name 作为表department的主码。

推出:

create table 命令的通用形式是:

create table r
	( A1	D1,
	 A2		D2,
	 ...,
	 An		Dn,
	 <完整性约束1>,
	 <完整性约束2>);
  • r 为创建表的名称
  • A1 - An 为属性名称
  • D1 - Dn 为创建的属性的 基本类型
  • <完整性约束> ,比如主码或外码

问题来了。

Q1:什么是基本类型?

SQL支持多种固有类型,包含:

名称 含义
char(n) 固定长度的字符串,用户指定长度n
varchar(n) 可变长度的字符串,用户指定最大长度为n
int 整数类型,4Bytes,等价于integer
smallint 小整数类型,2Bytes(1Byte=8bit)
numeric(p,d) 定点数,一共有p位数字(包含一个符号位),其中d位在小数点的右侧
real,double precision 浮点数与双精度浮点数
float(n) 精度至少为n位的浮点数

char(n) 与 varchar(n) 的不同:
例如: 我们存入字符串"Avi",char(10) 会在字符串"Avi"后自动补充7个空格使其达到10个字符串的长度;而varchar(10) 则不会补充空格。
所以: 我们一般会更加建议使用属性varchar而不是char,以避免因空格产生的错误。

Q2:完整性约束是什么?

完整性约束包含主码以及外码。
【数据库】SQL建表_第1张图片
primary key (dept_name): 意味着属性 dept_name 为表department 的主码;

create table course
	( course_id		varchar(7),
	title		varchar(50),
	dept_name		varchar(20),
	credits 	numeric(2,0),
	primary key (course_id),
	foreign key (dept_name) references department);

foreign key (dept_name) references department: 说明了此表 course 中包含非主码属性dept_name,而 dept_name 为另一个表 department 的主码,所以 dept_name 在此表 course 中为外码。

你可能感兴趣的:(数据库架构)