东篱野鹤

导航

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

 

 

 

目录

 

一、插入数据

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

 

    (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
        )        
        --值清单    

一次性多行INSERT
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
        );

  

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

  【备注】建议使用显示的方式插入值。如果插入的时候隐式省略了列名,并且该列没有指定默认值的时候,该列的值会被设定为 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 语法。(但使用 ORDER BY 子句并不会产生任何效果。)

 

二、删除数据

  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 和 ORDER BY 三类子句。

  【备注】如果要删除表全部数据时请使用 TRUNCATE <表名>,它比 DELETE 子句更高效。

 

三、更新数据

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

 

四、事务

  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 会保证该时点的数据状态得以保存的特性,也称耐久性。

五、修改数据库表和列名等属性 

  MySql的简单语法,常用,却不容易记住。当然,这些Sql语法在各数据库中基本通用。下面列出:

  1.增加一个字段

  alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认为空
  alter table user add COLUMN new2 VARCHAR(20) NOT NULL;    //增加一个字段,默认不能为空

  2.删除一个字段

  alter table user DROP COLUMN new2;                //删除一个字段

  3.修改一个字段

  alter table user MODIFY new1 VARCHAR(10);            //修改一个字段的类型
  alter table user CHANGE new1 new4 int;              //修改一个字段的名称,此时一定要重新

   

  //主键

  alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);

  //增加一个新列

  alter table t2 add d timestamp;
  alter table infos add ex tinyint not null default ‘0′;

  //删除列

  alter table t2 drop column c;

  //重命名列

  alter table t1 change a b integer;

  //改变列的类型

  alter table t1 change b b bigint not null;
  alter table infos change list list tinyint not null default ‘0′;

  //重命名表

     alter table t1 rename t2;

  加索引

  mysql> alter table tablename change depno depno int(5) not null;
  mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
  mysql> alter table tablename add index emp_name (name);

  加主关键字的索引

  mysql> alter table tablename add primary key(id);

  加唯一限制条件的索引

  mysql> alter table tablename add unique emp_name2(cardnumber);

  删除某个索引

  mysql>alter table tablename drop index emp_name;

  增加字段:

  mysql> ALTER TABLE table_name ADD field_name field_type;

  修改原字段名称及类型:

  mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

  删除字段:

  mysql> ALTER TABLE table_name DROP field_name;

  mysql修改字段长度

  alter table 表名 modify column 字段名 类型;

  例如

  数据库中user表 name字段是varchar(30)

  可以用

  alter table user modify column name varchar(50) ;

 

备注

  这里采用 MS SQL Server 进行验证,不保证所有的 DBMS 执行结果正确。

posted on 2021-06-24 15:23  东篱野鹤  阅读(118)  评论(0)    收藏  举报