目录
数据插入(INSERT语句的使用方法)
什么是INSERT
通过CREATE TABLE语句创造出的表可以比作一个空箱子.只有把数据装入这个箱子,它才能称之为数据库.用来装入数据的SQL就是INSERT(插入).
INSERT语句的基本语法
单行插入.
INSERT语法
INSERT INTO <表名> (列1,列2,...) VALUES (值1,值2,...);
列的数量要和值的数量一一对应.
当然列名可以忽略,但是值一定要对应创建表时的字段.
例如插入一个值:
INSERT INTO Shohin
(shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,shiire_tanka,torokubi)
VALUES('0001','T-shirt','clothes',1000,500,'2009-09-20');
或者
INSERT INTO Shohin VALUES('0001','T-shirt','clothes',1000,500,'2009-09-20');
多行插入:
不适于Oracle;
INSERT INTO Shohin
(shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,shiire_tanka,torokubi)
VALUES
('0002','puncher','stationery',500,320,'2009-09-11'),
('0003','exercise T-shirt','clothes',4000,2800,'2009-09-11'),
('0004','kitchen knife','kitchenware',3000,2800,'2009-09-21'),
('0005','pressure cooker','kitchenware',6800,5000,'2009-09-15'),
('0006','fork','kitchenware',500,NULL,'2009-09-20'),
('0007','rasp','kitchenware',880,790,'2009-09-28'),
('0008','ball-point pen','stationery',100,NULL,'2009-09-20');
插入NULL
INSERT语句想给某一列插入NULL值时,可以直接在VALUES子句中的值写入NULL;
但是想要插入NULL的列一定不能设置NOT NULL约束.
插入默认值
通过在创建表的CREATE TABLE语句中设置DEFAULT约束来实现.
设置DEFAULT 0 就是设置默认值为0;
例如:
CREATE TABLE Shohin(
shohin_id VARCHAR(50) NOT NULL,
shohin_mei VARCHAR(100) NOT NULL,
shohin_bunrui VARCHAR(32) NOT NULL,
hanbai_tanka INTEGER DEFAULT 0,
shiire_tanka INTEGER,
torokubi DATE,
PRIMARY KEY(shohin_id)
);
通过显示方式插入默认值
在VALUES子句中指定DEFAULT关键字.
INSERT INTO Shohin
(shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,shiire_tanka,torokubi)
VALUES('0001','T-shirt','clothes',DEFAULT,500,'2009-09-20');
通过隐式方式插入默认值
插入默认值时可以不使用DEFAULT关键字,只要在列清单和VALUES中省略设定了默认值的列就可以了.
INSERT INTO Shohin
(shohin_id,shohin_mei,shohin_bunrui,shiire_tanka,torokubi)
VALUES('0001','T-shirt','clothes',500,'2009-09-20');
省略了hanbai_tanka 字段和VALUES中的DEFAULT.
建议使用显示方式,因为可以一目了然的知道hanbai_tanka字段设置了默认值,SQL语句更加容易理解.
如果省略了没有设定默认值的列的话,该列的值就会设定为NULL,如果省略的时设定了NOT NULL约束的列的话,INSERT语句会出错.
从其他表中复制数据
CREATE TABLE ShohinCopy(
shohin_id VARCHAR(50) NOT NULL,
shohin_mei VARCHAR(100) NOT NULL,
shohin_bunrui VARCHAR(32) NOT NULL,
hanbai_tanka INTEGER DEFAULT 0,
shiire_tanka INTEGER,
torokubi DATE,
PRIMARY KEY(shohin_id)
);
INSERT INTO ShohinCopy(shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,shiire_tanka,torokubi)
SELECT shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,shiire_tanka,torokubi
FROM Shohin;
执行INSERT....SELECT语句,将原来Shohin表中的数据全部复制到ShohinCopy.因此INSERT...SELECT语句可以在需要的时候进行数据备份时使用.
多种多样的SELECT语句
该INSERT语句中的SELECT语句也可以使用WHERE子句或者GROUP BY子句等.但是ORDER BY语句时无效的.
数据的删除(DELETE语句的使用方法)
DROP TABLE语句和DELETE语句
DROP TABLE语句将表完全删除.
DELETE语句会留下表(容器),而删除表的内容.
DROP TABLE语句会完全删除整张表,因此删除之后在想插入数据,就必须使用CREATRE TABLE语句重新创建.
DELETE语句在删除数据(行)的同时会保留数据表,因此只需要通过INSERT语句就可以再次向表中插入数据.
DELETE语句的基本语法
语法:
DELETE FROM <表名>;
例如清空Shohin
DELETE FROM Shohin;
指定删除对象的DELETE语句(搜索型DELETE)
想要删除部分数据行,可以像SELECT语句使用WHERE子句指定删除条件,这种指定了删除对象的DELETE语句称之为搜索型DELETE.
删除部分数据行的搜索型DELETE
语法
DELETE FROM <表名>
WHERE <条件>;
例如删除hanbai_tanka大于等于4000的数据
与SELECT语句不同,DELETE语句中不能使用GROUP BY,HAVING和ORDER BY三类子句,而只能使用WHERE.
舍弃(TRUNCATE)
只删除表中全部数据的TRUNCATE语句
TRUNCATE <表名>;
与DELETE不同,TRUNCATE只能删除表中的全部数据,而不能通过WHERE子句指定条件删除部分数据.也正是它不能具体的控制删除对象,多以其速度比DELETE要快得多.
因此要删除全部数据行时, 使用TUNCATE可以缩短执行时间;
数据的更新(UPDATE语句的使用方法)
UPDATE语句的基本语法
和INSERT语句,DELETE语句一样,UPDATE语句也属于DML语句。
改变表中的数据UPDATE语句
UPDATE <表名>
SET <列名> = <表达式>;
将更新对象的列和更新后的值都技术在SET子句中。
例如:
将torokubi时间都改为2009-10-10
UPDATE Shohin
SET torokubi = '2009-10-10';
指定条件的UPDATE语句(搜索型UPDATE)
更新部分数据行的搜索型UPDATE
语法:
UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;
例如:将shohin_bunrui为kitchenware的行hanbai_tanka乘10
使用NULL进行更新
使用UPDATE也可以将列更新为NULL(该更新俗称NULL清空)。此时只需要将赋值表达式右边的值直接写为NULL即可。
例如将shohin_id 为008的数据的登记日期更新为NULL
UPDATE Shohin
SET torokubi = NULL
WHERE shohin_id = '0008';
和INSERT语句一样,UPDATE语句也可以将NULL作为一个值来使用,但是只有未设置NOT NULL约束和主键约束才可以清空为NULL。
多列更新
UPDATE Shohin
SET hanbai_tanka = hanbai_tanka * 10,
shiire_tanka = shiire_tanka /10
WHERE shohin_bunrui = 'kitchenware';
事务
什么是事务
事务就是需要在同一处理单元中执行的一系列更新处理的集合。
创建事务
事务语法:
事务开始语句;
DML语句1;
DML语句2;
DML语句3;
事务结束语句(COMMIT或者ROLLBACK);
使用事务开始语句和事务结束语句,将一系列的DML语句(INSERT,UPDATE,DELETE语句)括起来,就实现了一个事务处理。
事务开始语句
SQL server ,PostgreSQL数据库
BEGIN TRANSACTION
MySQL数据库
START TRANSACTION
Oracle,DB2数据库
无
COMMIT-提交处理
COMMIT时提交事务包含的全部更新处理的结束指令。
相当于文件处理中的覆盖保存,一旦提交就无法恢复到事务开始的状态。
ROLLBACK-取消处理
ROLLBACK时取消事务包含的全部更新处理的结束指令。相当于文件处理中的放弃保存,一旦回滚,数据库就会恢复到事务开始之前的状态。通常回滚并不会像提交那样造成大闺蜜的数据损失。