概述
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语句中忽略的空格。
语句可以再一个长行上输入,也可以分成许多行,它们没有差别。
- 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。
- 表中列名为quantity为订单中每个物品的数量。这个表中,列的描述
-
默认值
经常用于日期或时间戳列
。- 例如:通过指定引用
系统日期的函数或变量
,将系统日期用作默认日期。- 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表。删除表没有确认,也不能撤销,执行这条语句将
永久删除该表
。
- 这条语句删除Custcopy表。删除表没有确认,也不能撤销,执行这条语句将
-
提示:使用关系规则防止意外删除
- 许多DBMS允许强制实施有关规则,防止删除与其他相关联的表。再实施这些规则时,如果对某个表发布一条DROP TABLE语句,且该
表是某个关系的组成部分,则DBMS将阻止这条语句执行,直到该关系被删除为止
。 如果允许,应该启用这些选项,它能防止意外删除有用的表
。
- 许多DBMS允许强制实施有关规则,防止删除与其他相关联的表。再实施这些规则时,如果对某个表发布一条DROP TABLE语句,且该
四、重命名表:
-
每个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
-
这些语句必须小心使用,并且应该再备份后使用。
最后
以上就是忧郁黄豆为你收集整理的SQL 创建、更新、删除表、重命表名SQL 创建、更新、删除表、重命表名的全部内容,希望文章能够帮你解决SQL 创建、更新、删除表、重命表名SQL 创建、更新、删除表、重命表名所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复