最新IBM水货笔记本价格,详细点击进入

查看完整版本: MySQL数据库技术(05)

风舞残阳 2008-4-2 17:55

MySQL数据库技术(05)

1.4.9删除或更新现有记录
有时,希望除去某些记录或更改它们的内容。DELETE和UPDATE语句令我们能做到这一点。
DELETE语句有如下格式:
DELETEFROMtbl_nameWHERE要删除的记录
WHERE子句指定哪些记录应该删除。它是可选的,但是如果不选的话,将会删除所有的记录。这意味着最简单的DELETE语句也是最危险的。
DELETEFROMtb1_name
这个查询将清除表中的所有内容。一定要当心!为了删除特定的记录,可用WHERE子句来选择所要删除的记录。这[wiki]类[/wiki]似于SELECT语
句中的WHERE子句。例如,为了删除president表中所有出生在Ohio的总统记录,可用下列查询:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202923113.JPG[/img]

DELETE语句中的WHERE子句的一个限制是只能够引用要删除记录的表中的列。在发布DELETE语句以前,最好用SELECT语句[wiki]测试[/wiki]一下相应的WHERE子句以确保实际删除的记录就是确实想要删除的记录(而且只删除这些记录)。假如想要删除TeddyRoosevelt的记录。下面的查询能完成这项工作吗?

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202923785.JPG[/img]

是的,感觉上它能删除您头脑中打算删除的记录。但是,错了,实际上它也能删除FranklinRoosevelt的记录。如果首先用WHERE子句检查一下就[wiki]安全[/wiki]了,如下所示:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202923887.JPG[/img]

现在我们明白了能选择出所需记录的WHERE子句了,因此DELETE查询可正确地构造如下:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924501.JPG[/img]

似乎删除一个记录需要做许多工作,不是吗?但是安全第一!(如果想使[wiki]键盘[/wiki]输入工作尽量少,可利用拷贝和粘贴[wiki]技术[/wiki]或采用输入行[wiki]编辑[/wiki]技术。更详细的[wiki]信息[/wiki],请参阅“与mysql交互的技巧”一节。)为了修改现有记录,可利用UPDATE语句,它具有下列格式:
UPDATEtbl_nameSET要更改的列WHERE要更新的记录这里的WHERE子句正如DELETE语句一样,是可选的,因此如果不指定的话,表中的每个记录都被更新。下面的查询将每个学生的名字都更改为“George”:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924875.JPG[/img]

显然,对于这样的查询必须极为小心。一般对正在更新的记录要更为小心。假定近来增加了一个新记录到历史同盟,但是只填写了此实体的少数几个列:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924750.JPG[/img]

然后意识到忘了设置其会员终止日期。那么可如下进行设置:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924114.JPG[/img]

可同时更新多个列。下面的语句将更新Jerome的[wiki]电子[/wiki]邮件和[wiki]通信[/wiki]地址:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924350.JPG[/img]

还可以通过设置某列的值为NULL(假设此列允许NULL值)“不设置”此列。如果在未来的某个时候Jerome决定支付成为终生会员的会员资格更新费,那么可以设置其记录的终止日期为NULL(“永久”)以标记他为终生会员。具体设置如下:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924427.JPG[/img]

正如DELETE语句一样,对于UPDATE,用SELECT语句测试WHERE子句以确保选择正确的更新记录是一个好办法。如果选择条件范围太窄或太宽,就会使更新的记录太少或太多。如果您试验过本节中的查询,那么必定已经删除和修改了samp_db表中的记录。在继续学习下一节的内容以前,应该撤消这些更改。按1.4.7节“增加新记录”最后的说明重新装载表的内容来完成这项工作。

[color=#0000ff]1.4.10改变表的结构
[/color]
回顾我们创建历史同盟member表时缺了一个会员号列,因此我们可以进行一次ALTERTABLE语句的练习。需要用ALTERTABLE,可以对表重新命名,增加或删除列,更改列的类型等等。这里给出的例子是关于怎样增加新列的。有关ALTERTABLE功能的详细内容,请参阅第3章。增加会员号列到member表的主要考虑是,其值应该是唯一的,以免各会员条目混淆。AUTO_INCREMENT列在此是很有用的,因为我们可以在增加新的号码时令My[wiki]SQL[/wiki]自动地生成唯一的号码。在CREATETABLE语句中,这样一个列的说明如下:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924262.JPG[/img]

对于ALTERTABLE,相应的句法也是类似的。可执行下列查询增加该列:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202924616.JPG[/img]

我们已经有一个存放会员号的列,现在怎样分配会员号给member表中的现有记录呢?很容易!MySQL已经做了这项工作。在增加一列到某个表时,MySQL将会用缺省值初始化该列值。对于AUTO_INCREMENT列,每个行将会产生一个新的顺序号。
页: [1]
查看完整版本: MySQL数据库技术(05)