SQL的数据定义语言(DDL)语句用于创建、修改和删除数据库的结构组件,如表、视图、索引、存储过程等。DDL 语句用于管理数据库的结构,而数据操作语言(DML)用于处理数据库中的实际数据。所以在使用 DDL 语句时,要谨慎,因为它们可能会直接影响数据库的结构,包括表、索引等。
DDL语句包括但不限于以下:
CREATE DATABASE:创建新的数据库。
create database netdata
ALTER DATABASE:修改数据库的属性,如名称、所有者等。
ALTER DATABASE netdata
MODIFY NAME = webdata;
ALTER DATABASE webdata
collate Latin1_General_CI_AS
ALTER DATABASE webdata
SET OWNER TO parish;
DROP DATABASE:删除一个数据库。
drop database webdata
CREATE TABLE:创建新表,并定义其列、数据类型、约束等。
USE webdata;
CREATE TABLE users
(
user_id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
password_hash VARCHAR(255) NOT NULL,
registration_date DATETIME DEFAULT GETDATE()
);
在这个例子中:
ALTER TABLE:更改现有表的结构,比如添加或删除列,修改列属性,重命名列或表,添加或删除约束等。
USE webdata;
ALTER TABLE users
ADD mark VARCHAR(50) NOT NULL;
上述语句将在 users 表中添加一个名为 mark 的新列,数据类型为 VARCHAR(50)。在 ALTER TABLE 语句中添加 NOT NULL ,标识希望 mark 列不允许为空。
DROP TABLE:删除表及其所有数据。
USE webdata;
DELETE FROM users;
删除表以及表内的数据,可以使用 DROP TABLE 语句。
USE webdata;
DELETE FROM users;
将删除指定表中的所有行,但保留表的结构。请注意,这个操作是不可逆的,因此在执行之前请确保是否真的想删除所有数据。
USE webdata;
TRUNCATE TABLE users;
如果只是想清空表,而不删除表本身,也可以使用 TRUNCATE TABLE 语句,它比 DELETE 通常执行得更快。
索引是一种提高数据库查询性能的技术,通过对表中的列或列组合创建索引,可以加速检索操作。
CREATE INDEX:在表的一个或多个列上创建索引以加快查询速度。
CREATE INDEX index_users
ON users (username, email, ...);
索引的创建可能会影响写入性能,因为每次插入、更新或删除时都要维护索引。因此,在决定创建索引时,需要权衡读取性能和写入性能之间的需求。
直接修改索引的定义是不允许的,修改索引通常涉及到删除原有的索引,然后重新创建一个新的索引,因为大多数情况下。
DROP INDEX:删除已经存在的索引。
DROP INDEX old_index_name
ON table_name;
创建新索引
CREATE INDEX new_index_name
ON table_name (column1, column2, ...);
删除索引会影响到数据库的性能,因此在生产环境中务必要谨慎执行,最好是在维护期间进行。另外,修改索引可能会对数据库操作产生影响,因此最好在数据库低负载时进行。
使用 CREATE VIEW 语句可以创建视图。视图是一种虚拟的表,其内容基于一个或多个基本表的查询结果。
CREATE VIEW:根据查询结果创建视图。
CREATE VIEW view_name
AS
SELECT column1, column2, ...
FROM table1
WHERE condition;
DROP VIEW:删除视图。
DROP VIEW old_view_name;
旧的视图删除后,再重新创建新的视图就可以了。
在Oracle、PostgreSQL数据库中序列是独立支持的。
在MySQL早期版本中并不直接支持序列,而是通过其他方式模拟序列功能,直到MySQL 8.0引入了SEQUENCE对象才原生支持序列操作。对于不支持序列的数据库系统,这类操作不属于其DDL语句集。
在Microsoft SQL Server(MS SQL)早期版本中也不直接支持序列对象,在SQL Server 2012及更高版本中引入了SEQUENCE对象,使得开发者可以直接创建和管理序列以生成连续的整数序列。
CREATE SEQUENCE:创建一个用于生成唯一数字序列的对象。
如下是MS SQL中创建序列语句:
CREATE SEQUENCE sequence_name
AS int
START WITH 1
INCREMENT BY 1
CACHE 10;
创建一个名为sequence_name的序列,初始值为1,每次递增1,并且缓存10个值以提高性能。
ALTER SEQUENCE:修改序列的属性。
ALTER SEQUENCE dbo.YourSequenceName
RESTART WITH 100
INCREMENT BY 5;
DROP SEQUENCE:删除序列。
drop sequence sequence_name
请注意,不同的数据库管理系统可能会有特定的DDL语法或不支持某些DDL语句。例如,在SQL Server中,不直接支持CREATE SCHEMA来创建数据库,但在PostgreSQL或Oracle中它具有这样的含义。同样地,对于序列、分区和同义词的支持也因数据库而异。