表格被分为栏位(column) 及列位(row),当我们在对一个表格下定义时,我们需要对每一个栏位的资料种类下定义,(例如'姓' 这个栏位的资料种类是char(50)━━代表这是一个50 个字符的字串)。我们需要注意的一点是不同的数据库有不同的资料种类,所以在对表格做出定义之前最好先参考一下数据库本身的说明。
CREATE TABLE的语法是:
CREATE TABLE "表格名"
("栏位1" "栏位1 资料种类",汉普森英语
"栏位2" "栏位2 资料种类",
... )
要建立我们上面提过的顾客表格
CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
effectorCity char(50),
Country char(25),
Birth_Date date)
视观表(Views) 可以被当作是虚拟表格。它跟表格的不同是,表格中有实际储存资料,而视观表是建立在表格之上的一个架构,它本身并不实际储存资料。
CREATE VIEW "VIEW_NAME" AS "SQL 语句"
假设我们有以下的表格:
TABLE Customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)
若要在这个表格上建立一个包括First_Name,Last_Name,和Country 这三个栏位的视观表
CREATE VIEW V_Customer
AS SELECT First_Name, Last_Name, Country
FROM Customer
现在,我们就有一个叫做V_Customer的视观表:
View V_Customer
(First_Name char(50),
Last_Name char(50),
Country char(25))
可以用视观表来连接两个表格。在这个情况下,使用者就可以直接由一个视观表中找出她要的资讯,而不需要由两个不同的表格中去做一次连接的动作。假设有以下的两个表格:
我们就可以用以下的指令来建一个包括每个地区(region) 销售额(sales) 的视观表:CREATE VIEW V_REGION_SALES
AS ion_name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP ion_name
这就给我们有一个名为V_REGION_SALES 的视观表。这个视观表包含不同地区的销售,
如果我们要从这个视观表中获取资料
SELECT * FROM V_REGION_SALES
索引(Index)可以帮助我们从表格中快速地找到需要的资料,如果一个表格没有索引的话,资料库系统就需要将整个表格的资料读出(这个过程叫做'table scan')。若有适当的索引存在,资料库系统就可以
bustle先由这个索引去找出需要的资料是在表格的什么地方,然后直接去那些地方抓资料。这样子速度就快多了。
一个索引可以涵盖一或多个栏位
CREATE INDEX "INDEX_NAME" ON "TABLE_NAME" (COLUMN_NAME)
有表格如下
TABLE Customer
(First_Name char(50),
Last_Name char(50),
5分钟Address char(50),
City char(50),
Country char(25),
Birth_Date date)
transformation若我們要在Last_Name 這個欄位上建一個索引
CREATE INDEX IDX_CUSTOMER_LAST_NAME
on CUSTOMER (Last_Name)
要在Last_Name 这个栏位上建一个索引
CREATE INDEX IDX_CUSTOMER_LOCATION
on CUSTOMER (City, Country)
索引的命名并没有一个固定的方式。通常会用的方式是在名称前加一个字首,例如"IDX_" ,来避免与资料库中的其他物件混淆。另外,在索引名之内包括表格名及栏位名也是一个好的方式。
请读者注意,每个资料库会有它本身的CREATE INDEX语法,而不同资料库的语法会有不同。因此,在下指令前,请先由资料库使用手册中确认正确的语法。
外研社杯
表格被建立在资料库中后,我们常常会发现,这个表格的结构需要有所改变。常见的改变如下:
∙加一个栏位
∙删去一个栏位
∙改变栏位名称
∙改变栏位的资料种类
列出的改变并不是所有可能的改变。ALTER TABLE 也可以被用来作其他的改变
ALTER TABLE "table_name"
[改变方式]
[改变方式] 的详细写法会依我们想要达到的目标而有所不同。再以上列出的改变中,[改变方式] 如下:
∙加一个栏位: ADD "栏位1" "栏位1 资料种类"
∙删去一个栏位: DROP "栏位1"
∙改变栏位名称: CHANGE "原本栏位名" "新栏位名" "新栏位名资料种类"
∙改变栏位的资料种类: MODIFY "栏位1" "新资料种类"
用在CREATE TABLE一页建出的customer 表格来当作例子:
要加入一个叫做"gender" 的栏位
ALTER table customer add Gender char(1)
这个指令执行后的表格架构是dupon
把"Address" 栏位改名为"Addr"
ALTER table customer change Address Addr char(50)这个指令执行后的表格架构是:
将"Addr" 栏位的资料种类改为char(30)ironbark
ALTER table customer modify Addr char(30)
pfos这个指令执行后的表格架构是:
要删除"Gender" 栏位
ALTER table customer drop Gender
这个指令执行后的表格架构是:
主键(Primary Key) 中的每一笔资料都是表格中的唯一值。换言之,它是用来独一无二地确认一个表格中的每一行资料。主键可以是原本资料内的一个栏位,或是一个人造栏位(与原本资料没有关系的栏位)。主键可以包含一或多个栏位。当主键包含多个栏位时,称为组合键(Composite Key)。
键可以在建置新表格时设定(运用CREATE TABLE语句),或是以改变现有的表格架构方式设定(运用ALTER TABLE)。
几个在建置新表格时设定主键的方式
MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
以下则是以改变现有表格架构来设定主键的方式:
MySQL:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
Oracle:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
SQL Server:
ALTER TABLE Customer ADD PRIMARY KEY (SID);bowler
在用ALTER TABLE语句来添加主键之前,我们需要确认被用来当做主键的栏位是设定为『NOT NULL』;也就是说,那个栏位一定不能没有资料。