MySQL基础-03增删改
插入数据 insert
insert
是用来插入(添加)行到数据库表中的,有以下几种方式:
- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查询的结果
第一种语法
insert into tablename
values(...值)
insert
语句一般没有输出
-
values括号里的内容每个列必须提供一个值,如果没有值,应该使用NULL(对于自动增量,同样也是这样)
-
上面的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下一次表结构变动后各个列保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的
第二种语法
select into tablename(...列名)
values(...值)
因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序。其优点是,即使表的结构改变,此INSERT语句仍然能正确工作。
并且,自动增量的列、允许NULL值的列和有默认值的列是可以省略的的,当你不想给这些列赋值时,可以忽略它
性能
数据库经常被多个客户访问,对处理什么请求以及用什么次序处理进行管理是MySQL的任务。INSERT操作可能很耗时(特别是有很多索引需要更新时),而且它可能降低等待处理的SELECT语句的性能
解决:如果数据检索是最重要的(通常是这样),则你可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级
insert low_priority into ...
这个关键字同样适用于之后的改 update
和 删delete
插入多行
-
多条insert语句,一次提交,以分号分隔
-
保持每条语句的列名和次序相同,以下面的方式组合
insert into table(...列名) values( ... ), ( ... );
这种方式的效率比使用多条insert语句快,可以提高数据库处理的性能
插入检索出的数据
顾名思义,这种方式是由一条 insert
语句和一条 select
语句组成的
insert into table(...列名)
select ...
from ...
insert和select的列名不要求一定要匹配,只关心列的位置,对应插入即可
更新数据 update
分类
- 更新表中特定行
- 更新表中所有行
组成
update
语句由三部分组成
- 要更新的表
- 列名和它们的新值
- 确定要更新行的过滤条件
语法
update tablename
set 列名1 = new_value(,)
(列名2 = new_value)
where condition
在更新多个列时,只需要使用单个SET命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)
ignore
关键字
如果用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出一个现错误,则整个UPDATE操作被取消(错误发生前更新的所有行被恢复到它们原来的值)。为即使是发生错误,也继续进行更新,可使用IGNORE关键字。
update ignore tablename
...
删除数据 delete
delete
是删除整行而不是某个列,如果想删除某个列,可以通过 update
该列的值为NULL
分类
- 删除表中特定行
- 删除表中所有行
语法
delete from tablename
where condition
注意
- delete只是删除行,但哪怕把所有行都删除,也没有删除表本身
- 如果要删除所有行,不要使用delete,可以使用
TRUNCATE TABLE
语句,速度更快 - MySQL没有撤销(undo)按钮。应该非常小心地使用UPDATE和DELETE,否则你会发现自己更新或删除了错误的数据