SQL 数据描述语言 (DDL)
介绍
数据库中执行的 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;
当您删除表时,它会删除所有行、使依赖对象无效、删除任何人对该表拥有的索引、约束和权限。与CREATE和ALTER语句一样,还有其他DROP语句类型。
其他 DROP 语句类型 |
---|
DROP FUNCTION 语句 |
DROP INDEX 语句 |
DROP PROCEDURE 语句 |
DROP ROLE 语句 |
DROP SCHEMA 语句 |
DROP SEQUENCE 语句 |
DROP SYNONYM 语句 |
DROP TRIGGER 语句 |
DROP TYPE 语句 |
DROP VIEW 语句 |
这就是我们对 SQL 数据描述语言的简要介绍。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~