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