1.插入及系统安全
可针对每个表或者每个用户,利用MySQL的安全机制禁止使用INSERT语句。
INSERT一般不会产生输出。
2.利用INSERT插入完整的行
表test
Field | Type | Null | Key | Default | Extra |
id | int(11) | NO | PRI | NULL | auto_increment |
name | char(50) | NO | NULL | ||
city | char(50) | YES | NULL | ||
school | char(50) | YES | NULL |
方法一:指定表名和插入到新行中的值。
INSERT INTO test VALUES(null, "john","beijing","daxue");
此方法对每个列必须提供一个值,各个列必须以它们在表定义中出现的次序填充。第一列id赋值为null,这是因为每次插入一个新行时,该列由MySQL自动增量。你不想给出一个值(这是MySQL的工作),又不能省略此列(必须给出每个列),所以指定一个NULL值(它被MySQL忽略,MySQL在这里插入下一个可用的id值)
方法二:指定列名,更安全不过更繁琐
INSERT INTO test (name,city,school) VALUES("jone","beijing","daxue");
在插入行时,MySQL将用VALUES列表中的相应的值填入列表中的对应项。因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序。其优点是,即使表的结构改变,此INSERT语句仍然能正确工作。
使用此种方法还可以省略列,省略的列必须满足一下某个条件。
(1)该列定义为允许NULL值(无值或者空值)
(2)在表定义中给出默认值。这表示如果不给出值,将使用默认值。
*一般不要使用没有明确给出列的列表的INSERT语句。不管使用哪种INSERT语法,都必须给出VALUES的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值,如果不这样,将产生一条错误消息,相应的行插入不成功。
*提高整体性能-----INSERT操作可能很耗时(特别是有很多索引需要更新时),而且它可能降低等待处理的SELECT语句的性能。如果数据检索是最重要的(通常是这样),则可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级,如下所示:
INSERT LOW_PRIORITY INTO
这也适用于UPDATE和DELETE语句。
2.插入多个行
可以使用多条INSERT语句,甚至一次提交它们,每条语句用一个分号结束,如下所示:
INSERT INTO test(name,city,school) values("john","beijing","tsinghua");INSERT INTO test(name,city,school) VALUES("tom","shanghai","fudan");
或者,只要每条INSERT语句中的列名(和次序)相同,可以如下所示:
INSERT INTO test(name,city,school) VALUES("john","beijing","tsinghua"),("tom","shanghai”,"fusan");
其中单条INSERT语句有多组值,每组值用一对圆括号括起来,用逗号分隔。
*提高INSERT的性能----MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。