第4章 数据更新-SQL基础教程

第4章 数据更新-SQL基础教程_第1张图片

4-1 数据的插入(INSERT语句的使用方法)

什么是INSERT

create table product_ins(
	product_id char(4) primary key not null,
	product_name varchar(100) not null,
	product_type varchar(32) not null,
	sale_price int default 0,
	purchase_price int,
	regist_date date
);

INSERT语句的基本语法

INSERT INTO <表名> (列1, 列2, 列3, ……)
VALUES (值1, 值2, 值3, ……);

/*
将列名和值用逗号隔开,分别括在()内,这种形式称为清单
表名后面的列清单和 VALUES 子句中的值清单的列数必须保持一致
但是使用默认值时列数无需完全一致

原则上,执行一次 INSERT 语句会插入一行数据。因此,
插入多行时,通常需要循环执行相应次数的 INSERT 语句
*/
insert into product_ins
(product_id,product_name,product_type,sale_price,purchase_price,regist_date)
values
('0001','T恤衫','衣服',1000,500,'2009-09-20');
-- 插入多行数据时将多条 VALUES 子句通过逗号进行分隔排列 
insert into product_ins
values
('0002','打孔器','办公用品',500,320,'2009-09-11'),
('0003','运动T恤','衣服',4000,2800,NULL),
('0004','菜刀','厨房用具',3000,2800,'2009-09-20');

列清单的省略

-- 对表进行全列 INSERT 时,可以省略表名后的列清单
insert into product_ins
values
('0005','高压锅','厨房用具',6800,5000,'2009-01-15');

插入NULL

-- INSERT 语句中想给某一列赋予 NULL 值时,可以直接在 VALUES子句的值清单中写入 NULL
insert into product_ins
values
('0006','叉子','厨房用具',500,NULL,'2009-09-20');

插入默认值

-- 通过显式方法插入默认值:在 VALUES 子句中指定 DEFAULT 关键字
insert into product_ins
values
('0007','擦菜板','厨房用具',default,790,'2009-04-28');

/*
通过隐式方法插入默认值:在列清单和VALUES中省略设定了默认值的列
省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定为NULL)
*/
insert into product_ins
(product_id,product_name,product_type,purchase_price,regist_date)
values
('0008','擦菜板','厨房用具',790,'2009-04-28');

从其他表中复制数据

create table product_copy(
	product_id char(4) primary key not null,
	product_name varchar(100) not null,
	product_type varchar(32) not null,
	sale_price int,
	purchase_price int,
	regist_date date
);
-- 将商品表中的数据复制到商品复制表中
insert into product_copy
(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;
/*
INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何SQL语法
但即使指定了ORDER BY子句也没有任何意义,因为无法保证表内部记录的排列顺序
*/
create table product_type(
	product_type varchar(32) primary key not null,
	sum_sale_price int,
	sum_purchase_price int
);

insert into product_type
(product_type, sum_sale_price, sum_purchase_price)
select product_type, sum(sale_price), sum(purchase_price)
from product
group by product_type;

4-2 数据的删除(DELETE语句的使用方法)

DROP TABLE语句和DELETE语句

①  DROP TABLE 语句可以将表完全删除
②  DELETE 语句会留下表(容器),而删除表中的全部数据

DELETE语句的基本语法

DELETE FROM <表名>;

-- 如果想将整个表全部删除,可以使用DROP TABLE语句,如果只想删除表中全部数据,需使用DELETE语句
delete from product;

DELETE语句的删除对象并不是表或者列,而是记录(行)

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

DELETE FROM <表名>
WHERE <条件>;

/* 
可以通过WHERE子句指定对象条件来删除部分数据
DELETE 语句中不能使用 GROUP BY、HAVING 和 ORDER BY 三类子句,而只能使用WHERE子句
*/
delete from product
where sale_price >= 4000;

TRUNCATE <表名>

-- 与 DELETE 不同的是,TRUNCATE 只能删除表中的全部数据,而不能通过WHERE子句指定条件来删除部分数据
truncate product;

4-3 数据的更新(UPDATE语句的使用方法)

UPDATE语句的基本语法

UPDATE <表名>
SET <列名> = <表达式>;

update product
set regist_date = '2009-10-10';

指定条件的UPDATE语句(搜索型UPDATE)

UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;

update product
set sale_price = sale_price * 10
where product_type = '厨房用具';

使用NULL进行更新

-- 使用UPDATE语句可以将值清空为NULL(但只限于未设置NOT NULL约束的列)
update product
set regist_date = null
where product_id = '0008';

多列更新

update product 
set sale_price = sale_price * 10,purchase_price = purchase_price / 2
where product_type = '厨房用具';

4-4 事务

什么是事务

事务就是需要在同一个处理单元中执行的一系列更新处理的集合

创建事务

事务开始语句START TRANSACTION;
DML语句①;
DML语句②;
DML语句③;
. . .
事务结束语句(COMMIT或者ROLLBACK);

start transaction;

	update product
	set sale_price = sale_price - 1000
	where product_name = '运动T恤';

	update product
	set sale_price = sale_price + 1000
	where product_name = 'T恤衫';
	
commit; -- rollback;

ACID特性

DBMS 的事务都遵循四种特性,将这四种特性的首字母结合起来统称为 ACID 特性

■原子性(Atomicity)
原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行
■一致性(Consistency)
一致性指的是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者 NOT NULL 约束等
■隔离性(Isolation)
隔离性指的是保证不同事务之间互不干扰的特性
■持久性(Durability)
持久性也可以称为耐久性,指的是在事务(不论是提交还是回滚)结束后,DBMS 能够保证该时间点的数据状态会被保存的特性

你可能感兴趣的:(SQL基础教程)