分享

UC头条:如何向表中插入数据以及如何更新、删除表中的数据

 青松青又青 2022-11-07 发布于贵州

1.插入

INSERT用来将行插入到数据库表中。插入有几种方式:

插入完整的行。

插入行的一部分。

插入某些查询的结果。

INSERT语法要求指定表名和插入到新表中的值。例如,我们将一个新顾客插入到customers表中。

插入前:

点击加载图片

运行结果如下:

点击加载图片

插入到新表中的值由VALUES子句给出,以这种方式插入数据时,我们必须为每一列提供一个值。而且各列必须以他们在表定义中出现的次序填充。虽然这种插入数据的语法很简单,但并不安全,应该尽量避免使用。因为上面的SQL语句高度依赖于表中列的定义次序。比较安全的写法,如下:

运行结果如下:

点击加载图片

在上述写法中,我们在表名后的括号里明确指定了列名,VALUES中的第一个值对应于第一个指定列名,第二个值对应于第二个列名,如此等等。因为提供了列名,只要VALUES中的值和指定的列名能匹配上就行,不一定按照各列出现在表中的实际次序。这样做的好处是,即使表结构发生改变,这条INSERT语句仍然能正确工作。由于明确指定了列名,所以我们可以随意指定列的顺序。

例如,我们也可以如下插入数据:

运行结果如下:

点击加载图片

注意事项:1.不要使用没有明确给出列的INSERT语句。给出列能使SQL代码继续发挥作用,即使表结构发生了变化。2.不管使用哪种INSERT语法,VALUES的数目都必须正确。如果不提供列名,则必须给每个表列提供一个值;如果提供列名,则必须给列出的每个列一个值。否则,就会产生一条错误消息,相应的行不能成功插入。

由于明确列出了列名,我们在进行插入数据时,可以省略某些列,这表示可以只给某些列提供值,给其他列不提供值。例如,我们可以如下插入数据:

INSERTINTOCustomers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country)VALUES('1000000006','ToyLand','123AnyStreet','NewYork','NY','11111','USA');

运行结果如下:

点击加载图片

在这个例子中,我们省略了cust_contact和cust_email这两列。如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:1.该列定义为允许NULL值。2.在表定义中给出默认值。这表示如果不给出值,将使用默认值。如果表中不允许有NULL值或者默认值,这时却省略了表中的值,DBMS就会产生错误消息,相应的行不能成功插入。

INSERT还可以用来将查询出的数据插入到表中。就是所谓的INSERTSELECT。它由一条INSERT语句和一条SELECT语句组成。

例如,未进行操作前,customersnew表中的内容是空的:

点击加载图片

我们从customers表中查询数据插入到customersnew表中。

INSERTINTOcustomersnew(cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country)SELECTcust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_countryFROMcustomers;

运行结果如下:

点击加载图片

可以发现已经执行完成。

然后我们打开customersnew表,可以发现数据已经插入成功:

点击加载图片

在这个例子中,INSERT和SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。事实上,DBMS一点儿也不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一列,第二列将用来填充表列中指定的第二列,如此等等。

INSERTSELECT中SELECT语句可以包含WHERE子句,以过滤插入的数据。

另外,有时候,我们需要把一个表的内容复制到另外一张表。这时候我们可以使用:

CREATETABLEcustcopyASSELECT*FROMcustomers;

运行结果如下:

点击加载图片

点击加载图片

可以发现sql语句的执行与表内容的复制都已完成,其内容与customers中的内容一致

2.更新

下面我们来讲下如何更新数据:更新表中的数据可以使用UPDATE语句,有两种使用UPDATE的方式:1.更新表中的特定行。2.更新表中的所有行。

使用UPDATE语句非常容易,基本的UPDATE语句由三部分组成:1.要更新的表。2.列名和它们的新值。3.确定要更新哪些行的过滤条件。

举个简单的例子,例如我们要更新客户1000000005的电子邮箱地址,语句如下:

执行结果如下:

点击加载图片

UPDATE语句以WHERE子句结束,它告诉DBMS更新哪一行。没有WHERE子句,DBMS将会用这个电子邮件地址更新Customers表中的所有行,这不是我们希望的。

更新多列的语法稍微不同,例如:

执行结果如下:

点击加载图片

在更新多个列时,只需要使用一条SET命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。在此例子中,更新顾客1000000006的cust_contact和cust_email列。

要删除某个列的值,可设置它为NULL。例如:

UPDATECustomersSETcust_email=NULLWHEREcust_id='1000000005';

执行结果如下:

点击加载图片

在使用UPDATE语句时,不要省略WHERE子句,因为稍不注意,就会更新表中所有的行。

3.删除

下面来讲下如何删除数据:从一个表中删除数据,使用DELETE语句。有两种使用DELETE的方式:1.从表中删除特定的行;2.从表中删除所有行。例如:从Customers表中删除一行:

DELETEFROMCustomersWHEREcust_id='1000000006';

执行结果如下:

点击加载图片

DELETE不需要列名或通配符。DELETE删除整行而不是删除列。要删除指定的列,请使用UPDATE语句。

如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATETABLE语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。

使用UPDATE和DELETE时所遵循的重要原则:1.除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。2.在UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多