数据的插入,删除与更新

插入数据

插入完整的记录

1
INSERT INTO 表名 VALUES(列1的值, 列2的值, ..., 列n的值);

如果不知道某个列具体填什么值,并且没有使用NOT NULL声明,可以使用NULL代替:

1
INSERT INTO 表名 VALUES(列1的值, NULL, ..., 列n的值)

可以在表名后面定义插入顺序:

1
INSERT INTO 表名(列1, 列2, ..., 列n) VALUES(列1的值, 列2的值, ..., 列n的值);

插入记录的一部分

插入记录的时候,某些列的值可以被省略,但是这个列必须满足下边列出的某个条件之一:

  • 该列允许存储 NULL 值
  • 该列有 DEFAULT 属性,给出了默认值

INSERT语句中指定的列顺序可以改变,但是一定要和 VALUES 列表中的值一一对应起来。

批量插入记录

如果需要插入多组数据,在VALUES后面用小括号()将每组数据括起来即可:

1
INSERT INTO 表名(列1, 列2, ..., 列n) VALUES(列1的值, 列2的值,..., 列n的值), (列1的值, 列2的值,..., 列n的值), (列1的值, 列2的值,..., 列n的值), ..., (列1的值, 列2的值,..., 列n的值);

将某个查询的结果集插入表中

1
INSERT INTO1(表1.1, 表1.2) SELECT2.1, 表2.2 FROM2 WHERE2.1 运算符 具体值;

例子:

1
INSERT INTO second_table(s, i) SELECT second_column, first_column FROM first_table WHERE first_column < 5;

具体过程是,先执行查询语句,然后将查询的结果集插入到指定的表中。需要插入的列,应该与查询列表中的表达式一一对应。比如说s, i,对应的就是seconde_column, first_column

INSERT IGNORE

对于一些是主键或者具有 UNIQUE 约束的列或者列组合来说,它们不允许重复值的出现。可以使用INSERT IGNORE忽略这种束缚。

1
INSERT IGNORE INTO first_table(first_column, second_column) VALUES(1, '哇哈哈') ;

如果列中已经存在已插入的值,那么这条插入记录会被自动忽略。

INSERT ON DUPLICATE KEY UPDATE

插入记录时,表中具有UNIQUE属性或者主键属性的列与该记录不重复时,可以直接插入,否则更新已存在的记录。

语法:

1
INSERT ... ON DUPLICATE KEY UPDATE ...

举个例子:

1
INSERT INTO first_table (first_column, second_column) VALUES(1, '哇哈哈') ON DUPLICATE KEY UPDATE second_column = '雪碧';

如果存在first_column1的记录,就将该记录中的second_column改为雪碧

插入新记录时,对于具有主键或者UNIQUE属性的列与该记录有重复时,可以使用VALUES(列名)来引用新记录中对应列的值。

1
INSERT INTO first_table (first_column, second_column) VALUES(1, '哇哈哈') ON DUPLICATE KEY UPDATE second_column = VALUES(second_column);

VALUES(second_column)代表待插入记录中second_column的值,乍一看,跟上面的效果没啥区别,但是插入多条记录时就非常有用了。

1
INSERT INTO first_table (first_column, second_column) VALUES(1, '哇哈哈'), (2, '喜之郎') ON DUPLICATE KEY UPDATE second_column = VALUES(second_column);

删除数据

1
DELETE FROM 表名 [WHERE 表达式];

如果不加WHERE条件会将所有记录都删除。

可以使用LIMIT子句限制删除记录的数量,使用ORDER BY子句指定符合条件的记录的删除顺序。

1
DELETE FROM first_table ORDER BY first_column DESC LIMIT 1;

更新数据

1
UPDATE 表名 SET1=1, 列2=2, ...,  列n=值n [WHERE 布尔表达式];

如果不加WHERE条件会更新所有记录。

同样可以使用LIMIT子句限制更新记录的数量,用ORDER BY子句指定符合条件的记录的更新顺序。

1
UPDATE first_table SET second_column = '爽歪歪' ORDER BY first_column DESC LIMIT 1;