视频教程地址:https://www.ixigua.com/7200393924001661475
这节的内容是我们创建出下边这张表:
创建数据库
创建数据库的语法:
CREATE DATABASE <数据库名称>;
代码:
CREATE DATABASE shop;
创建表
创建表的语法:
CREATE TABLE <表名> ( <列名1> <数据类型> <该列所需约束>, <列名2> <数据类型> <该列所需约束>, <列名3> <数据类型> <该列所需约束>, <列名4> <数据类型> <该列所需约束>, .... <该表的约束1>, <该表的约束2>,...... );
创建上边这个表的SQL语句:
CREATE TABLE Product (
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER DEFAULT 0,
regist_date DATE,
PRIMARY KEY (product_id)
);
-- 主健也可以这样实现
CREATE TABLE Product (
product_id CHAR(4) NOT NULL PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER DEFAULT 0,
regist_date DATE
);
全量的创建表语法:PostgreSQL: CREATE TABLE Statement
命名规则
还记得SQL语句的组成吗?关键字、库名、表名、字段名、常量、运算符。
这里的库名、表名、字段名类似于编程语言中的变量,它们的名字不能随便取,有四条硬性的规则必须遵守:
1、名字只能包含字母、数字、下划线;(补充,实际上$也是可以的,不过不建议使用,传统习惯还是用字母、数字、下划线)
2、名字只能以字母或下划线开头;
3、同一级的名字不能重复,如库名不能重;同一个库中的表名不能重;同一个表中的字段名不能重复;
4、名字不区分大小写;
另外,我们取名时尽量要能做到顾名知义,同时能用英文尽量用英语,拼音往往太长,主要是显得比较low -_-。
数据类型
SQL的数据类型很少,与常量一致,大体分成三类:数字、字符、日期时间。
1、数字
INTEGER,最常的整数类型;
REAL,小数类型;
SERIAL,自动增长的整数,MySQL中使用AUTO INCREMENT关键字来实现;
2、字符串
CHAR(10),定长字符串,长度不足补空格;
VARCHAR(10),变长字符串;
TEXT,任意长度字符串;
3、日期时间
DATA,日期,如'YYYY-MM-DD'
TIME,时间,如'HH:MM:SS'
TIMESTAMP,日期时间,如'YYYY-MM-DD HH:MM:SS'
基本上最常用的类型也就上边这几种,记住这些就差不多了。
如果要看更详细的,可以到官网去查询:PostgreSQL: Data Types
列约束
每一列(字段)类型的后面就是对这一列的约束,这里也介绍几种常见的约束: 1、NOT NULL,非空,比较好理解,就是这个字段不能为空;
2、DEFAULT,默认值;
3、UNIQUE,唯一;
4、PRIMARY KEY,主键,就是它可以唯一表示这一行(记录),它的作用比较大,即要求唯一,也要求非空,也会生成索引,所以它是一个涵盖了NOT NULL和UNIQUE两个约束;
表约束
表约束一般用的很少,最常用的就是PRIMARY KEY,但这个一般都是通过列的约束来实现的,不过这里还是学习一下它的语法,以便后面我们遇到相关的写法可以看得懂。
CREATE TABLE order_details
( order_detail_id integer NOT NULL,
order_id integer NOT NULL,
order_date date,
quantity integer,
notes varchar(200) NOT NULL DEFAULT 'Standard shipping',
CONSTRAINT order_details_pk PRIMARY KEY (order_detail_id)
);
CONSTRAINT关键字后跟的是约束的名字,这块儿是可以省略的;高级的SQL语句是可以根据约束名字来控制一个表的约束。
约束名子后边跟的是约束内容;
创建商品表的语句
CREATE TABLE Product
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
insert into product values(product_id, product_name, product_type, sale_price, purchase_price, regist_date) values('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-01');
insert into product values(product_id, product_name, product_type, sale_price, purchase_price, regist_date) values('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
insert into product values(product_id, product_name, product_type, sale_price, purchase_price) values('0003', '运动T恤衫', '衣服', 4000, 2800);
insert into product values(product_id, product_name, product_type, sale_price, purchase_price, regist_date) values('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
insert into product values(product_id, product_name, product_type, sale_price, purchase_price, regist_date) values('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-05');
insert into product values(product_id, product_name, product_type, sale_price, regist_date) values('0006', '叉子', '厨房用具', 500, '2009-09-20');
insert into product values(product_id, product_name, product_type, sale_price, purchase_price, regist_date) values('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
insert into product values(product_id, product_name, product_type, sale_price, purchase_price, regist_date) values('0008', '圆珠笔', '办公用品', 100, '2009-11-11');
select * from product;
视频教程地址
视频教程地址:https://www.ixigua.com/7200393924001661475
【下一节】