《SQL基础教程》学习笔记(二)

简介: SQL数据库开发

4 数据更新

4.1 数据的插入

使用insert向表中插入数据,原则上,每次执行一次数据的插入(列名,值)这种形式称为清单可以为表中的列设置默认值,可以在create时设置default约束设定插入值默认值可以通过两种是方式,在insert语句的values子句中指定default关键字(显示方法),或省略列清单(隐式方法)

insertinto <表名> (1,列2,列3...)

values (1,值1,值3...)

insertinto Product (product_id,product_name,product_type,sale_price,purchase_price,regist_date)

values ('0001','T恤衫','衣服',1000,500,'2009-09-20');

多行插入需要将多条values子句通过逗号进行分隔排列

向表中某一列赋予null值,可以直接在值清单中对应位置,但是该列不能设置not null约束

插入默认值有两种方式,显式和隐式

-- 显式  建议使用显式,可以清楚知道该列是使用了默认值
insert into Product (product_id,product_name,product_type,sale_price,purchase_price,regist_date) 
values ('0001','T恤衫','衣服',default,500,'2009-09-20');
-- 隐式 将设置了默认值的列清单和值清单中该列省略即可
insert into Product (product_id,product_name,product_type,purchase_price,regist_date) 
values ('0001','T恤衫','衣服',500,'2009-09-20');

如果在清单中省略了没有设置默认值的列,该列的值就会被设定为null,因此如果省略的是设置了not null的列,insert就会出错,

从其他地方复制数据

除了使用value子句指定具体的数据,还可以从其他表中复制数据,首先建立一个和Product表结构相同的表ProductCopy

insert into ProductCopy (product_id,product_name,product_type,sale_price,purchase_price,regist_date)
select product_id,product_name,product_type,sale_price,purchase_price,regist_date 
from Product  --不会对原结构有影响,相当于进行了备份


4.2 数据的删除

如果想删除整个表,使用drop table语句,如果想删除表中数据,用delete,

drop table语句和delete语句

删除数据可以将表完全删除、

delete语句会留下表(容器),而删除表中全部数据

delete from <表名>;  --保留数据表,仅仅删除全部数据,delete删除对象并不是表或者列,而是记录(行)

指定删除对象的delete语句(搜索型delete)

delete from <表名> where <条件>;  --delete中只用where,不用group by和having和order by
delete from Product where sale_price >=4000;  --通过where子句指定对象条件来删除部分数据
select * from Product;  --使用该句进行确认

删除和舍弃

标准sql中从表中删除数据的只有delete,还有数据库产品还存在truncate的语句,truncate是舍弃的意思

truncate <表名>; --与delete不同的是,truncate只能删除表中的全部数据,不能删除部分数据,处理速度比delete快


4.3 数据的更新

使用update语句个亿更改表中数据

update <表名> set <列名> = <表达式>;
update Product set registe_date = '2009-10-10';

搜索型update

update <表名> set <列名> = <表达式> where <条件>;
update Product set sale_price = sale_price *10 
where product_type = '厨房用具';

使用update语句可以将值清空为null(仅限于未设置not null约束的列)

--多列更新
1
update Product
set sale_price = sale_price *10,
    purchase_price = purchase_price/2
where product_type = '厨房用具';
2
update Product
set (sale_price,purchase_price) = (sale_price *10,purchase_price/2)
where product_type = '厨房用具';
-- 需要注意点但是第一种方法在所有的DBMS中是通用的,第二种将列清单化在某些DBMS中是不通用的


4.4 事务

事务需要在同一个处理单元中执行的一系列更新处理的集合,通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理

事务处理的终止指令包括commit(提交处理)和rollback(取消处理)

事务的四大特性:原子性、一致性、隔离性、持久性

-- 事务开始语句
--SQL Server、PostgreSQL
begin transaction
-- MySQL
start transaction
--Oracle、DB2
--结束事务只有commit 和 rollback两种
-- MySQL
start transaction;
update Product
    purchase_price = purchase_price/2
where product_type = '客厅用具';
update Product
set sale_price = sale_price *10
where product_type = '厨房用具';
commit;

结束事务的指令:commit是提交事务包含的全部更新处理的结束指令,相当于文件处理的覆盖保存,一旦提交,无法恢复到处理事务开始的前的状态,commit = 直线进行,万一误操作,只能重新建表,重新插入数据rollback取消处理是取消事务包含的全部更新处理的结束指令,相当于放弃保存,一旦回滚,数据库就会恢复到事务开始前的状态,rollback = 掉头回到起点

ACID特性

原子性(Atomicity)指事务结束的时候,其中包含的更新处理要么全部执行,要么完全不执行一致性(Consistency)是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者not null约束,也称为完整性隔离性(Isolation)保证各个事务间互不干扰的特性。该特性保证了了事务之间不会互相嵌套,另外在某个事务中进行的更改,在该事务 结束之前,对其他事务而言是不可见的。持久性(Durability)指的是事务结束之后DBMS能够保证该时间点的数据状态会被保存的特性,即使由于数据故障导致数据丢失,数据库也一定能通过某种手段进行恢复,最常见的是通过日志恢复到故障发生前的状态。
——End——

相关文章
|
8月前
|
SQL 数据库管理
第二章:基础查询与排序---SQL学习笔记
第二章:基础查询与排序---SQL学习笔记
86 0
|
8月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
|
8月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
8月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
java202304java学习笔记第六十六天-ssm-动态sql-一对一的配置实现1
java202304java学习笔记第六十六天-ssm-动态sql-一对一的配置实现1
71 0
java202304java学习笔记第六十七天-ssm-动态sql-多对多注解开发之1
java202304java学习笔记第六十七天-ssm-动态sql-多对多注解开发之1
69 0
|
8月前
|
SQL OLAP Serverless
第五章:SQL高级处理---SQL学习笔记
第五章:SQL高级处理---SQL学习笔记
77 0
|
8月前
|
SQL 关系型数据库 MySQL
第四章:集合运算---SQL学习笔记
第四章:集合运算---SQL学习笔记
115 0
|
8月前
|
SQL 关系型数据库 数据库
第三章:复杂一点的查询--SQL学习笔记
第三章:复杂一点的查询--SQL学习笔记
125 0
|
8月前
|
SQL 关系型数据库 MySQL
第一章:初识数据库---SQL学习笔记
第一章:初识数据库---SQL学习笔记
107 0