创建和操作表

创建表

创建表的方法

  • 直接用交互创建表和管理工具
  • 表也可以直接用SQL语句操纵

    表创建基础

利用CREATE TABLE创建表,需以下信息

  • 新表的名字,在关键字CREATE TABLE之后
  • 表列的名字和定义,用逗号隔开。
  • 部分DBMS需要指定表的位置。
    1. mysql> CREATE TABLE Products
    2. -> ( prod_id CHAR(10) NOT NULL,
    3. -> vend_id CHAR(10) NOT NULL,
    4. -> prod_name CHAR(254) NOT NULL,
    5. -> prod_price DECIMAL(8,2) NOT NULL,
    6. -> prod_desc TEXT(1000) NULL
    7. -> );

解释: 表名后面跟着的列,是表的定义,括在园括号之中,各列直接用逗号分割,一共有五个表,列名后面跟数据类型,圆括号结束。

使用NULL值

允许使用NULL值的列,也允许插入行时不给出该列的值,如果不允许该行没值,可以使用NULL

  1. mysql> CREATE TABLE Order_s
  2. -> (
  3. -> order_num INTEGER NOT NULL,
  4. -> order_date DATETIME NOT NULL,
  5. -> cust_id CHAR(10) NOT NULL
  6. -> );
  7. Query OK, 0 rows affected (0.02 sec)

使用列的含义使用NOT NULL来插入,阻止插入的列没事值。

混合NULL与NOT NULL列的表

  1. mysql> CREATE TABLE Vendors
  2. -> (
  3. -> vend_id CHAR(10) NOT NULL,
  4. -> vend_name CHAR(50) NOT NULL,
  5. -> vend_address CHAR(50),
  6. -> vend_city CHAR(50),
  7. -> vend_state CHAR(5),
  8. -> vend_zip CHAR(10),
  9. -> vend_country CHAR(50)
  10. -> );

指定默认值

插入行时,如果不指定值,自动采用默认值

  1. mysql> CREATE TABLE OrderItems
  2. -> (
  3. -> order_num INTEGER NOT NULL,
  4. -> order_item INTEGER NOT NULL,
  5. -> prod_id CHAR(10) NOT NULL,
  6. -> quantity INTEGER NOT NULL DEFAULT 1,
  7. -> item_price DECIMAL(8,2) NOT NULL
  8. -> );

解释: quantity 用于存放订单中的物品,给了一个默认值DEFAULT 1 ,如果没有给值,默认是1

默认值经常用于日期跟时间戳

  • Mysql 用户指定DEFAULT CURRENT_DATE()

    更新表

使用 ALTER TABLE 语句来更新内容,但有几个地方要注意

  • 表中包含数据是不用对其进行更新。
  • 所有的DBMS都允许表添加列
  • 许多DBMS不允许删除更新列
  • ALTER TABLE 之后给出要更改的表面。
  • 所做更改的列表
    1. mysql> ALTER TABLE Vendors
    2. -> ADD vend_phone CHAR(20);
    3. Query OK, 0 rows affected (0.13 sec)
    4. Records: 0 Duplicates: 0 Warnings: 0

解释:给Vendors 表添加一个列,数据类型为CHAR

删除列

  1. mysql> ALTER TABLE Vendors
  2. -> DROP COLUMN vend_phone;
  3. Query OK, 0 rows affected (0.11 sec)
  4. Records: 0 Duplicates: 0 Warnings: 0

注意: 使用ALTER TABLE 过程是无法撤销的,所以操作之前,需要进行备份。

删除表

使用DROP TABLE来删除整个表

  1. mysql> DROP TABLE CustCopy;
  2. Query OK, 0 rows affected (0.02 sec)

删除整个CustCopy表。DROPY无法删除带有关系规则的表。

重命名表

使用RENAME语句来重命名表

  1. mysql> RENAME TABLE Vendor TO Vendors;
  2. Query OK, 0 rows affected (0.01 sec)

原文: https://cxiaodian.gitbooks.io/mysql/content/chapter16.html