《MySQL必知必会学习笔记》:插入数据

来源:互联网 发布:网络映射连接不上 编辑:程序博客网 时间:2024/06/05 10:30

插入数据

虽然在《MySQL必知必会》这本书中到现在才开始讲数据的插入,但是在前面的实践过程中,已经多次使用了行数据的插入。
例如,有一个student的表,里面有3列,分别为ID,name,score;则为此表插入一行数据的语句如下:

insert into student values(1,'wu',89);

但是,目前为止,只应用了插入一行数据是如何进行的。而插入其他的就不知道,下面我们将开始学习。

数据插入

数据插入是用insert关键字来实现的。插入数据可以用几种方式使用:

1)插入完整的行;

2)插入行的一部分;

3)插入多行;

4)插入某些查询的结果。

下面将一一介绍这些内容。

插入完整的行

插入完整的行就如博文开头介绍的那样完成即可。

insert into student values(1,'wu',89);

此例子插入一个新学生到student表中。存储到每个表列中的数据在values子句中给出,对每个列必须提供一个值。

如果某列没有值,应该使用NULL值(假如表允许对该列使用空值。各个列必须以它们在表定义中出现的顺序填充。如果某列指定为自动增量,如果你不想给出一个值也不可以省略此列,可以设为NULL,因为这是MySQL的工作

注意:虽然这种语法很简单,但是并不安全,应该尽量避免使用。这是因为这种用法高度依赖于表中列的定义次序。

那么怎样编写才更安全呢??

如下:
在表明后指出所有的列名,然后在values中提供与前面列名一致的数据即可。稍微书写繁琐了一点,但是却保证了一定的正确性,这样就不高度依赖与表中列的定义次序。

综上:在插入数据时,我们一般总是使用列的列表,不使用没有明确给出列的列表的insert语句。无论我们选择哪种insert语法,都必须给出values的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值。

第二种语法,可以省略列,例如可以省略自动增量的id。如果使用不指定列名的,就不能省略,必须指定NULL;有如下情况的可以省略列

1、该列定义为允许NULL值(无值或空值)

2、在表定义中给出默认值。

如果对表中不允许NULL值且没有默认值的列不给出值,则MySQL将产生一条错误消息。

提高整体性能数据库经常被多个客户访问,对处理什么请求以及用什么次序处理进行管理是MySQL的任务。但是insert操作可能很耗时(特别是有很多索引需要更新时),而且它可能会降低等待处理的select语句的性能。因此,如果数据检索是最重要的,则你可以通过在insert 和into之间添加关键字low_priority,指示MySQL降低insert语句的优先级。这同样也适用于update和delete语句。

插入多行数据

如果你想插入多行数据,应该怎么办呢??

有如下两种方法:

第一种方法:将多条插入语句用分号隔开。这和一行一行的插入一样。

第二种方法:如果列名顺序相同,则可以 用逗号将多组值分隔开,每组数据用一对圆括号括起来。

具体例子如下:

从结果的用时可以看出,第二种方法比第一种方法要更快一些。即此方法可以提高数据库处理的性能。

插入检索出的数据

insert除了插入一个指定列值的行,还可以将一条select语句的结果插入表中。这就是所谓的insert select。

例如:我们想把student2中的数据插入到student中。

student2中的内容如下:

由于student表中只有ID、name、score这3列。因此,为与student表中的格式对应,我们选择将student2表中的前三列插入到student中

insert select 中select语句中可包含where子句以过滤插入的数据。

注意:插入检索出的数据的格式应该与要插入表中的格式一致。否则会报错。

小结

关于插入数据还是挺简单的哈,但是也有很多值得我们注意的地方。例如:插入多行数据的第二种方法就比第一种要快。以及插入完整行数据如果不指定列名,则不太安全。

1 0
原创粉丝点击