SQL 必知必会 Chapter 17


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。

SQL 必知必会 Chapter 17

  • 我们应该在进行改动前做完整的备份

17.3 删除表

DROP TABLE Custcopy;
  • 使用关系规则防止意外删除
  • 如果对某个表发布一条DROP TABLE 语句,且该表是某个关系的组成部分,则DBMS 将阻止这条语句执行,直到该关系被删除为止。

17.4 重命名表

  • 所有重命名操作的基本语法都要求指定旧表名和新表名
  • MySQL用户使用RENAME语句

17.5 小结

  • 介绍了几条新的SQL 语句。CREATE TABLE 用来创建新表,ALTER
    TABLE 用来更改表列(或其他诸如约束或索引等对象),而DROP TABLE
    用来完整地删除一个表。这些语句必须小心使用,并且应该在备份后使
    用。由于这些语句的语法在不同的DBMS 中有所不同,所以更详细的信
    息请参阅相应的DBMS 文档