澳门金沙vip 2

【澳门金沙vip】《SQL基础教程》学习笔记Ch4

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

【博主】反骨仔    【原文】

澳门金沙vip 1

  

4数码更新

  这是《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语句会插入一行数据

目录

  • 插入数据
  • 剔除数据
  • 履新数据
  • 事务

 

多行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');

一、插入数据

  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
        );

澳门金沙vip 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
        )        
        --值清单    

澳门金沙vip 3澳门金沙vip 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')

澳门金沙vip 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
语法。(但使用 O奥迪Q5DEENVISION 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');

安插数据足以绝不加多列名称

二、删除数据

  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 和 O奥迪Q5DE传祺 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语法(但利用OENCOREDRE 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语句的删减对象并非表可能列,而是记录行。