数据更新,学习笔记Ch4

SQL 基础知识梳理(四) - 数据更新

【博主】反骨仔    【原文】

星彩彩票app下载 1

  

4数额更新

数码的插入(INSERT语句的利用方法)

INSERT INTO ShohinIns (shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, 

条件上,试行叁回INSERT语句会插入一行数据。

 

对表举办全列INSERT时,能够简轻便单表名后的列清单。

省略INSERT语句中的列名,就能够活动设定为该列的暗中同意值(未有暗中同意值时会设定为NULL)。

 

从其余表中复制数据:INSERT …SELECT。

INSERT语句的SELECT语句中,可以使用WHERE子句恐怕GROUP BY子句等其他SQL语法。(但利用OWranglerDEENVISION BY子句并不会发出其余功能)。

  这是《SQL 基础知识梳理(三) - 聚合和排序》的下篇。

 

4-1数据的插入(INSERT语句)

--创建ProductIns表
CREATE TABLE ProductIns
(product_id    CHAR(4)    NOT NULL,
 product_name  VARCHAR(100) NOT NULL,
 product_type  VARCHAR(32)  NOT NULL,
 sale_price    INTEGER   DEFAULT 0,
 purchase_price  INTEGER  ,
 regist_date    DATE,
 PRIMARY KEY (product_id));
--向表中插入一行数据
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) 
VALUES ('0001', 'T恤衫', '衣服', 100, 50, '2009-09-20');

当values后的数量与列数不对等时会报错
条件上,实行二遍INSERT语句会插入一行数据

数据的删减(DELETE语句的使用)

DROP TABLE语句能够将表完全除去。

DELETE语句会留下表(容器),而除去表中的全部数码。

 

清空表:DELETE FROM Shohin;

DELETE语句的去除对象实际不是表或许列,而是记录(行)。

能够通过WHERE字句钦定对象条件来删除部分数据。

注:TRUNCATE <表名>; 只可以删除全部数目,正因为它无法具体地操纵删除对象,全数其处理速度比DELETE要快的多。因而需求删除全部多少时,使用TRUNCATE可以减弱实施时间。

 

 

目录

  • 安顿数据
  • 剔除数据
  • 立异数据
  • 事务

 

多行INSERT
--通常的INSERT
INSERT INTO ProductIns 
VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO ProductIns 
VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO ProductIns 
VALUES ('0004', '菜刀', '厨房用品', 3000, 2800, '2009-09-20');
--多行INSERT(Oracle除外)
INSERT INTO ProductIns VALUES
('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, NULL),
('0004', '菜刀', '厨房用品', 3000, 2800, '2009-09-20');

数量的翻新(UPDATE语句的运用办法)

UPDATE语句:

UPDATE <表名>

SET <列名> = <表达式>

WHERE <条件>;

使用UPDATE语句能够将值清空为NULL(但只限于未设置NOT NULL约束的列)。

多列更新:使用逗号将列进行分隔排列

UPDATE Shohin
   SET hanbai_tanka = hanbai_tanka * 10,
       shiire_tanka = shiire_tanka / 2
 WHERE shohin_bunrui = '厨房用具';

  

一、插入数据

星彩彩票app下载,  1.INSERT 语句的中坚语法

--语法:
--INSERT INTO <表名>(列1, 列2, ...) VALUES (值1, 值2, ...)

--示例
INSERT INTO dbo.Shohin
        ( shohin_id ,
          shohin_mei ,
          shohin_bunrui ,
          hanbai_tanka ,
          shiire_tanka ,
          torokubi
        )
VALUES  ( '0011' , -- shohin_id - char(4)
          'T 恤衫' , -- shohin_mei - varchar(100)
          '衣服' , -- shohin_bunrui - varchar(32)
          1000 , -- hanbai_tanka - int
          500 , -- shiire_tanka - int
          GETDATE()  -- torokubi - date
        );

星彩彩票app下载 2

 

    (1)列名和值用逗号隔开分离,分别放在括号里,这种方式称为清单。

        ( shohin_id ,        
          shohin_mei ,
          shohin_bunrui ,
          hanbai_tanka ,
          shiire_tanka ,
          torokubi
        )        
        --列清单

        ( '0011' , -- shohin_id - char(4)
          'T 恤衫' , -- shohin_mei - varchar(100)
          '衣服' , -- shohin_bunrui - varchar(32)
          1000 , -- hanbai_tanka - int
          500 , -- shiire_tanka - int
          GETDATE()  -- torokubi - date
        )        
        --值清单    

星彩彩票app下载 3星彩彩票app下载 4

INSERT INTO dbo.Shohin
        ( shohin_id ,
          shohin_mei ,
          shohin_bunrui ,
          hanbai_tanka ,
          shiire_tanka ,
          torokubi
        )
VALUES  ( '0012' , -- shohin_id - char(4)
          'T 恤衫' , -- shohin_mei - varchar(100)
          '衣服' , -- shohin_bunrui - varchar(32)
          1000 , -- hanbai_tanka - int
          500 , -- shiire_tanka - int
          GETDATE()  -- torokubi - date
        ),
        ( '0013' , -- shohin_id - char(4)
          'T 恤衫' , -- shohin_mei - varchar(100)
          '衣服' , -- shohin_bunrui - varchar(32)
          1000 , -- hanbai_tanka - int
          500 , -- shiire_tanka - int
          GETDATE()  -- torokubi - date
        );

贰遍性多行 INSERT

  

  2.省略列清单

INSERT INTO dbo.Shohin
VALUES  ( '0014' , -- shohin_id - char(4)
          'T 恤衫' , -- shohin_mei - varchar(100)
          '衣服' , -- shohin_bunrui - varchar(32)
          1000 , -- hanbai_tanka - int
          500 , -- shiire_tanka - int
          GETDATE()  -- torokubi - date
        );

  

  3.插入 NULL 值

INSERT INTO dbo.Shohin
VALUES  ( '0015' , -- shohin_id - char(4)
          'T 恤衫' , -- shohin_mei - varchar(100)
          '衣服' , -- shohin_bunrui - varchar(32)
          1000 , -- hanbai_tanka - int
          NULL , -- shiire_tanka - int
          GETDATE()  -- torokubi - date
        );

  【备注】插入 NULL 值的列不能够安装为 NOT NULL 约束。

  

  4.插入暗中同意值

--示例:创建表时设置默认值
CREATE TABLE ShohinIns
(
    id CHAR(4) NOT NULL,
    num INT DEFAULT 0    --DEFAULT 默认约束
)

--示例:INSERT 时显示插入默认值
INSERT INTO dbo.ShohinIns
        ( id, num )
VALUES  ( '001', -- id - char(4)
          DEFAULT  -- num - int
          )

--示例:INSERT 隐式插入默认值
INSERT INTO dbo.ShohinIns( id )
VALUES  ('002')

星彩彩票app下载 5

  【备注】建议选拔展现的办法插入值。倘使插入的时候隐式省略了列名,而且该列未有钦命私下认可值的时候,该列的值会被设定为 NULL(假若轻便的列设置了 NOT NULL 约束的话,实行会报错)。

  【总计】省略 INSERT 语句的列名,就能够自行设定该列的默许值(未有默许值时会设定为 NULL)。

  

  5.从别的表复制数据

--语法
INSERT ... 
SELECT ...

--示例
INSERT dbo.ShohinIns
        ( id, num )
SELECT shohin_id, shiire_tanka
FROM dbo.Shohin

--示例
INSERT INTO dbo.ShohinIns
        ( id, num )
SELECT id=1, num =2;

--示例
INSERT INTO dbo.ShohinIns
        ( id, num )
SELECT 1, 2;

   【备注】INSERT 语句中的 SELECT 语句中,能够应用 WHERE 子句或然 GROUP BY 子句等任何 SQL 语法。(但采纳 OPAJERODE瑞虎 BY 子句并不会产生此外意义。)

 

列清单的大要
-- 包含列清单
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
-- 省略列清单
INSERT INTO ProductIns VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');

计划数据足以毫不增多列名称

事务

专门的职业是内需在同一个管理单元试行的一多元更新处理的会集。

START TRANSACTION;

    -- 运动T恤的销售单价下调1000日元
    UPDATE Shohin
       SET hanbai_tanka = hanbai_tanka - 1000
     WHERE shohin_mei = '运动T恤';

    -- T恤的销售单价上浮1000日元
    UPDATE Shohin
       SET hanbai_tanka = hanbai_tanka   1000
     WHERE shohin_mei = 'T恤';

COMMIT;


START TRANSACTION;

    -- 运动T恤的销售单价下调1000日元
    UPDATE Shohin
       SET hanbai_tanka = hanbai_tanka - 1000
     WHERE shohin_mei = '运动T恤';

    -- T恤的销售单价上浮1000日元
    UPDATE Shohin
       SET hanbai_tanka = hanbai_tanka   1000
     WHERE shohin_mei = 'T恤';

ROLLBACK;

事务管理哪一天开头:

差十分的少全部的数据库产品,每条SQL语句就是叁个业务(自动提交情势)。

一旦急需回滚操作,须求关闭自动提交也许明示初始业务(start transaction)

 

事务的ACID特性:原子性、一致性、隔离性、持久性。.

  

 

二、删除数据

  1.2 种 删除数据的格局:

    (1)DROP TABLE 语句:删除表

    (2)DELETE 语句:删除表的数额

--语法
--DELETE FROM <表名>;

--示例
DELETE FROM dbo.ShohinIns;

  【备注】DELETE 语句删除的靶子是记录(行),不是表和列。

 

  2.点名删除对象的 DELETE 语句

--语法
--DELETE FROM <表名>
--WHERE <条件>;

--示例
DELETE FROM dbo.Shohin
WHERE hanbai_tanka >= 4000;

  【备注】能够由此WHERE 子句钦定对象条件来删除部分数据。

  【备注】DELETE 语句中不可能利用 GROUP BY、HAVING 和 OENVISIONDERubicon BY 三类子句。

  【备注】假如要去除表全体数目时请使用 TRUNCATE <表名>,它比 DELETE 子句更火速。

 

插入NULL
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) 
VALUES ('0006', '叉子', '厨房用具', 6800, 5000, NULL);

亟待小心的是,插入NULL的列相对无法设置NOT NULL约束

三、更新数据

  1.UPDATE 子句的主导语法

--语法
--UPDATE <表名>
--    SET <列名> = <表达式>

 

  2.点名条件的 UPDATE 语句

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

--示例
UPDATE dbo.Shohin
    SET hanbai_tanka = hanbai_tanka * 10
WHERE shohin_bunrui = '厨房用具';

  

  3、使用 NULL 实行更新

--示例
UPDATE dbo.Shohin
    SET torokubi = NULL
WHERE shohin_id = '008';

  【备注】唯有未安装 NOT NULL 约束和主键约束的列才可以清空为 NULL。

  

  4.多列更新

--示例
UPDATE dbo.Shohin
    SET hanbai_tanka = hanbai_tanka * 10,    --逗号分割
        shiire_tanka = shiire_tanka / 2
WHERE shohin_bunrui = '厨房用具'

 

插入默许值
--创建ProductIns表的CREATE TABLE语句
CREATE TABLE ProductIns
(product_id    CHAR(4)    NOT NULL,
 product_name  VARCHAR(100) NOT NULL,
 product_type  VARCHAR(32)  NOT NULL,
 sale_price    INTEGER   DEFAULT 0, --销售单价的默认值设定为0
 purchase_price  INTEGER  ,
 regist_date    DATE,
 PRIMARY KEY (product_id));
  • 经过显式方法插入暗中认可值
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
VALUES ('0007', '擦菜板', DEFAULT, 790, '2009-04-28');
  • 由此隐式方法插入默许值
INSERT INTO ProductIns (product_id, product_name, product_type, purchase_price, regist_price)
VALUES ('0007', '擦菜板', '厨房用具', 790, '2009-04-28');

省略sale_price列,值也简要

  • 未设定暗中同意值的情事
-- 省略purchase_price列(无约束):会赋予"NULL"
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, regist_price)
VALUES ('0008', '圆珠笔', '办公用品', 100, '2009-11-11');

-- 省略product_name列(设置了NOT NULL约束):错误!
INSERT INTO ProductIns (product_id, product_type, sale_price, purchase_price, regist_date)
VALUES('0009', '办公用品', 1000, 500, '2009-12-12');

省略INSERT语句的列名,就能够自动设定为该列的默许值(未有暗中同意值时会设定为NULL)

四、事务

  1.事务:要求在同三个管理单元中施行的一多种更新管理的集聚。

  2.创办工作:

--语法
--事务开始语句
--    DML 语句①;
--    DML 语句②;
--    ...
--事务结束语句(COMMIT 或 ROLLBACK);

    (1)COMMIT - 提交管理:提交业务包括的全部立异管理的达成指令。一旦付出,不恐怕苏醒到业务最初前的景况。

    (2)ROLLBACK - 裁撤管理:裁撤事务包罗的一体更新管理的了断指令。一旦回滚,数据库就能死灰复然到事情开首以前的景观。

 

--示例
BEGIN TRANSACTION;
    UPDATE dbo.Shohin
        SET hanbai_tanka = hanbai_tanka - 1000
    WHERE shohin_mei = '运动 T 恤';

    UPDATE dbo.Shohin
        SET hanbai_tanka = hanbai_tanka   1000
    WHERE shohin_mei = 'T 恤衫';

    DELETE FROM dbo.Shohin WHERE shohin_id = '0015';

ROLLBACK;  -- COMMIT

  

  3.ACID 特性

    (1)原子性(Atomicity):在业务截至时,当中蕴藏的换代处理依旧全体施行,要么完全不进行。

    (2)一致性(Consistency):事务中富含的拍卖,要满意数据库提前设置的束缚,也称完整性。

    (3)隔开性(lsolation):有限支撑区别专门的学业在此之前互不压抑的特征。

    (4)长久性(Durability):事务一旦甘休,DBMS 会保障该时点的多少状态能够保留的表征,也称耐久性。

      

从此外表中复制数据
-- 用来插入数据的商品复制表
-- 创建ProductCopy表的语句
CREATE TABLE ProductCopy
(product_id   CHAR(4)    NOT NULL,
 product_name  VARCHAR(100)  NOT NULL,
 product_type  VARCHAR(32)  NOT NULL,
 sale_price  INTEGER   ,
 purchase_price  INTEGER  ,
 regist_date   DATE   ,
 PRIMARY KEY (product_id));

接下去将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;

--创建ProductType表的CREATE TABLE语句
CREATE TABLE ProductType
(product_type   VARCHAR(32)   NOT NULL,
 sum_sale_price   INTEGER  ,
 sum_purchase_price  INTEGER  , 
 PRIMARY KEY  (product_type));
--插入Product表中数据合计值的INSERT...SELECT语句
INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price)
SELECT product_type, SUM(sale_price), SUM(purchase_price)
  FROM Product
GROUP BY product_type;
--确认插入的数据行
SELECT * FROM ProductType;

INSERT语句中的SELECT语句中,能够运用WHERE子句或然GROUP BY子句等其余SQL语法(但使用O本田CR-VDRE BY子句并不会产生别的效果)

备注

  这里运用 MS SQL Server 进行表达,不保障全部的 DBMS 实践结果精确。

 

4-3数据的删减(DELETE语句)

传送门

  《SQL 基础知识梳理(一) - 数据库与 SQL》

  《SQL 基础知识梳理(二) - 查询基础》

  《SQL 基础知识梳理(三) - 聚合和排序》

 


【参考】《SQL ゼロからはじめるデータベース操作》

 

DROP DELETE语句和DELETE语句

删去数据的三种方式:
1.DROP DELETE语句能够将表完全除去;
2.DELETE语句会留下表,而删除表中的整个数码。

DELETE语句的中坚语法
--保留数据表,仅删除全部数据行的DELETE语句
--清空Product表
DELETE FROM Product;

DELETE语句的去除对象并非表可能列,而是记录行。

点名删除对象的DELETE语句(寻找型DELETE)
--删除sale_price大于等于4000日元的数据
DELETE FROM Product
 WHERE sale_price >= 400;

DELETE语句中不得不使用WHERE子句,无法应用GROUP BY,HAVING,OREDGL450 BY三类子句

TRUNCATE语句
--删除表中全部数据
TRUNCATE <表名>;

TRUNCATE(吐弃)只好删除表中全体数据,而不能够通过WHERE子句指定条件来删除数据

4-3数据的换代(UPDATE语句)

UPDATE Product
   SET regist_date = '2009-10-10';

星彩彩票app下载 6

4-1.png

执行语句后,regist_date全体翻新为二〇一〇-10-10

内定条件的UPDATE语句
UPDATE Product
   SET sale_price = sale_price * 10
 WHERE product_type = '厨房用具';
采纳NULL实行革新
UPDATE Product
   SET regist_date = NULL
 WHERE product_id = '0008';
多列更新

借使我们须要将sale_price更新为原来的10倍,同一时候将purchase_price更新为本来的八分之四

-能够正确执行但略显麻烦的UPDATE语句
UPDATE Product
   SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';

UPDATE Product
   SET purchase_price = purchase_price / 2
 WHERE product_type = '厨房用具';

下边包车型地铁口舌能够张开联合:

--方式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 = '厨房用具';

办法1得以在装有DBMS中动用,格局2只好在PostgreSQL和DB第22中学选择

4-4事务

工作:需求在同二个处理单元中实行的一雨后苦笋更新管理的集合

成立职业

举个例子,大家须要两条立异管理:将活动西服的出售单价下滑一千台币;将羽绒服衫的行销单价上浮一千新币

BEGIN TRANSACTION;
  --将运动T恤的销售单价降低1000日元
  UPDATE Product
     SET sale_price = sale_price - 1000;
   WHERE product_name = '运动T恤';

  --将T恤衫的销售单价上浮1000日元
  UPDATE Product
     SET sale_price = sale_price  1000;
   WHERE product_name = 'T恤衫';
COMMIT;

COMMIT是付诸业务包涵的全数翻新管理的告竣指令,一旦付出,就不能够回到职业开端从前的意况
ROLLBACK是撤销事务满含的上上下下翻新管理的了断指令,一旦回滚,数据库就能够余烬复起到事情早先此前的情况

BEGIN TRANSACTION;
  --将运动T恤的销售单价降低1000日元
  UPDATE Product
     SET sale_price = sale_price - 1000;
   WHERE product_name = '运动T恤';

  --将T恤衫的销售单价上浮1000日元
  UPDATE Product
     SET sale_price = sale_price  1000;
   WHERE product_name = 'T恤衫';
ROLLBACK;
ACID特性

DBMS的业务都遵循多种本性:

原子性:在职业停止时,当中包罗的翻新管理也许全体实施,要么完全不实施
一致性:事务中含有的拍卖要满意数据库提前设置的牢笼
隔绝性:保障差别职业之间互不压抑的特点
持久性:在专业停止后,DBMS能够确认保障该时间点的多少状态会被封存的表征

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:数据更新,学习笔记Ch4

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。