增:
INSERT INTO table1(id, name, address) VALUES(1, ygl, 'beijing')——适用于T-sql和PL/SQL;
SELECT id, name, address INTO table2 FROM table1——自动创建table2,T-sql用法;
INSERT INTO table2(id, name, address) SELECT id, name, address FROM table1
这里简单说一下第三句SQL插入语句,由于可以指定插入到talbe2中的列,以及可以通过相对较复杂的查询语句进行数据源获取,可能使用起来会更加
的灵活一些,但我们也必须注意,我们在指定目标表的列时,一定要将所有非空列都填上,否则将无法进行数据插入,还有一点比较容易出错的地方就是
,当我们写成如下简写格式:
INSERT INTO table2 SELECT id, name, address FROM table1
此时,我们如果略掉了目标表的列的话,则默认会对目标表的全部列进行数据插入,且SELECT后面的列的顺序 必须和目标表中的列的定义顺序完全一
致才能完成正确的数据插入,这是一个很容易被忽略的地方,值得注意。
删:
DELETE FROM table WHERE 范围
批量删除
1.like与 in批量删除指定记录
like语法
like主要是用来模糊查询
sql = "delete from A where field like '%ABC%'" 这个可用于字符与数字
in 语法
sql = "delete from A where field id(1,2,3)" 这个只能用在数字
关联删除
delete B from B
where exists (select 1 from A where B.accountid=A.accountid);
sql = "delete from A where field like '%ABC%'" 这个可用于字符与数字
in 语法
sql = "delete from A where field id(1,2,3)" 这个只能用在数字
关联删除
delete B from B
where exists (select 1 from A where B.accountid=A.accountid);
假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1
会发现删除失败,因为lock wait timeout exceed的错误。因为这条语句所涉及的记录数太多,因此我们通过LIMIT参数分批删除,比如每10000条进行一次删除,那么我们可以利用 MySQL这样的语句来完成
DELETE FROM syslogs WHERE status=1 ORDER BY statusid LIMIT 10000;
改:
UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value查:
全部
SELECT * FROM table
部分内容
SELECT values FROM table
条件查询
SELECT values FROM table WHERE values=kkfd
分页查询
SELECT * FROM table LIMIT 21,31