17.1.3 指定默认值SQL允许指定默认值,在插入行时如果不给出值,DBMS将自动采用默认值。默认值在CREATE TABLE语句的列定义中用关键字DEFAULT指定。
请看下面的例子:
输入▼
CREATE TABLE OrderItems
(
order_num INTEGER NOT NULL,
order_item INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
item_price DECIMAL(8,2) NOT NULL
);
分析▼
这条语句创建OrderItems
表,包含构成订单的各项(订单本身存储在Orders
表中)。quantity
列为订单中每个物品的数量。在这个例子中,这一列的描述增加了DEFAULT 1
,指示DBMS,如果不给出数量则使用数量1
。
默认值经常用于日期或时间戳列。例如,通过指定引用系统日期的函数或变量,将系统日期用作默认日期。MySQL用户指定DEFAULT CURRENT_DATE()
,Oracle用户指定DEFAULT SYSDATE
,而SQL Server用户指定DEFAULT GETDATE()
。遗憾的是,这条获得系统日期的命令在不同的DBMS中几乎都是不同的。表17-1列出了这条命令在某些DBMS中的语法。这里若未列出某个DBMS,请参阅相应的文档。
表17-1 获得系统日期
DBMS | 函数/变量 |
---|---|
Access | NOW() |
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL Server | GETDATE() |
SQLite | date('now') |
提示:使用DEFAULT
而不是NULL
值
复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:
- 用新的列布局创建一个新表;
- 使用
INSERT SELECT
语句(关于这条语句的详细介绍,请参阅第15课)从旧表复制数据到新表。有必要的话,可以使用转换函数和计算字段; - 检验包含所需数据的新表;
- 重命名旧表(如果确定,可以删除它);
- 用旧表原来的名字重命名新表;
- 根据需要,重新创建触发器、存储过程、索引和外键。