SQL语句:DML语句-数据更新
文章目录
1.插入记录
插入元组
表创建好后,就可以往里插入记录了,插入记录的基本语法如下:
INSERT INTO tablename (field1,field2,......fieldn) VALUES(value1,value2,......valuesn);
例如,向表 emp 中插入以下记录:ename 为 zzx1,hiredate 为 2000-01-01,sal 为 2000,deptno 为 1,命令执行如下:
insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);
如果INTO子句中没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值。
mysql> insert into emp values('lisa','2003-02-01','3000',2);
INTO子句中没有出现的属性列,新元组在这些列上将取空值。但必须注意的是,在表定义时说明了 NOT NULL的属性列不能取空值,否则会出错。
属性的顺序可以与CREATE TABLE中的顺序不一样。VALUES子句对新元组的各属性赋值, 字符串常数要用单引号(英文符号)括起来。
在 MySQL 中,insert 语句还有一个很好的特性,可以一次性插入多条记录,语法如下:
INSERT INTO tablename (field1, field2,......fieldn)
VALUES
(record1_value1, record1_value2,......record1_valuesn), (record2_value1, record2_value2,......record2_valuesn),
......
(recordn_value1, recordn_value2,......recordn_valuesn)
;
下面的例子中,对表 dept 一次插入两条记录:
insert into dept values(5,'dept5'),(6,'dept6');
插入子查询结果
子查询不仅可以嵌套在SELECT语句中用以构造父査询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据。
插入子查询结果的INSERT语句格式为
INSERT
INTO<表名> [(<属性列1> [,<属性列2>…])
子査询;
首先在数据库中建立一个新表,其中一列存放系名,另一列存放相应的学生平均年龄。
CREATE TABLE Dept age
(Sdept CHAR(15)
Avg age SMALLINT);
然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中。
INSERT
INTO Dept_age(Sdept,Avg age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
更新记录
更新单一元组
对于表里的记录值,可以通过 update 命令进行更改,语法如下:
UPDATE tablename SET field1=value1,field2.=value2,......fieldn=valuen [WHERE CONDITION]
例如,将表 emp 中 ename 为“lisa”的薪水(sal)从 3000 更改为 4000:
update emp set sal=4000 where ename='lisa';
在 MySQL 中,update 命令可以同时更新多个表中数据,语法如下:
UPDATE t1,t2...tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]
在下例中,同时更新表 emp 中的字段 sal 和表 dept 中的字段 deptname:
update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;
更新所有元组的值
如果省略WHERE子句,则表示要修改表中的所有元组。
例:将所有学生的年龄增加1岁.
UPDATE Student
SET Sage=Sage+l;
带子查询的更新语句
子查询也可以嵌套在UPDATE语句中,用以构造修改的条件。
例:将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS');
删除记录
删除单一元组
如果记录不再需要,可以用 delete 命令进行删除,语法如下:
DELETE FROM tablename [WHERE CONDITION]
例如,在 emp 中将 ename 为‘dony’的记录全部删除,命令如下:
delete from emp where ename='dony';
在 MySQL 中可以一次删除多个表的数据,语法如下:
DELETE t1,t2...tn FROM t1,t2...tn [WHERE CONDITION]
删除所有元组
如果省略WHERE子句则表示删除表中全部元组,但表的定义仍在字典中。也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义。
例:删除所有的学生选课记录。
DELETE
FROM SC;
带子查询的删除语句
子查询同样也可以嵌套在DELETE语句中,用以构造执行删除操作的条件。
例:删除计算机科学系所有学生的选课记录。
DELETE
FROM SC WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept='CS'.);
文章作者 Forz
上次更新 2017-08-13