第17课 创建和操纵表
这一课讲授创建、更改和删除表的基本知识。
17.1 创建表
两种创建表的方式:
- 多数
DBMS
都具有交互式创建和管理数据库表的工具。 - 表也可以直接用
SQL
语句操纵。
使用交互式工具时实际上就是使用
SQL
语句。这些语句不是用户编写的,界面工具会自动生成并执行相应的SQL
语句。
17.1.1 表创建基础
利用CREATE TABLE
创建表,必须给出下列信息:
- 新表的名字,在关键字
CREATE TABLE
之后给出; - 表列的名字和定义,用逗号分割;
- 有的
DBMS
还要求指定表的位置;
对于MySQL
,varchar
必须替换为text
;
对于DB2
,必须从最后一列中去掉NULL
。
17.1.2 使用NULL值
NULL
值就是没有值或缺值。- 不允许
NULL
值的列不接受没有列值的行,即在插入或更新行时,该列必须有值。 - 每个表列要么是
NULL
列,要么是NOT NULL
列,这种状态在创建时由表的定义规定。 NULL
为默认设置,如果不指定NOT NULL
,就认为指定的是NULL。
提示:主键和NULL值
主键是其值唯一标识表中每一行的列。
- 只有不允许
NULL
值的列可作为主键- 允许
NULL
值的列不能作为唯一标识别。
17.1.3 指定默认值
SQL
允许指定默认值,在插入行时如果不给出值,DBMS
将自动采用默认值。默认值在CREATE TABLE
语句的列定义中用关键字DEFAULT
指定。
- 默认值经常用于日期或时间戳列。
提示:多使用DEFAULT而不是NULL值
17.2 更新表
使用ALTER TABLE
时需要考虑的事情:
- 理想情况下,不要在表中包含数据时对其进行更新。
应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大改动。 - 所有的
DBMS
都允许给现有的表增加列,不过对所增加列的数据类型(以及NULL
和DEFAULT
的使用)有所限制。 - 许多
DBMS
不允许删除或更改表中的列。 - 多数
DBMS
允许重新命名表中的列。 - 许多
DBMS
限制对已经填有数据的列进行更改,对未填有数据的列几乎没有限制。
使用ALTER TABLE
更改表结构,必须给出下面的信息:
- 在
ALTER TABLE
之后给出要更改的表名(该表必须存在,否则将出错); - 列出要做哪些更改。
复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:
(1)用新的列布局创建一个新表;
(2)使用INSERT SELECT
语句(关于这条语句的详细介绍,请参阅第15课)从旧表复制数据到新表。有必要的话,可以使用转换函数和计算字段;
(3)检验包含所需数据的新表;
(4)重命名旧表(如果确定,可以删除它);
(5)用旧表原来的名字重命名新表;
(6)根据需要,重新创建触发器、存储过程、索引和外键。
17.3 删除表
删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE
语句即可。
删除表没有确认,也不能撤销,执行这条语句将永久删除该表。
17.4 重命名表
DB2
、MariaDB
、MySQL
、Oracle
和PostgreSQL
用户使用RENAME
语句,SQL Server
用户使用sp_rename
存储过程,SQLite
用户使用ALTER TABLE
语句。
所有重命名操作的基本语法都要求指定旧表名和新表名。