SQL 创建、更新、删除表、重命表名

SQL 创建、更新、删除表、重命表名

一、创建表:

  • SQL不仅用于表数据操纵,还用来执行数据库和表的所有操作,包括表本身的创建和处理。

  • 一般有两种创建表的方法:

    1.多数DBMS都具有交互式创建和管理数据库表的工具。(可视化工具)

    2.表也可以直接用SQL语句操纵。(原生SQL语句)

  • 用程序创建表,可以使用SQL的CREATE TABLE语句

    • 需要注意的是,使用交互式工具时实际上就是使用SQL语句。
  • 注意:语法差别

    • 再不同的SQL实现中,CREATE TABLE语句的语法可能有所不同。
1.1:表创建基础:
  • 利用CREATE TABLE创建表,必须给出下列信息:

    1.新表的名字,再关键字CREATE TABLE 之后给出

    2.表列的名字和定义,用逗号分隔

    3.有的DBMS还要求指定表的位置;

    CREATE TABLE Products_01(
        prod_id  CHAR(10)  NOT NULL,
        vend_id  CHAR(10)  NOT NULL,
        prod_name CHAR(10) NOT NULL,
        Prod_price  DECIMAL(8,2) NOT NULL,
        prod_desc   VARCHAR(1000)  NULL
    );
    

    查看一下新创建的表:

    mysql> show tables;
    +------------------+
    | Tables_in_fe_cow |
    +------------------+
    | custcopy         |
    | customers        |
    | orderitems       |
    | orders           |
    | products         |
    | products_01      |  # 上述新创建的表
    | vendors          |
    +------------------+
    7 rows in set (0.00 sec)
    
    • 表名紧跟CREATE TABLE关键字
    • 实际表的定义(所有列)括再圆括号中,各列之间用逗号分隔。这个表由5列组成。
    • 每列的定义以列名(它再表中必须是唯一的)开始,后跟列的数据类型
    • 整条语句以圆括号后的分号结束。
  • 注意:语句格式化

    • SQL语句中忽略的空格。语句可以再一个长行上输入,也可以分成许多行,它们没有差别。
  • 提示:替换现有的表

    • 再创建新的表时,指定表名必须不存在,否则会出错。
1.2:使用NULL值
  • NULL值就是没有值或缺值
  • 允许NULL值的列也允许再插入行时不给出该列的值。不允许NULL值的列不接收没有列值的行。
  • 每个表列要么是NULL列,要么是NOT NULL列,这种状态再创建时由表的定义规定
  • 注意:指定NULL
    • 再不指定NOT NULL 时,多数DBMS认为指定的是NULL,但不是所有的DBMS都这样。
  • 注意:主键和NULL值得
    • 主键是唯一标识表中每一行的列。只有不允许NULL值的列可作为主键,允许NULL值的列不能作为唯一标识。
  • 注意:理解NULL
    • 不要把NULL值与空字符串相混淆。
    • NULL值没有值,不是空字符串。如果指定’ '(两个单引号,其间没有字符),这再NOT NULL列中是允许的。空字符串是有效值,它不是无值。
    • NULL值用关键字NULL而不是空字符串指定
1.3:指定默认值:
  • SQL允许指定默认值,再插入行时如果不给出值,DBMS将自动采用默认值。

  • 默认值再CREATE TABLE 语句的列定义中用关键字DEFAULT指定

    CREATE TABLE OrderItems_01 (
        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
    );
    
    • 表中列名为quantity为订单中每个物品的数量。这个表中,列的描述增加了DEFAULT 1,指示DBMS,如果不给出数量,则使用数量1。
  • 默认值经常用于日期或时间戳列

    • 例如:通过指定引用系统日期的函数或变量,将系统日期用作默认日期。
      • MySQL用户指定DEFAULT CURRENT_DATE()。
  • 提示:使用DEFAULT而不是NULL值

    • 建议使用DEFAULT而不是NULL列,对于用于计算或数据分组的列更是如此。

二、更新表:

  • 更新表的定义,可以使用ALTER TABLE语句。

  • 使用ALTER TABLE 时需要考虑的事情:

    1.不要再表中包含数据时对其进行更新。

    2.应该再表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大改动。

    3.所有DBMS都允许给现有的表增加列,不过对所增加列的数据类型(以及NULL和DEFAULT的使用)有所限制。

    • 可以看出,对已有表做更改既复杂又不统一。
  • 使用ALTER TABLE 更改表结构,必须给出下面的信息:

    1.再ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错)。

    2.列出要做哪些更改。

  • 下面举个栗子:

    ALTER TABLE Orderitems_01[表名]  ADD[增加]  total_price[新的列名]  DECIMAL(10,2)[数据类型];
    
    mysql> desc Orderitems_01;
    +-------------+---------------+------+-----+---------+-------+
    | Field       | Type          | Null | Key | Default | Extra |
    +-------------+---------------+------+-----+---------+-------+
    | order_num   | int(11)       | NO   |     | NULL    |       |
    | order_item  | int(11)       | NO   |     | NULL    |       |
    | prod_id     | char(10)      | NO   |     | NULL    |       |
    | quantity    | int(11)       | NO   |     | 1       |       |
    | item_Price  | decimal(8,2)  | NO   |     | NULL    |       |
    | total_price | decimal(10,2) | YES  |     | NULL    |       |  # 新增加的
    +-------------+---------------+------+-----+---------+-------+
    6 rows in set (0.00 sec)
    
    • 这条语句给Orderitems_01表增加一个名为total_price的列,其数据类型为DECIMAL(10,2)。
  • 更改或删除列、增加约束或增加键,这些操作也使用类似的语法

  • 注意:ALTER TABLE 和 SQLite

    • SQLite对使用ALTER TABLE执行的操作有所限制。最重要的一个限制是,它不支持使用ALTER TABLE 定义主键和外键,这些必须再最初创建表时指定
  • 特别注意:小心使用ALTER TABLE

    • 使用ALTER TABLE要极为小心,应该在进行改动前做完整的备份(模式和数据的备份)。
    • 数据库表的更改不能撤销,如果增加了不需要的列,也许无法删除它们。
    • 类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。

三、删除表:

  • 删除表(删除整个表而不是其内容),使用DROP TABLE语句

    DROP   TABLE   CustCopy[表名];
    
    • 这条语句删除Custcopy表。删除表没有确认,也不能撤销,执行这条语句将永久删除该表
  • 提示:使用关系规则防止意外删除

    • 许多DBMS允许强制实施有关规则,防止删除与其他相关联的表。再实施这些规则时,如果对某个表发布一条DROP TABLE语句,且该表是某个关系的组成部分,则DBMS将阻止这条语句执行,直到该关系被删除为止
    • 如果允许,应该启用这些选项,它能防止意外删除有用的表

四、重命名表:

  • 每个DBMS对表的重命名的支持有所不同。对于DB2、Mari-aDB、MySQL、Oracle和PostgreSQL用户使
    RENAME语句

  • 所有重命名操作的基本语法都要求指定旧表名和新表名

    RENAME TABLE  Orders_01[原表名]  TO  New_orders[新表名];
    
    mysql> show tables;
    +------------------+
    | Tables_in_fe_cow |
    +------------------+
    | customers        |
    | new_orderitems   |
    | new_orders       |   #  上述重命名的表名
    | orderitems       |
    | orders           |
    | products         |
    | products_01      |
    | vendors          |
    +------------------+
    8 rows in set (0.00 sec)
    

五、总结:

  • 创建新表:CREATE TABLE

  • 更改表列:ALTER TABLE

  • 删除表:DROP TABLE

  • 重命名表名:RENAME TABLE

  • 这些语句必须小心使用,并且应该再备份后使用。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值