插入
单行插入
1.insert into 表名 values(col1_value,col2_value,...);
- 每个列必须提供一个值,如果没有值,要提供NULL值
- 每个列必须与它在表中定义的次序相同
2.insert into 表名(col1,col2...) values(col1_value,col2_value...);
- values必须与指定的列名次序匹配,不一定按照列在表中的实际出现的次序,即使表结构改变也能正常的工作
注意
如果表的定义允许,在插入时可以省略某些列,表的定义应该如下
- 该列允许为NULL值
- 在表定义时给出默认值,如果插入时不给出值,则使用默认值
多行插入
insert into 表名(col1,col2...) values(col1_value1,col2_value1...),values(col1_value2,col2_value2...),values(col1_value3,col2_value3...);
插入检索出的数据
insert into 表名1(col1,col2...) select col1,col2... from 表名2
- 这条语句插入多少行依赖于表名1中有多少行,如果表名1为空,则没有数据插入,此操作为合法操作
- 它不关心select返回的列名,使用的是列的位置,select中的第一列用于填充表中的第一列等
- select可以使用where过滤数据
拓展
由于数据库是被客户访问,对处理什么请求及什么次序处理是MySQL任务,insert很耗时并且可能降低select语句的性能
insert low_priority into 可以降低insert优先级也使用update和delete
更新
更新的是列,由三部分组成
- 要更新的表
- 列名和他们的值
- 确定要更新的过滤条件
update 表名 -> set 列名=要更新的值 -> where 过滤条件;
注意
- 一定要使用where!!!where!!!where!!!
- 可以在update中使用子查询,能够使select语句检索出的数据更新列数据
- 如果使用update更新多行,在更新时出现一个或多个错误,则整个update操作被取消,恢复到被更新的原来的值,若使用update ignore 表,可以继续更新
- 保证每个表都有主键,像where字句那样使用它
- 使用where之前,先使用select进行测试,保证过滤出正确的记录
删除
删除的是整行
delete from 表名 -> where 过滤条件;
要删除全部的行用
truncate table 表名;
此操作是将原来的表删除并创建一个新表,并不是逐行删除数据
注意
- 一定要使用where!!!where!!!where!!!
- delete删除的是表中的行或所有的行,不删除表本身
- 保证每个表都有主键,像where字句那样使用它
- 使用where之前,先使用select进行测试,保证过滤出正确的记录
- 删除列用update
- 强制实施引用完整性的数据库,这样mysql不允许删除具有与其他表相关联的数据的行