一、插入数据
插入数据是DML操作中非常基础的部分,我们可以通过INSERT语句来完成。
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);
以上语句中,我们需要指定需要插入数据的表名以及对应需要插入的字段值,每个字段值需要以逗号隔开。可以直接在VALUES关键字后面指定需要插入的对应字段值。
例如,如果我们需要在人员信息表中插入一条新的记录:
INSERT INTO staff (name, age, position, salary) VALUES ('张三', 28, '经理', 8000);
我们可以看到,我们指定了插入到人员信息表中,字段分别是name、age、position和salary,对应的插入值分别是'张三'、28、'经理'和8000。
二、更新数据
更新数据是DML操作中重要的部分之一,我们可以使用UPDATE语句来完成。
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... WHERE 条件;
以上语句中,我们需要指定需要更新的表名以及对应需要更新的字段值和条件。可以直接在SET关键字后面指定需要更新的对应字段值,WHERE可以用来指定更新数据的条件。
例如,如果我们需要将人员信息表中名字为'张三'的人员的薪水改为10000:
UPDATE staff SET salary = 10000 WHERE name = '张三';
我们可以看到,我们指定了更新人员信息表中的薪水字段为10000,同时更新条件为名字为'张三'。
三、删除数据
删除数据是DML操作中非常基础的部分,我们可以使用DELETE语句来完成。
DELETE FROM 表名 WHERE 条件;
以上语句中,我们需要指定需要删除的表名以及对应需要删除的条件。可以直接在WHERE关键字后面指定需要删除的条件。
例如,如果我们需要从人员信息表中删除名字为'张三'的人员:
DELETE FROM staff WHERE name = '张三';
我们可以看到,我们指定了从人员信息表中删除名字为'张三'的条件。
四、事务处理
事务处理是DML操作中非常重要的部分,事务机制可以保证在一个操作序列中,所有的操作要么全部成功执行,要么全部失败回滚,保证了数据的一致性和完整性。
我们可以使用BEGIN、ROLLBACK、COMMIT等关键字来进行事务控制。
例如:
BEGIN; -- 开始事务 INSERT INTO staff (name, age, position, salary) VALUES ('余乐', 30, '助理经理', 5000); UPDATE staff SET salary = salary * 1.1 WHERE name = '张三'; INSERT INTO staff_log (op_name, op_content) VALUES ('操作员', '对员工信息更新操作'); COMMIT; -- 提交事务
以上语句中,我们使用BEGIN关键字开始了一个事务,然后进行了插入、更新和插入日志信息的操作。最后我们使用COMMIT关键字提交了事务,所有的操作均已生效。
如果其中一个操作执行失败,则可以通过ROLLBACK关键字回滚整个事务,保证数据一致性。
五、异常处理
DML操作中,由于输入的数据或者操作的环境等诸多因素,可能会出现异常情况。为了保证程序的健壮性和稳定性,我们需要进行异常处理。
我们可以使用TRY、EXCEPT等关键字来进行异常处理。例如:
BEGIN TRY UPDATE staff SET salary = salary * 1.1 WHERE name = '张三'; END TRY BEGIN CATCH PRINT '发生异常:' + ERROR_MESSAGE(); END CATCH
以上语句中,我们使用BEGIN TRY和END TRY包含需要进行异常处理的部分。如果在执行UPDATE语句时出现异常,就会跳转至BEGIN CATCH和END CATCH的范围内执行异常处理代码。在上述例子中,我们打印出了异常信息。
六、锁机制
在多并发访问的环境中,数据的并发控制显得尤为重要。为了避免多个用户同时修改一个数据,我们可以使用锁机制来进行并发控制。锁机制有共享锁和排它锁两种。
共享锁可以让多个用户同时读取同一份数据,但是不允许修改该数据。排它锁则是只允许一个用户同时访问数据,其他用户需要等待该用户释放锁之后才能进行访问。我们可以使用SELECT和UPDATE语句来实现共享锁和排它锁。
共享锁:
SELECT * FROM staff WITH (NOLOCK) WHERE age > 25;
以上语句中,我们使用WITH (NOLOCK)指定在读取staff表时不加任何锁。
排它锁:
UPDATE staff SET salary = salary + 1000 WHERE name = '张三' WITH (ROWLOCK, XLOCK);
以上语句中,我们使用WITH (ROWLOCK, XLOCK)指定在更新staff表中名字为'张三'记录时使用行级别锁和排它锁。