您的位置:首页 > 数据库

SQL 必知必会 Chapter 17 —— 创建和操纵表

2019-03-17 16:07 148 查看
版权声明:From James Lu https://blog.csdn.net/weixin_44617258/article/details/88620971

typora-copy-images-to: SQL 必知必会

文章目录

  • SQL 必知必会 Chapter 17 创建和操纵表
  • 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 文档
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: