目录
5.1 插入数据
INSERT语句用于将一行或多行数据添加到表中,有4种语法形式。
1. INSERT … VALUES语句
使用INSERT … VALUES语句添加数据的基本语法格式如下:
INSERT [ INTO ] table_name [ ( column_list ) ]
{ VALUES | VALUE } ( { expr | DEFAULT } ,… ) , ( … ) ,…
【例1】插入一行数据:向学生表student中插入一行记录
INSERT INTO student (sno, sname, ssex, sbirthday, stel, clsno)
VALUES('202001020304','张丽丽','女','2002-8-8', '13212348765','2020010203'); /*指定列名*/
INSERT INTO student
VALUES('202001020304','张丽丽','女','2002-8-8', '13212348765','2020010203'); /*不指定列名*/
说明:上面的第一条SQL语句指定了插入列的列名,指定列名后只要列名和VALUES后面的值对应就可以了。
第二条SQL语句表名student后面没有指定列名,VALUES后面的值要和表中的列对应,列的顺序是创建表时的顺序。
【例2】插入多行记录:向学生表student中插入三行记录。
INSERT INTO student VALUES
('202001020301', '刘林', '男', '2002-02-28', '13312345785', '2020010203'),
('202001020302', '李伟明', '男', '2003-04-09', '13912123365', '2020010203'),
('202001020303', '孙宏明', '男', '2002-12-24', '13812123536', '2020010203');
说明:插入多行数据时,在多行数据之间用逗号分隔,同时每行数据需要用圆括号括起来。
2. INSERT … SET语句
INSERT … SET语句可以为表中指定列添加数据,其基本语法格式如下:
INSERT [ INTO ] table_name
SET column_name = { expr | DEFAULT } , …
【例3】向课程表course中插入一门课程,其中课程编号为“01013”,课程名称为“面向对象程序设计”,学分为4。
INSERT INTO student course(cno, cname, ccredit)
values('01013', '面向对象程序设计',4);
INSERT INTO course
SET cno='01013', cname='面向对象程序设计', ccredit=4;
3. INSERT … SELECT语句
INSERT … SELECT语句可以将SELECT语句查询出的结果集插入到INSERT后指定的表中,其基本语法格式如下:
INSERT [ INTO ] table_name [ ( column_list ) ]
SELECT …
说明:
① 表名后的column_list可以指定列名,也可以不指定列名;
② SELECT子句中挑选的列的个数、顺序要和column_list的列的数、顺序一致,如果表名后没有指定列名,则和表中的列的个数、顺序一致。
【例4】向student_backup表插入学生表student中班级为“2020010203”的学生数据。
INSERT INTO student_backup
SELECT * FROM student WHERE clsno='2020010203';。
UPDATE student
4. REPLACE语句
REPLACE 语句的语法格式如下:
REPLACE [INTO] tbl_name [(column_list)]
VALUES (value_list)
| SET col_name1=value1, col_name2=value2, …
| SELECT …
说明:
(1) REPLACE 语句是MySQL对SQL 标准的扩展,或者插入数据,或者先删除再插入数据。
(2) 使用REPLACE语句添加记录时,如果要添加的新记录的主键或UNIQUE约束的字存在于表中,则需删除已有记录后再添加新纪录。
(3) 只有当表具有主键或唯一索引时,REPLACE 才有意义。否则,它将等效于INSERT,因为没有用于确定新行是否与另一行重复的索引。
【例5】使用REPLACE语句向学生表student中插入2行记录。
REPLACE INTO student VALUES
('202001020301', '刘林林', '男', '2003-02-28', '13312345785', '2020010203'),
('202001020305', '张三峰', '男', '2003-03-08', '17186450607', '2020010203’);
说明:
执行语句后,可以看到由于学号为“202001020301”的学生之前在表中已经存在,MySQL先删除原来的记录再插入新的记录,学号为“202001020305”的学生不存在,所以MySQL直接插入新行。
5.2 更新数据
UPDATE语句用于修改更新表中的数据,其基本语法格式如下:
UPDATE table_name
SET column_name1 = { expr1 | DEFAULT } [ , column_name2 = { expr2 | DEFAULT }] …
[ WHERE where_condition ]
【例6】将student表中学号为202301010104的同学的班级改为'0102'。
UPDATE student
SET clsno= '0102'
WHERE sno='202301010104';
【例7】将teacher表中工号为01003的老师的职称改为“副教授”,所在专业改为“0103”。
UPDATE teacher
SET tprof='副教授', mno='0103'
WHERE tno='01003';
5.3 删除数据
(1)DELETE语句
DELETE语句用于从表中删除一行或多行数据,其基本语法格式如下:
DELETE FROM table_name
[ WHERE where_condition ]
注意:DELETE语句是删除表中的数据,而不是删除表的结构(DROP)。
(2)TRUNCATE TABLE语句。
TRUNCATE TABLE语句用于删除表中的所有记录,其基本语法格式如下:
TRUNCATE TABLE table_name
注意:
(1)使用 TRUNCATE 时需要小心,因为它会立即且不可恢复地删除表中的所有数据。
(2)与 DELETE 不同,TRUNCATE 不会触发与表相关的 DELETE 触发器。
(3)TRUNCATE 操作会重置任何自增 (AUTO_INCREMENT) 列的计数器到其初始值。
【例8】删除teacher表中的全部记录,但保留数据表结构。