PostgreSQL数据定义语言(DDL)深入解析:从表创建到约束定义
发布时间: 2024-07-24 06:04:06 阅读量: 42 订阅数: 40
![数据库sql的数据定义](https://img-blog.csdn.net/20160316100750863?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
# 1. PostgreSQL数据定义语言(DDL)概述**
数据定义语言(DDL)是PostgreSQL中用于创建、修改和管理数据库结构的语言。它允许用户定义表、索引、约束和数据类型,从而建立和维护数据库架构。DDL语句在数据库模式的定义和演变中起着至关重要的作用。
DDL语句通常以关键字CREATE、ALTER或DROP开头,后跟要操作的对象(如表或索引)的名称。这些语句可以用于创建新对象、修改现有对象或删除不再需要的对象。通过使用DDL,数据库管理员和开发人员可以控制数据库的结构,并确保其满足应用程序和业务需求。
DDL语句的执行顺序非常重要,因为它们可以影响数据库的完整性。例如,在创建外键约束之前必须先创建主键约束。此外,DDL语句可以回滚和恢复,这在发生错误或需要撤消更改时非常有用。
# 2. 表创建与修改
### 2.1 CREATE TABLE 语句
#### 2.1.1 表结构定义
`CREATE TABLE` 语句用于创建新的表。表结构定义指定了表中列的名称、数据类型、约束和默认值。
```sql
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE,
salary NUMERIC(10, 2) DEFAULT 0.00
);
```
**参数说明:**
- `id`: 列名,类型为 `SERIAL`,表示自增主键。
- `name`: 列名,类型为 `VARCHAR(255)`,表示可变长度字符串,最大长度为 255 个字符。
- `email`: 列名,类型为 `VARCHAR(255)`,表示可变长度字符串,最大长度为 255 个字符,并具有唯一性约束。
- `salary`: 列名,类型为 `NUMERIC(10, 2)`,表示十进制数字,精度为 10 位,小数位数为 2 位,默认值为 0.00。
**代码逻辑分析:**
此代码块创建了一个名为 `employees` 的表,其中包含四个列:`id`、`name`、`email` 和 `salary`。`id` 列是自增主键,`name` 和 `salary` 列是可变长度字符串,`email` 列具有唯一性约束,`salary` 列的默认值为 0.00。
#### 2.1.2 约束定义
约束用于限制表中数据的完整性和一致性。`CREATE TABLE` 语句允许在创建表时定义约束。
```sql
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
product_id INT NOT NULL,
quantity INT NOT NULL,
FOREIGN KEY (product_id) REFERENCES products (id)
);
```
**参数说明:**
- `product_id`: 列名,类型为 `INT`,表示整数,不允许为 `NULL`。
- `quantity`: 列名,类型为 `INT`,表示整数,不允许为 `NULL`。
- `FOREIGN KEY (product_id)`: 外键约束,引用 `products` 表的 `id` 列,确保 `product_id` 列中的值在 `products` 表中存在。
**代码逻辑分析:**
此代码块创建了一个名为 `orders` 的表,其中包含三个列:`id`、`product_id` 和 `quantity`。`id` 列是自增主键,`product_id` 和 `quantity` 列不允许为 `NULL`。此外,还定义了一个外键约束,要求 `product_id` 列中的值必须在 `products` 表的 `id` 列中存在。
### 2.2 ALTER TABLE 语句
#### 2.2.1 添加、删除和修改列
`ALTER TABLE` 语句用于修改现有表的结构。它可以添加、删除或修改表中的列。
```sql
ALTER TABLE employees ADD COLUMN address VARCHAR(255);
ALTER TABLE employees DROP COLUMN phone_number;
ALTER TABLE employees ALTER COLUMN salary TYPE NUMERIC(12, 4);
``
```
0
0