mysql使用--数据的插入,删除和更新

1.UNION合并多个结果集
如:SELECT m1, n1 FROM t1 WHERE m1 < 2 UNION SELECT m2, n2 FROM t2 WHERE m2 > 2;
默认下,某行在参与合并两个结果集均存在时,最终结果集中只包含一行。
如希望最终结果集包含两行,用UNION ALL
如:SELECT m1, n1 FROM t1 UNION ALL SELECT m2, n2 FROM t2;

2.插入数据
_1.插入完整的记录
如:INSERT INTO 表名 VALUES(列1的值, ..., 列n的值);
值得注意的是上述values后的每个()中必须为表的每一列指定值。

_2.插入记录的一部分
如:INSERT INTO 表名(列1, 列2) VALUES (列1的值, 列2的值);
如果表不止两列,上述语句只为表中指定两列插入值,其余列采用默认值,其余列必须指定了默认值。

_3.批量插入记录
指的是VALUES后的()可以有多个,之间用逗号分割,以便一次插入多行。

_4.将某个查询的结果集插入表中

CREATE TABLE first_table (
first_column INT,
second_column VARCHAR(100)
);

CREATE TABLE second_table(
s VARCHAR(200),
i INT
);

如:INSERT INTO second_table(s, i) SELECT second_column, first_column FROM first_table WHERE first_column < 5;
可以实现将SELECT子句得到结果集的多行作为插入子句的值来源,插入second_table

_5.INSERT IGNORE
对应一些是主键或UNIQUE键的列或列组合来说,它们不允许重复值出现。

ALTER TABLE first_table MODIFY COLUMN first_column INT UNIQUE;

如:INSERT IGNORE INTO first_table(first_column, second_column) VALUES(1, '哇哈哈');
由于我们用IGNORE修饰了INSERT,这样当first_table在插入前已经存在first_column1的行时,(1, '哇哈哈')会被忽略;不存在时,(1, '哇哈哈')将插入表中。
没有IGNORE修饰下,这样当first_table在插入前已经存在first_column1的行时,上述插入会报错。

_6.INSERT ... ON DUPLICATE KEY UPDATE
如:INSERT INTO first_table(first_column, second_column) VALUES(1, '哇哈哈') ON DUPLICATE KEY UPDATE first_column=10, second_column='雪碧';
上述语句的意思是,若first_table表插入前已经存在first_column值为1的行,则插入(1, '哇哈哈')的实际行为将是设置此行的first_column10,设置此行的second_column'雪碧';若不存在,则插入(1, '哇哈哈')。

如:INSERT INTO first_table(first_column, second_column) VALUES (2, '红牛'), (3, '红茶') ON DUPLICATE KEY UPDATE second_column = VALUES(second_column);
上述语句意思是,向表first_tables插入多行,对每一行如此行的first_column值在表中已经存在,则插入行的实际行为是表中对应行的second_column列设置为插入行中此列的值。

3.删除数据
如:DELETE FROM 表名 [WHERE 表达式];
执行过程为:
(1).从FROM子句得到结果集1
(2).通过WHERE子句对结果集1执行过滤得到结果集2
(3).将结果集2中每一行从表中移除。
忽略WHERE时,会删除表中所有行。

进一步,如:DELETE FROM first_table WHERE first_column > 4 ORDER BY first_column DESC LIMIT 1;
执行过程为:
(1).通过FROM子句得到结果集1
(2).通过WHERE子句对结果集1过滤得到结果集2
(3).通过ORDER BY对结果集2排序得到结果集3
(4).通过LIMIT对结果集3过滤得到结果集4
(5).从表中移除结果集4中每行

4.更新数据
如:UPDATE 表名 SET 列1=值1, 列2=值2, ..., 列n=值n [WHERE 表达式];
执行过程为:
(1).基于表得到结果集1
(2).通过WHERE子句过滤结果集1得到结果集2
(3).对结果集2中每一行执行SET子句

进一步,如:UPDATE first_table SET second_column = '爽歪歪' WHERE first_column > 4 ORDER BY first_column DESC LIMIT 1;
执行过程为:
(1).通过表名得到结果集1
(2).通过WHERE子句对结果集1过滤得到结果集2
(3).通过ORDER BY对结果集2排序得到结果集3
(4).通过LIMIT对结果集3过滤得到结果集4
(5).对结果集4中每一行执行SET子句

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值