数据的插入
insert语句原则上每次插入一行数据,包含列的括号称为列清单 ,包含值的括号称为值清单,两个列的数量要一一对应
格式:insert into <表名> (列1, ... ) values (值1, ...);
向表中插入一行数据1
2insert into t2 (shohin_id,shohin_mei, shobin_bunrui, hanbai_tabka, shiire_tanka, torokubi) values('0001', 'T恤', '衣服',
1000, 500, '2009-09-20');
为了方便也可以向表中插入多行数据1
2insert into t2 values('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),('0003', '运动T恤', '衣服', 4000, 2800,
null),('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
列清单的省略
当对表进行全列插入时,就可以省略后的列清单。此时值清单的值会默认从左往右赋值给每一行。1
insert into t2 values ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
插入null
只要该列没设置not null约束,都可以插入null1
insert into t2 values ('0006', '叉子', '厨房用具', 500, null, '2009-09-20');
插入默认值
默认值在create table
时给对应的列设置的约束 default
<值>。默认值插入两种。
1)在values语句中指定default关键字插入默认值1
insert into t2 values ('0007', '擦菜板', '厨房用具', default, 790, '2009-04-28');
2)insert语句中列清单和值清单中不写默认值的列1
insert into t2 (shohin_id,shohin_mei, shobin_bunrui, shiire_tanka, torokubi) values ('0007', '擦菜板', '厨房用具', 790, '2009-04-28');
注意:省略insert语句中的列名,会自动设定该列的默认值(没有设定为null)
从其他表中复制数据
格式:insert into <表名> (列名1,..) select (列名1,...) from <表名>;
先创建一个t3表1
2create table t3(shohin_id char(4) not null, shohin_mei varchar(100) not null, shobin_bunrui varchar(32) not null,
hanbai_tabka integer default 0, shiire_tanka integer, torokubi date, primary key(shohin_id));
把t2表中的数据插入到t3中1
insert into t3 (shohin_id,shohin_mei, shobin_bunrui, hanbai_tabka, shiire_tanka, torokubi) select * from t2;
insert语句的select语句中可以使用where子句和group by子句的任何sql语法1
insert into t5(shobin_bunrui, sum_hanbai_tabka, sum_shiire_tanka) select shobin_bunrui, sum(hanbai_tabka), sum(shiire_tanka) from t1 group by shobin_bunrui;
数据的删除
delete
语句删除表中的数据,表的字段会留下来。drop table
语句会把整张表删除掉。delete删除的对象是行,而不是表或者列
格式:delete from <表名>;
1
delete from t3;
指定删除部分数据
格式:delete from <表名> where <条件>;
1
delete from t2 where hanbai_tabka >= 4000;
除了delete语句还有truncate语句,它也是删除表中的全部内容(保留字段)。优点是处理速度快,缺点是不能删除部分数据
格式:truncate <表名>;
数据的更新
update语句可以更改表中的数据
格式:update <表名> set <列名> = <表达式>;
把torokubi列日期全部改为2009-10-101
update t2 set torokubi = '2009-10-10';
指定更改部分数据
格式:update <表名> set <列名> = <表达式> where <条件>;
把商品种类是厨房用具的记录的销售单价更改为用来的10倍1
update t2 set hanbai_tabka = hanbai_tabka * 10 where shobin_bunrui ='厨房用具';
也可以把值更新为null (只限定没设not null的列)1
update t2 set torokubi = null where shohin_id ='0007';
多列同时更新
使用逗号并列进行隔离
把商品种类是厨房用具的记录的销售单价更改为用来的10倍和把进货进货单价改为原来的一半1
update t2 set hanbai_tabka = hanbai_tabka * 10, shiire_tanka = shiire_tanka / 2 where shobin_bunrui = '厨房用具';
事务
事务代表了对表中数据进行更新的单位。简单说就是需要在同一个处理单元中执行一系列更新处理的集合。也就是执行一系列的insert,delete,update等语句。使用事务开始语句和结束语句包他们包括起来就是一个事务。
格式:1
2
3
4
5
6事务开始语句;
dml语句1;
dml语句2;
dml语句3;
...
事务结束语句(commit或者rollback);
事务开始语句工具DBMS不同而不同
sql server/postgreSQL begin transaction
MySQL start transaction
Oracle DB2 没有
commit
提交事务包含的全部更新处理的结束指令。类似于覆盖保存的按钮。一旦提交,就无法恢复到事务之前的状态。
1 | begin transaction; |
rollback
撤销事务包含的全部更新处理的结束指令。类似于撤销的按钮。一旦回滚,数据库就会回到事务之前的状态。
1 | begin transaction; |
注意:
其实当连接数据库是事务就已经开始,不需要用户指定事务开始语句了。分两种情况
1)每条sql语句就是一个事务(自动提交模式) sql server/postgreSQL/MySQL都是这种模式
2)直到用户执行commit或者rollback算一个事务 Oracle是这中模式。好处让用户确认后再提交
ACID特性
每个事务都有ACID特性原子性(Atomicity)
:在事务结束时,所有的更新处理要么全部执行,要么全部不执行。一致性(Consistency)
:事务处理时要满足数据库提前设定的约束。当出现不合法的DMl会回滚,其他DML会执行到结束
隔离性(Isolation)
:实务之间互相不干扰持久性(Durability)
:当事务(commit或者rollback)结束,数据的状态得以保存(执行记录到日志)