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 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');
-- 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;
① DROP TABLE 语句可以将表完全删除
② DELETE 语句会留下表(容器),而删除表中的全部数据
DELETE FROM <表名>;
-- 如果想将整个表全部删除,可以使用DROP TABLE语句,如果只想删除表中全部数据,需使用DELETE语句
delete from product;
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;
UPDATE <表名>
SET <列名> = <表达式>;
update product
set regist_date = '2009-10-10';
UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;
update product
set sale_price = sale_price * 10
where product_type = '厨房用具';
-- 使用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 = '厨房用具';
事务就是需要在同一个处理单元中执行的一系列更新处理的集合
事务开始语句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;
DBMS 的事务都遵循四种特性,将这四种特性的首字母结合起来统称为 ACID 特性
■原子性(Atomicity)
原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行
■一致性(Consistency)
一致性指的是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者 NOT NULL 约束等
■隔离性(Isolation)
隔离性指的是保证不同事务之间互不干扰的特性
■持久性(Durability)
持久性也可以称为耐久性,指的是在事务(不论是提交还是回滚)结束后,DBMS 能够保证该时间点的数据状态会被保存的特性