文章目录
1. 更新数据
为了更新(修改)表中的数据,可以使用 update 关键字,共有俩种更新数据的方式:
- 更新表中特定的行
- 更新表中所有的行
在更新数据时,千万注意不要省略where 子句,稍不注意,就会更新表中所有的行,在执行语句前一定要了解语句可能对哪些内容做出更改;
1.1 更新单行数据
update 语句十分简便,只要注意好作用范围即可,其由三部分组成:
- 要更新的表;
- 列名和它们的新值;
- 确定要更新行的过滤条件
如 customers 表中 tom 要设置新的电子邮箱,那么只需要以下的语句即可:
update customers
set cust_email = 'tom@email.com'
where cust_name = 'tom';
当没有where 条件语句时,update 操作会更新 customers 表中所有的 cust_email 字段,将其全部设置为新提供的值;
1.2 更新多行数据
当更新多个列时,语句有所不同,如:
update customers
set cust_email = 'tom@email.com',
cust_city = 'newyourk'
where cust_name = 'tom';
只需要将需要更新的多个列使用逗号分隔,分别给定它们对应的值即可,最后一列不需要逗号;
1.3 更新数据时出现错误的情况
在使用update 更新多行数据时,如果其中一行的数据未正确更新,如对一个设置了 ont null 属性的字段进行更新为null 值时,会返回错误信息,而且会将其他已经更新了数据列全部恢复到更新之前;
但是如果想发生错误时,也继续更新正确的值,那么可以使用 IGNORE 关键字,如:UPDATE IGNORE customers ;
1.4 更新数据时使用子查询
update 中可以使用子查询,使用 select 语句检索出的数据更新列数据,只要在对应的字段后用括号将子查询包裹即可,如:
update customers
set cust_email = 'tom@email.com',
cust_city = (select city from table_name where ids = id)
where cust_name = 'tom';
1.5 批量替换某列特定部分的值
使用 update 语句时,我们可以同时使用 replace 关键字来达到替换表中限定部分值的实现,例如,我们的 goods 表中有 name名字列,现在我们需要修改列中所有包含 “zhang” 字段的数据,将字母“a”修改为字母“A”,我们可以使用下列的命令来实现:
update goods set name = replace(name,'a','A') where name like '%zhang%';
replace 关键字用于替换指定列中,需要替换的特定字符;
1.6 删除某个列的值
想要达到删除表中某个列的值的效果,只需要将该列的值更新为 null 即可,但此操作的前提是该字段允许设置为 null 值,否则无法操作成功;
2.删除数据
想要删除表中的数据,使用 DELETE 关键字,一般有俩种使用方式:
- 删除表中特定的行
- 删除表中所有的行
与 UPDATE 一样,在删除数据时一定要注意 WHERE 条件子句的使用,稍不注意就会删除表中全部的行;
2.1 删除特定的行
delete from customers
where cust_id = 1006;
如上面的SQL语句,就是删除 cust_id = 1006 的行,语句十分简便,只需要注意给定表名及限定条件即可;
2.1 删除全部的行
如条上述语句中如果省略 where 子句,那么则会删除此表中所有的行;
DELETE 语句删除的是表中的内容,并不直接删除表,删除表使用 DROP 语句;
如果表中数据较多,使用 DELETE 语句有时效率不是那么快捷,如果想快速删除表中所有的行,也可以使用
TRUNCATE TABLE 表名;
其本质是直接删除这张表,然后按照此前的表结构重新新建一张表,它可以完成相同的工作,但是效率更高;
3.更新与删除的原则
想要更新或删除表记录时,一定要遵循以下的原则,这样可以保证你尽可能的少出错:
- 除非明确打算删除或更新全部的行,否则一定要使用 WHERE 子句;
- 保证每个表都有主键,且尽可能的在 WHERE 子句中使用主键限制范围;
- 在对更新或删除操作使用 WHERE 子句前,应该先使用 SELECT 语句测试子句条件,确认其过滤的结果是自己想要的;
- 使用强制实施引用完整性的数据库,这样 MySql 将不允许删除具有与其它表相关联的数据的行;
259




被折叠的 条评论
为什么被折叠?



