跳转到内容

资料定义语言

本页使用了标题或全文手工转换
维基百科,自由的百科全书

资料定义语言(data definition language,DDL)属于DBMS语言的一种,用于明确定义概念纲要(conceptual schemas)及内部纲要(internal schemas),DBMS内的DDL编译器(compiler)能够处理DDL,识别纲要建构物(schema constructs)的描述(description)并加以存入DBMS目录中的纲要描述(schema description)[1]。 为SQL语言集中负责资料结构定义与资料库物件定义的语言,由CREATEALTERDROP三个语法所组成,最早是由Codasyl(Conference on Data Systems Languages)资料模型开始,现在被纳入SQL指令中作为其中一个子集

语法结构

[编辑]

目前大多数的DBMS都支援对资料库物件的DDL操作,部份资料库 (如 PostgreSQL) 可把DDL放在交易指令中,也就是它可以被撤回 (Rollback)。较新版本的DBMS会加入DDL专用的触发程序,让资料库管理员可以追踪来自DDL的修改。

CREATE

[编辑]

CREATE 是负责资料库物件的建立,举凡资料库资料表资料库索引预存程序使用者函数触发程序或是使用者自定型别等物件,都可以使用 CREATE 指令来建立,而为了各式资料库物件的不同,CREATE 也有很多的参数。

例如,CREATE DATABASE (建立资料库) 的指令为:

CREATE DATABASE Sales
ON ( NAME = Sales_dat, FILENAME = 'saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )
LOG ON ( NAME = Sales_log, FILENAME = 'salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )

其中的ON为资料库档案的宣告,而LOG ON为交易记录档的宣告。 若需要更进阶的设定,则还有 FORWITH 以及 COLLATE等等。

又例如,CREATE TABLE (建立资料表) 的指令为:

CREATE TABLE [dbo].[PurchaseOrderDetail]
(
    [PurchaseOrderID] [int] NOT NULL REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID), -- 具參考完整性限制欄位
    [LineNumber] [smallint] NOT NULL,
    [ProductID] [int] NULL REFERENCES Production.Product(ProductID), -- 具參考完整性限制欄位
    [UnitPrice] [money] NULL,
    [OrderQty] [smallint] NULL,
    [ReceivedQty] [float] NULL,
    [RejectedQty] [float] NULL,
    [DueDate] [datetime] NULL,
    [rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_PurchaseOrderDetail_rowguid] DEFAULT (newid()), -- 具限制欄位,並有預設值
    [ModifiedDate] [datetime] NOT NULL CONSTRAINT [DF_PurchaseOrderDetail_ModifiedDate] DEFAULT (getdate()), -- 具限制欄位,並有預設值
    [LineTotal]  AS (([UnitPrice]*[OrderQty])),
    [StockedQty]  AS (([ReceivedQty]-[RejectedQty])),
CONSTRAINT [PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber] -- 主鍵宣告
    PRIMARY KEY CLUSTERED ([PurchaseOrderID], [LineNumber])
    WITH (IGNORE_DUP_KEY = OFF)
) 
ON [PRIMARY]

其中,每个栏位的格式都有定义,并且若有需要建立参考完整性的连结时,可以使用 REFERENCES 来宣告,主键则是用PRIMARY KEY 来宣告,计算型栏位(Computed Field)则是直接给定运算式等等,CREATE TABLE 指令很常用,但若设定起来会较为复杂,因此很多资料库管理人员都会使用GUI工具来设计。

其他像是:

  • CREATE INDEX:建立资料表索引。
  • CREATE PROCEDURE:建立预存程序。
  • CREATE FUNCTION:建立使用者函数。
  • CREATE VIEW:建立检视表。
  • CREATE TRIGGER:建立触发程序。

等等,都是使用来建立不同资料库物件的指令。

ALTER

[编辑]

ALTER 是负责资料库物件修改的指令,相较于 CREATE 需要定义完整的资料物件参数,ALTER 则是可依照要修改的幅度来决定使用的参数,因此使用上并不会太困难,例如:

ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL ; -- 在資料表 doc_exa 中加入一個新的欄位,名稱為 column_b,資料型別為 varchar(20),允許 NULL 值。
ALTER TABLE doc_exb DROP COLUMN column_b ; -- 在資料表 doc_exb 中移除 column_b 欄位。
alter table scm.scm_d_pp_detail_1h  change  column PP_ID_2H PP_ID_1H varchar(50)  -- 列改名
alter table test modify address char(10) --修改表列类型

DROP

[编辑]

DROP 则是删除资料库物件的指令,并且只需要指定要删除的资料库物件名称即可,在 DDL 语法中算是最简单的。

例如:

DROP TABLE myTable; -- 刪除 myTable 資料表。
DROP VIEW myView; -- 刪除 myView 檢視表。

DBMS语言

[编辑]

其他DBMS语言包括:

参考资料

[编辑]
  1. DDL
  2. MySQL SQL Syntax页面存档备份,存于互联网档案馆
  3. Oracle® Database SQL Language Reference[失效链接]
  4. Transact-SQL Reference页面存档备份,存于互联网档案馆
  5. PostgreSQL SQL Commands页面存档备份,存于互联网档案馆
  1. ^ 1.0 1.1 Elmasri, R., & Navathe, S. B. (2017). Fundamentals of database systems. Hoboken, NJ: Pearson.