MySQL插入语句解析

1.INSERT INTO

  最常用简单的插入语句,可以有以下两种用法

  1>  INSERT INTO tb_user(id, name, age) VALUES (100022, 'Tom', 25); // 只给指定的列赋值

  2>  INSERT INTO tb_user VALUES (100022, 'Tom', 25);  // 必须 给所有列赋值

  注: INTO关键字可以省略

2. INSERT INTO  ... SELECT

  可以将查询结果插入表中

  insert into t2same(name,age) select name, age from t2;

  insert into t2same select id, name, age from t2;

  注:1> 查询不能包含一个ORDER BY子句

    2> INSERT语句的目的表不能出现在SELECT查询部分的FROM子句

3. INSERT IGNORE INTO

  当插入数据时,如出现错误时(如重复数据)将不返回错误,只以警告形式返回。通常这也是我们使用IGNORE的目的,避免插入重复数据。

但是当有SQL语句语法错误时也不返回错误,所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。

  重复数据的判断依据:主键列相同或者唯一索引列相同。

  例: 

CREATE TABLE tb_user (
    id int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    id_no VARCHAR(20) NOT NULL UNIQUE,
    age int(3)
)
INSERT INTO tb_user VALUES(1, 'Tom', 25);
-- 下方两句既不会插入数据也不会报错
INSERT IGNORE INTO tb_user VALUES(1, 'Lucy', 18); INSERT IGNORE INTO tb_user VALUES(2, 'Tom', 18);

4. REPLACE INTO

  表示插入替换数据,目的表中有Primary Key,或者UNIQUE索引,如果表中已经存在数据,则用新数据替换,如果没有数据则效果同INSERT INTO.

  在表中已存在和要插入相同数据时,REPLACE INTO 和 INSERT IGNORE INTO 二者作用正好相反。

5. ON DUPLICATE KEY UPDATE

  当PRIMARY或者UNIQUE重复时,则执行UPDATE语句,在原有记录基础上,更新指定字段内容,其它字段内容保留。如UPDATE后为无用语句,如id=id,则同3功能相同。

  例如,为了实现name重复的数据插入不报错,可使用一下语句:

  INSERT INTO tb_user (name) VALUES ('Tom') ON DUPLICATE KEY UPDATE id = id

原文地址:https://www.cnblogs.com/techroad4ca/p/5731214.html