依赖次序,安不安全,不能应付改变
INSERT INTO table_name VALUES(val_1,val_2,......);
安全,更繁琐的方法,这样即使表的结构改变这条语句任然可以继续工作,同时还可以忽略不用处理的列
被省略的列必须是 列定义允许为null或者表定义中给出默认值
INSERT INTO table_name(col_1,col_2,......)
VALUES(val_1,val_2,......);
/*
insert 操作可能比较耗时,特别是在很多索引需要更新的时候,而且它可能降低等待处理的
select 语句的性能。提高整体性能的方案如下:
*/
INSERT LOW_PRIORITY
INTO table_name(col_1,col_2,......)
VALUES(val_1,val_2,......);
一次插入多行,比分散的多条 insert 快
INSERT INTO table_name(col_1,col_2,col_3,....)
VALUES(val_1,val_2,val_3,.....),
(val_1,val_2,val_3,.....),
(val_1,val_2,val_3,.....),
(val_1,val_2,val_3,.....);
插入查询得到的数据 insert select 语句的用法
INSERT INTO db_alishop.`copy_user`
(user_name,user_birth)
SELECT reg_email,user_birth
FROM db_alishop.`user`;
更新和删除数据
小心不要省略where过滤条件,这样会导致更新所有的行对应的列
UPDATE table_name
SET col_name = val_1
WHERE ...;
更新多列
UPDATE table_name
SET col_1 = val_1,
col_2 = val_2
WHERE ...;
在 update 语句中使用 select 子查询检索出来的数据更新列数据。
ignore 关键字,默认发生更新作用在多个行,如果有一个或多个失败,
整个 update 语句产生的改变会被撤销,使用 ignore 可以忽略错误,
保留其他成功的更新。
UPDATE IGNORE table_name
SET col_name = val_1
WHERE ...;
用 update 删除某列的值,允许为 null 的情况下
UPDATE table_name
SET col_name = NULL
WHERE ...;
注意:如果不使用 where 过滤,默认删除所有的行,删除表的所有内容,而不删除表本身
DELETE FROM table_name
WHERE ...;
如果仅仅想删除表中的所有记录,不要使用 delete 用 truncate table
语句效率更好,先删除原表,然后创建一个新表,而不是逐行删除
TRUNCATE copy_user;