继续上一篇博客的序幕,接下来,写一些关于数据操作的“改”和“删”的相关课题。在本次的学习总结中,一致围绕着数据的操作问题,这也是数据库基本、最简单的应用之一。
1.修改和删除表
在创建好表之后,如果想对表中的数据进行修改,可以使用SQL提供的ALTER TABLE语句;如果在使用过程中发现某个表已不再需要,可以通过SQL提供的DROP TABLE语句将该表删除。
1.1修改SQL表
可以使用ALTER TABLE语句修改存储在数据库中的基表定义。ALTER TABLE语句的基本语法:
ALTER TABLE <table_name>
ADD [COLUMN] <column definition>
|ALTER [COLUMN] <column_name>
{SET DEFAULT <default value> | DROP DEFAULT}
| DROP [COLUMN] <column_name> {CASCADE | RESTRICT}
上述语句可以完成三中不同的功能:添加列、更改列和删除列。其中,ADD [COLUMN] 子句的占位符<column definition>与CRERATE TABLE语句中的列定义类似。在这个占位符中可以提供列名和数据类型,还可以添加默认子句、列约束或整序。
例如,在“客户信息”表中添加一个名为“备注”的列。执行语句如下:
ALTER TABLE 客户信息
ADD COLUMN 备注 DATE
与ADD [COLUMN]子句不同,ALTER [COLUMN]子句只能实现设置默认或删除默认值两种功能。例如,如果没有上述在表”客户信息“添加列”备注“中定义默认值,则通过下述语句为其添加默认值:
ALTER TABLE 客户信息
ALTER COLUMN 备注 SET DEFAULT 'Unknown'
如果想删除某一列的默认值,可以通过一下语句来实现:
ALTER TABLE 客户信息
ALTER COLUMN 备注 DROP DEFAULT
其中,子句DROP [COLUMN]提供了两个关键字
CASCADE和
RESTRICT,通过这两个关键字可以从表中删除列及其数据。如果指定CASCADE关键字则无论其他对象书否引用这一列,
列和列中的数据都将会被删除,并且所有引用该列的视图、约束、列程或触发器也将会被删除。如果指定RESTRICT关键字,则
只有在没有视图、约束、列程或触发器引用该列时,该列才会被删除。例如,从”客户信息“表中,删除列”备注“,但并不考虑是否有依赖该列的视图、约束、列程或触发器,执行语句:
ALTER TABLE 客户信息
DROP COLUMN 备注 CASCADE
1.2删除SQL表
删除SQL表及其存储数据的过程比较简单,其语法格式:
DROP TABLE <table_name> {CASCADE | RESTRICT}
从上述语句可以看出,当删除一个表时,要对关键字关键字CASCADE和RESTRICT,通过这两个关键字可以从表中删除列及其数据。如果指定CASCADE关键字则无论其他对象书否引用这一列,列和列中的数据都将会被删除,并且所有引用该列的视图、约束、列程或触发器也将会被删除。如果指定RESTRICT关键字,则只有在没有视图、约束、列程或触发器引用该列时,该列才会被删除。例如,从”客户信息“表中,删除列”备注“,但并不考虑是否有依赖该列的视图、约束、列程或触发器,执行语句:
ALTER TABLE 客户信息
DROP COLUMN 备注 CASCADE
通过DROP TABLE语句删除表,不仅将表中的数据删除,还将删除表定义本身。如果只想删除表中的数据,而保留表的定义,则使用DELETE语句。DELETE语句删除表中的所有行,或者根据语句中的定义只删除特定的行。关于DELETE 语句的用法将在接下来的课题中介绍。
2.更新SQL数据
当数据被添加到数据表后,会经常需要修改,如客户的地址发生了变化,货品库存量的增减等。在SQL中,对数据的是修改是通过使用UPDATE语句实现的。UPDATE语句可以修改述语句表中的一列或多列的值。其基本语法结构:
UPDATE <Table_Name>
SET <Set clause sxpression>[{,<Set clause expression>}...]
[WHERE <Search_condition>]
可以看出,UPDATE子句和SET子句是必选的,而WHERE子句是可选的。UPDATE子句中,必须指定将要更新的数据表的名称。WHERE子句可以指定要搜索的条件,以限制只对满足条件的行进行更新。
2.1使用UPDATE修改数据
在对UPDATE语句的各个部分进行分析后,现在把他们放在一些示例中,这些示例都死基于数据库”销售管理系统“的。
在数据库”销售管理系统中“,更新编号为1002和1003的商品信息。即把这两家的商品单价提高10%。
UPDATE 商品信息
SET 单价=单价*1.1
WHERE 供应商编号=1002 or 供应商编号=1003
Set子句可以同时更新多个列,这时,各列之间要用逗号”,“隔开。示例如下:
UPDATE 商品信息
SET 单价=单价*1.1,产地='南京市'
WHERE 商品名称='Maxtor 40G 硬盘'
但是UPDATE无法对同一列的多个行赋不同的值。比如,可以更新上述代码中的Maxtor 40G硬盘行的单价和产地信息,但不能在一条UPDATE语句中更新CORSAIR VS512MB内存和Maxtor 40G硬盘的单价。遇到这种情况后,应使用多个UPDATE语句。其代码:
UPDATE 商品信息
SET 单价=500
WHERE 商品名称='Maxtor 40G硬盘'
UPDATE 商品信息
SET 单价=260
WHERE 商品名称='CORSAIR VS512MB内存'
2.2使用SELECT语句更新
前面介绍过在INSERT语句中使用SELECT语句代替VALUES语句,同样在UPDATE语句中,SET子句也可以使用SELECT语句。SELECT语句出现在SET子句中等号的右边。也就是说,SET子句所需要的值由SELECT子句所需的值由SELECT语句提供。
下面的这些示例都是基于数据库”销售管理系统“。第一个示例更新”商品信息“数据表中的供应商编号,即把所有产地为北京市的商品编号修改为“中达恒业”的编号。其代码如下:
UPDATE 商品信息
SET 供应商编号=
(SELECT 供应商编号 FROM 供应商信息
WHERE 供应商名称='中达恒业')
WHERE 产地='北京市'
根据“供应商信息”中的相关信息,查的中达恒业的编号为1005,这样SE子句就可以理解为:SET 供应商编号=1005。因此,在“商品信息”表中,所有产地为北京市的行,其供应商编号都被修改为1005。
通过进一步的修改SET子句,可增加UPDATE语句的复杂性。比如,假定在SELECT提取的值赋给供应商编号前,需要将此值加4,那么可对表达式修改:
UPDATE 商品信息
SET 供应商编号=
(SELECT 供应商编号 FROM 供应商信息
WHERE 供应商名称='中达恒业')+4
WHERE 产地='北京市'
因此,新的SET子句就可以表示为:SET 供应商编号=(1005)+4,执行后,相关行的编号将被修改为1009。
3.删除SQL数据
当数据库的添加工作完成以后,随着不断使用和对数据的修改,表中可能存在一些无用的数据,这些无用的数据不仅会占用空间,还会影响修改和查询的速度,所以应及时将它们删除。
在SQL支持的所有数据修改语句中,DELETE语句可能是最简单的语句。它只包含两个子句。DELETE语句的基本结构:
DELETE FROM <table_name>
[WHERE <search_condition>]
DELETE子句是必选项,WHERE子句是可选项。WHERE子句,在这里用于限定要删除的行,即删除满足搜索条件的行。如果在DELETE语句中没有使用WHERE子句,那么将删除整个表。
注意在DELETE语句中没有指定列名,这是由于DELETE语句不能从表中删除单个列的值。它只能删除行。如果要删除特定的列值,可使用UPDATE语句把该列值设为NULL,当然,该列值必须支持NULL值。
现在举几个简单的示例,这些示例都是基于数据库”销售管理系统“的:
从“业务员信息”表中删除姓名为“王俊峰”的数据:
DELETE FROM 业务员信息
WHERE 业务员姓名='王俊峰'
从“业务员信息”表中删除所有姓“黄”的业务员:
DELETE 业务员信息
WHERE 业务员姓名 LIKE '黄%'
由此可以看出,从表中删除的行数取决于WHERE子句中定义的搜索条件。注意,使用DELETE语句删除数据时,与INSERT和UPDATE语句一样,必须满足表定义中的约束限制。
4.阶段小结
对于数据操作的学习,已经进行了一段的学习,关于今天的学习感觉来说,真的很充实,自己先前对于SQL的数据的操作学习算是很马虎的,而经过今天的总结学习来说,感觉这部分知识并不难,知识繁琐,知识都是相联系的,从不会单独存在,理解了一个简单的公式之后,下面的练习,就是小菜一碟。也希望能够给大家带来一定的知识冲击!
依然在后面的时间来总结自己在SQL的学习,期待着自己的努力!