typora-copy-images-to: SQL 必知必会
文章目录
SQL 必知必会 Chapter 17 创建和操纵表
17.1 创建和操纵
-
多数DBMS 都具有交互式创建和管理数据库表的工具
-
表也可以直接用SQL 语句操纵
-
创建表使用CREATE TABLE 必须给出以下信息
- 新表的名字,在关键字CREATE TABLE 之后给出
- 表列的名字和定义,用逗号分隔
- 有的DBMS 还要求指定表的位置
CREATE TABLE Products
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL,
prod_desc VARCHAR(1000) NULL
);
# 如果要替换现有的表,SQL 要求首先手工删除该表(请参阅后面的内容),然后再重建它
-
在不指定NOT NULL 时,多数DBMS 认为指定的是NULL
-
主键是其值唯一标识表中每一行的列。只有不允许NULL值的列可作为主键,允许NULL 值的列不能作为唯一标识
-
NULL 值是没有值,不是空字符串,空字符串是一个有效的值,它不是无值
-
指定默认值
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
);
# 注意DEFAULT
# 默认值经常用于日期或时间戳列
# MySQL 用户指定DEFAULT CURRENT_DATE()
17.2 更新表
-
使用ALTER的注意事项
- 理想情况下,不要在表中包含数据时对其进行更新。应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大
改动。 - 所有的DBMS 都允许给现有的表增加列,不过对所增加列的数据类型(以及NULL 和DEFAULT 的使用)有所限制
- 许多DBMS 不允许删除或更改表中的列
- 多数DBMS 允许重新命名表中的列
- 许多DBMS 限制对已经填有数据的列进行更改,对未填有数据的列几乎没有限制
- 理想情况下,不要在表中包含数据时对其进行更新。应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大
-
在ALTER TABLE 之后给出要更改的表名(该表必须存在,否则将出错)
-
列出要做哪些更改
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
# 这条语句给Vendors 表增加一个名为vend_phone 的列,其数据类型为CHAR。
- 我们应该在进行改动前做完整的备份
17.3 删除表
DROP TABLE Custcopy;
- 使用关系规则防止意外删除
- 如果对某个表发布一条DROP TABLE 语句,且该表是某个关系的组成部分,则DBMS 将阻止这条语句执行,直到该关系被删除为止。
17.4 重命名表
- 所有重命名操作的基本语法都要求指定旧表名和新表名
- MySQL用户使用RENAME语句
17.5 小结
- 介绍了几条新的SQL 语句。CREATE TABLE 用来创建新表,ALTER
TABLE 用来更改表列(或其他诸如约束或索引等对象),而DROP TABLE
用来完整地删除一个表。这些语句必须小心使用,并且应该在备份后使
用。由于这些语句的语法在不同的DBMS 中有所不同,所以更详细的信
息请参阅相应的DBMS 文档