MySQL数据库13——插入数据(INSERT)

下面的语句用于向student表插入数据。

插入语句:

INSERT INTO student(ID,name,sex,birthday,origin,contact1,contact2,institute)
VALUES ('0013','塔赛努','男','1997/9/15','内蒙古自治区',NULL,NULL,'计算机学院');

INSERT INTO student
VALUES ('0014','呼和嘎拉','男','1995-02-16','青海省','0471-6599999','010-88888888','物理系',NULL);

INSERT INTO student(ID,name,sex,birthday,institute)
VALUES ('0015','孔乙己','男','1995-05-29','中文系');

由于要插入的学生信息并不完整,所以必须在表名后加上指定的字段列表。

如果完整,那么就不需要字段。

通过运行结果,可以发现没有插入数据的字段都为NULL值。实际上,在VALUES子句中可以直接指定哪个字段设置为NULL值,这样以来有了NULL值的占位,就可以省略表名后的字段列表了。

注意:

如果有的字段有非空限制,那么插入的时候省略会报错。

但是若有默认值设定,那么就不会报错:(省略性别)

例如

INSERT INTO student(ID,name,birthday,institute)
VALUES ('0016','鲁十八','1997-07-07','中文系');

默认男填充上去了。

可以在表格里面修改默认值:


 将查询结果插入表

 将student表中所有数据,通过INSERT SELECT插入到student_copy表。

分析:因为两个表的表结构相同,而且要将student中所有字段的内容都插入到student_copy表中,所以在INSERT子句中可以省略字段列表。

INSERT INTO  student_copy
SELECT  * FROM    student;

 


INSERT SELECTSELECT INTO的区别

前面曾经介绍过使用SELECT INTO将查询结果保存为新表,刚刚又介绍了使用INSERT SELECT将查询结果插入到新创建的数据表。看起来,这两个语句完成了同样的功能,没什么区别,实际上它们有区别,具体区别如下所示。

ØSELECT INTO在没有数据表存在的情况下,先创建表,然后再将查询结果放进表内。如果要创建的表名和现有表名重复,则会出现错误提示。
ØINSERT SELECT则必须在数据表存在的前提下,才能向其插入查询结果,它不能自动创建表。如果要插入数据的表不存在,则会出现错误提示。

通过视图插入数据

一般来说,对于一个大型数据库系统,只有数据库管理员(DBA)才能直接操作数据表,而其它用户都必须通过视图操作数据,这样才能使普通用户修改数据的同时,DBA还能操作表。这里所说的操作表指查询、插入、修改和删除数据。下面介绍通过视图插入数据的具体方法,首先建立一个用于实验的vw_computer视图。

CREATE VIEW vw_computer AS
SELECT * FROM   student
WHERE  institute='计算机学院';

通过视图插入数据,对用户来说,其实和直接向表插入数据基本相同,区别仅仅在于表名变成了视图名。下面通过例子说明这一点。

例 通过vw_computer视图向student表插入一条学生信息。

INSERT INTO vw_computer
VALUES ('0017','蒋十九','女','1999-05-29','山东省',NULL,NULL,'计算机学院',NULL);

查看,多了一条:


 使用带有WITH CHECK OPTION选项的视图

其实,上一节的例子又引出了一个安全问题,即计科系的管理员可以通过vw_bb视图,插入非计科系的学生信息。如何控制用户只向所属院系字段输入“计科系”成了目前最大的难题。答案是创建视图时加上WITH CHECK OPTION选项,因为加上该选项,可以防止用户通过视图对数据进行插入、删除和更新时,无意或故意操作不属于视图范围内的基本表数据。例如,视图被定义为如下形式:

CREATE VIEW vw_bb AS
SELECT  ID, name, sex, birthday, institute
FROM   student
WHERE  institute='计算机学院'
WITH CHECK OPTION

则用户只能向所属院系字段插入字符串“计算机学院”,插入其它字符串就会使WHERE子句中的条件(institute='计算机学院')为假,从而限制了用户插入非计科系学生信息的权限。如果要插入其它院系的学生信息,则会出现错误,

综上所述,如果想限制用户通过视图,插入不属于视图权限范围内的数据,则应当在建立视图时加上WITH CHECK OPTION选项。

猜你喜欢

转载自blog.csdn.net/weixin_46277779/article/details/129006855