SQL的数据定义(下):
数据库表:
er图
D. SQL Server修改表的列
1. 修改列的数据类型
要修改列的数据类型,请使用以下语句:
新数据类型必须与旧数据类型兼容,否则,如果列具有数据且无法转换,则会出现转换错误。
请看下面示例。
首先,创建一个包含只有一列数据类型为 INT 的新表:
其次,在表中插入一些行:
接下来,将列的数据类型从 INT 修改为 VARCHAR :
第三,插入带有字符串数据的新行:
第四,将列的数据类型从 VARCHAR 修改回 INT :
SQL Server发出以下错误:
2. 更改列的大小
以下语句创建一个新表,其中一列的数据类型为 VARCHAR(10) :
将一些示例数据插入到 t2 表中:
可以按如下方式增加列的大小,修改为: 50 :
但是,当减小列的大小时,SQL Server会检查现有数据以查看它是否可以根据新大小转换数据。 如果转 换失败,SQL Server将终止该语句并发出错误消息。
例如,如果将列 c 的大小减小为 5 个字符:
SQL Server发出以下错误:
3. 向列添加NOT NULL约束
以下语句创建一个具有可为空列的新表:
以下语句向表中插入一些行:
如果要将 NOT NULL 约束添加到列 c ,则必须首先将 NULL 更新为非null,例如:
然后再添加 NOT NULL 约束:
4. 删除列
E. SQL Server删除表
DROP TABLE 语句从数据库中删除一个或多个表。
在上面语法中,
首先, database_name 指定要删除的表的名称。
其次,指定创建表的数据库的名称以及表所属的模式的名称。数据库名称是可选的。 如果不指 定, DROP TABLE 语句将删除当前数据库中的表。
第三,使用 IF EXISTS 子句仅在表存在时才删除表。 自SQL Server 2016 13.x起,支持 IF EXISTS 子句。 如果删除不存在的表,则会出现错误。 如果表已经存在,则 IF EXISTS 子句有条 件地删除该表。
当SQL Server删除表时,它还会删除该表的所有数据,触发器,约束和权限。 此外,SQL Server不会显 式删除引用已删除表的视图和存储过程。 要显式删除这些对象,必须使用 DROP VIEW 和 DROP PROCEDURE 语句。
SQL Server允许使用单个 DROP TABLE 语句来一次删除多个表,如下所示:
SQL Server DROP TABLE示例:
下面来看一些使用SQL Server DROP TABLE 语句的示例。
- 删除不存在的表
以下语句删除 sales 模式中的 revenue 表:
在此示例中, revenue 表不存在。 因为它使用 IF EXISTS 子句,所以语句成功执行,但是没有表可以 删除。
2、删除单个表示例
以下语句在 sales 模式中创建一个名为 delivery 的新表:
要删除 delivery 表,请使用以下语句:
3、删除具有外键约束的表
以下语句在 procurement 模式中创建两个新表: supplier_groups 和 supplier :
下面尝试删除 supplier_groups 表:
SQL Server发出以下错误:
SQL Server不允许删除外部约束引用的表。 要删除此表,必须先删除引用外键约束或引用表。
在这种情况下,必须先删除 supplier 表或 supplier 表中的外键约束,然后再删除 supplier_groups 表。
如果使用单个 DROP TABLE 语句删除两个表,则必须将引用表放在前面,如下面的查询所示:
SQL 撤销索引、表以及数据库
通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
SQL DROP INDEX 语句
我们可以使用 DROP INDEX 命令删除表格中的索引。
用于 Microsoft SQLJet (以及 Microsoft Access) 的语法:
用于 MS SQL Server 的语法:
DROP INDEX table_name.index_name
用于 IBM DB2 和 Oracle 语法:
DROP INDEX index_name
用于 MySQL 的语法:
ALTER TABLE table_name DROP INDEX index_name
SQL DROP TABLE 语句
DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):
DROP TABLE 表名称
SQL DROP DATABASE 语句
DROP DATABASE 语句用于删除数据库:
DROP DATABASE 数据库名称
SQL TRUNCATE TABLE 语句
如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):
F. SQL Server截断表
TRUNCATE TABLE 类似于没有 WHERE 子句的 DELETE 语句。 但是, TRUNCATE 语句执行得更快,并且使 用的系统和事务日志资源更少。
TRUNCATE TABLE与DELETE比较
与 DELETE 语句相比, TRUNCATE TABLE 具有以下优点:
- 使用较少的事务日志
DELETE 语句一次删除一行,并在事务日志中为每个删除的行插入一个条目。
另一方面, TRUNCATE TABLE 语句通过释放用于存储表数据的数据页来删除数据,并仅在事务日志中插入页面解除分配。
- 使用更少的锁
使用行锁执行 DELETE 语句时,表中的每一行都被锁定以便删除。 TRUNCATE TABLE 锁定表和页,而不是每一行。
- 标识重置
如果要截断的表具有标识列,则当使用 TRUNCATE TABLE 语句删除数据后,具有标识列的计数器将重置 为开始的值(一般是: 1 )。
以上就是我最近整理的新的知识内容,现在分享给你们,希望可以帮助到你们。