SQL 数据描述语言 (DDL)

发布日期:2026-06-25 06:10:03   来源 : 杭州电子商务研究院    浏览量 :19
杭州电子商务研究院 发布日期:2026-06-25 06:10:03  
19

介绍

数据库中执行的 SQL 语句主要有两种类型,如什么是 SQL中所述。在使用SQL 数据操作语言 (DML)操作数据库中的数据之前,您必须创建逻辑结构来存储信息。

数据定义语言 (DDL) 是 SQL 的一部分,它处理数据在逻辑层面上应如何驻留在数据库中。每个数据库都有自己允许的对象类型集。大多数包括表、索引、视图、存储过程、函数、同义词和触发器。每个数据库都有自己的 DDL 语句语法和可以包含的子句。几乎每个 RDBMS 中都会有一些基本的关键词。

创建 更改 删除 截断

您大概可以猜出以这些关键词开头的语句的基本目的。

跟随

有几个网站可以让你练习使用 SQL。我将使用 SQL Fiddle。我将展示的语法是使用 Oracle 11g R2 版本测试的。SQL Fiddle 区域“构建模式”用于 DDL 语句。如果您想自己执行这些语句,只需将每个新语句附加到 SQL Fiddle 中先前语句的列表中,然后单击“构建模式”按钮。

CREATE 语句

关系数据库管理系统的基本构建块是表。我将表设想为一组行和列。列表示信息字段。行表示表中的记录。在下图中,人员表有四个字段和四条记录。

您可以简单地使用以下语句创建表:

      CREATE TABLE books
( book_id VARCHAR(100),
  book_name VARCHAR(100),
  author_id NUMBER,
  editor_id NUMBER)
;
    

此表定义的问题在于,它允许创建行,而无需考虑数据是否有意义。设想我们的表如下所示:

您的数据库设计应确保插入表中的数据是合理的。让我们创建第二个表,称为“人员”表。这次我们将添加约束以确保输入到表中的数据是合理的。表中的每个条目都是唯一的人员,这很有意义,因此我们为其赋予PRIMARY KEY 。我们还希望通过将这些字段设为NOT NULL来确保跟踪表的最后更新时间以及更新者

      CREATE TABLE persons
( person_id NUMBER NOT NULL PRIMARY KEY,
  name VARCHAR(100),
  birth_date DATE,
  gender VARCHAR(30),
  last_update DATE NOT NULL, 
  updated_by NUMBER NOT NULL
 );
    

我们只了解了表的创建,还有许多其他创建类型的语句。以下是其他一些示例:

注意:sqlfiddle.com 的设计不允许执行这些语句。

      CREATE FUNCTION get_bookcount(author IN NUMBER) 
   RETURN NUMBER 
   IS bookcount NUMBER(10);
   BEGIN 
      SELECT count(1) 
      INTO bookcount 
      FROM books 
      WHERE author_id = author; 
      RETURN(bookcount); 
    END;
/

CREATE INDEX editor_indx ON books(editor_id);

CREATE ROLE book_reader;

CREATE TRIGGER persons_update 
    BEFORE INSERT OR UPDATE ON persons
     FOR EACH ROW
        BEGIN
         :new.last_update := sysdate;
        END;
/
    
其他 CREATE 语句类型
CREATE SCHEMA 语句
CREATE SEQUENCE 语句
CREATE SYNONYM 语句
CREATE TRIGGER 语句
CREATE TYPE 语句
CREATE VIEW 语句

ALTER 语句

可以使用ALTER语句更改数据库中对象的定义。示例:向“books”表添加约束,以确保字段“book_name”和“author_id”包含数据。

      ALTER TABLE books MODIFY (book_name NOT NULL);
ALTER TABLE books MODIFY (author_id NOT NULL);
    

可以向字段“author_id”和“editor_id”添加外键约束,将可用值限制为“person_id”字段中当前存在于人员表中的值。

      ALTER TABLE books ADD CONSTRAINT fk_author 
        FOREIGN KEY (author_id) REFERENCES persons (person_id);
        
ALTER TABLE books ADD CONSTRAINT fk_editor 
    FOREIGN KEY (editor_id) REFERENCES persons (person_id);
    

如果我们想在图书表中添加出版日期怎么办?使用“ALTER”语句添加字段。

      ALTER TABLE books ADD ( publish_date DATE);
    

您不仅可以修改表,还可以修改其他内容。以下是其他一些ALTER语句的示例。

注意:sqlfiddle.com 的设计不允许执行这些语句。

      ALTER ROLE book_reader IDENTIFIED BY r2Xe135DEw;

ALTER INDEX editor_indx DISABLE;

ALTER TRIGGER persons_update RENAME TO persons_trig;
    

TRUNCATE 语句

      TRUNCATE TABLE books;
    

TRUNCATE语句从表中删除所有数据。这与DML DELETE语句非常相似。

      DELETE FROM books;
    

在 Oracle 数据库中,这两者之间存在差异。TRUNCATE删除所有数据,而DELETE可以具体到要删除的行。此外,如果您在使用DELETE语句时犯了错误,则可以使用事务控制语句ROLLBACK来删除更改。TRUNCATE命令没有回滚功能。使用TRUNCATE语句的最大好处是它比DELETE语句更快,尤其是在表包含大量行、触发器、索引和其他依赖项的情况下

DROP 语句

使用DROP语句从数据库中删除对象

      DROP TABLE books;
DROP TABLE persons;
    

当您删除表时,它会删除所有行、使依赖对象无效、删除任何人对该表拥有的索引、约束和权限。与CREATEALTER语句一样,还有其他DROP语句类型。

其他 DROP 语句类型
DROP FUNCTION 语句
DROP INDEX 语句
DROP PROCEDURE 语句
DROP ROLE 语句
DROP SCHEMA 语句
DROP SEQUENCE 语句
DROP SYNONYM 语句
DROP TRIGGER 语句
DROP TYPE 语句
DROP VIEW 语句

这就是我们对 SQL 数据描述语言的简要介绍。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据