欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql插入數(shù)據(jù)方式(insert into 、replace into解析)

 更新時間:2024年01月04日 14:41:32   作者:pan_mlpan  
這篇文章主要介紹了Mysql插入數(shù)據(jù)方式(insert into 、replace into解析),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1、插入數(shù)據(jù)方法

mysql中常用的三種插入數(shù)據(jù)的語句:

  • insert into:正常的插入數(shù)據(jù),插入數(shù)據(jù)的時候會檢查主鍵或者唯一索引,如果出現(xiàn)重復(fù)就會報錯;
  • replace into:表示插入并替換數(shù)據(jù),若表中有primary key或者unique索引,在插入數(shù)據(jù)的時候,若遇到重復(fù)的數(shù)據(jù),則用新數(shù)據(jù)替換,如果沒有數(shù)據(jù)效果則和insert into一樣;
  • insert ignore into:插入并忽略數(shù)據(jù),如果中已經(jīng)存在相同的記錄,則忽略當前新數(shù)據(jù)。這樣不用校驗是否存在了,有則忽略,無則添加

2、語法介紹

2.1 insert into

每個字段與其值是嚴格一一對應(yīng)的。

也就是說:每個值、值的順序、值的類型必須與對應(yīng)的字段相匹配。

但是,各字段也無須與其在表中定義的順序一致,它們只要與 VALUES中值的順序一致即可。

語法如下:

# 表中有些字段有默認值,則可以直接根據(jù)字段插入數(shù)據(jù)
INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);

# 按照表中所有字段進行插入數(shù)據(jù),一定要與字段在表中定義的順序一致
INSERT INTO 表名 VALUES (值 1,值 2,...);

2.2 insert ignore into

這種方式的語法跟insert into 是一樣的,只不過在遇到重復(fù)的數(shù)據(jù)時做出的處理不一致,有重復(fù)的就忽略該條數(shù)據(jù)的插入

語法如下:

# 表中有些字段有默認值,則可以直接根據(jù)字段插入數(shù)據(jù)
INSERT IGNORE INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);

# 按照表中所有字段進行插入數(shù)據(jù),一定要與字段在表中定義的順序一致
INSERT IGNORE INTO 表名 VALUES (值 1,值 2,...);

題外:

MySQL 自4.1版以后開始支持INSERT … ON DUPLICATE KEY UPDATE語法,對于插入數(shù)據(jù)時候遇到重復(fù)的primary key 時候,可以進行數(shù)據(jù)的更新,就避免了insert ignore into遇到重復(fù)的數(shù)據(jù)直接忽略的不足。

但是一定要保證使用的時候是想要更新重復(fù)數(shù)據(jù)哦,不然就尷尬啦~~

INSERT … ON DUPLICATE KEY UPDATE

2.3 replace into

3、使用示例

初始表準備:

創(chuàng)建一個study 表, id 是自增主鍵

CREATE TABLE study(
	ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
	NAME VARCHAR(20) NOT NULL,
	AGE INT(10)
);

首先插入一些為方便測試的數(shù)據(jù):

INSERT INTO study VALUES(1 , 'a' , 10);
INSERT INTO study VALUES(2 , 'b' , 11);
INSERT INTO study VALUES(3 , 'c' , 12);
INSERT INTO study VALUES(4 , 'd' , 13);
INSERT INTO study VALUES(5 , 'e' , 14);
INSERT INTO study VALUES(6 , 'f' , 15);

此時查詢:

select * from study

開始測試:

(一)測試insert into

例如,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為7的數(shù)據(jù)

INSERT INTO study VALUES(1 , 'a' , 11);
INSERT INTO study VALUES(7 , 'g' , 16);

結(jié)果:

INSERT INTO study VALUES(1 , 'a' , 11);
/* SQL錯誤(1062):Duplicate entry '1' for key 'PRIMARY' */
/* 受影響記錄行數(shù): 0  已找到記錄行: 0  警告: 0  持續(xù)時間 0 的 2 條查詢: 0.000 秒. */

報錯。此時表中的數(shù)據(jù):id 為 7的數(shù)據(jù)是沒有插入成功的

(二)測試insert ignore into

例如,做同樣的事情,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為7的數(shù)據(jù)

INSERT INTO study VALUES(1 , 'a' , 11);
INSERT INTO study VALUES(7 , 'g' , 16);

結(jié)果:

INSERT IGNORE INTO study VALUES(1 , 'a' , 11);
INSERT IGNORE INTO study VALUES(7 , 'g' , 16);
/* 受影響記錄行數(shù): 1  已找到記錄行: 0  警告: 1  持續(xù)時間 3 條查詢: 0.062 秒. */
SHOW WARNINGS LIMIT 5;

插入成功。此時表中的數(shù)據(jù):id 為 7的數(shù)據(jù)是插入成功,而id為1的數(shù)據(jù)也并沒有更新

(三)測試 INSERT … ON DUPLICATE KEY UPDATE

例如,做同樣的事情,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為8的數(shù)據(jù)

INSERT INTO study VALUES(1 , 'a' , 11) ON DUPLICATE KEY UPDATE age = 12;
INSERT INTO study VALUES(8 , 'h' , 16) ON DUPLICATE KEY UPDATE age = 13;

結(jié)果:

INSERT INTO study VALUES(1 , 'a' , 11) ON DUPLICATE KEY UPDATE age = 12;
INSERT INTO study VALUES(8 , 'h' , 16) ON DUPLICATE KEY UPDATE age = 13;
/* 受影響記錄行數(shù): 3  已找到記錄行: 0  警告: 0  持續(xù)時間 2 條查詢: 0.015 秒. */

插入成功。此時表中的數(shù)據(jù):id 為 1 的 因為存在所以數(shù)據(jù)被更新了,而id為8 之前并沒有,所以其數(shù)據(jù)也并沒有更新

(四)測試 replace into

經(jīng)過上面的操作,目前的表數(shù)據(jù)由上圖所示。

例如,做同樣的事情,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為9的數(shù)據(jù)。

REPLACE INTO study VALUES(1 , 'a' , 11);
REPLACE INTO study VALUES(9 , 'i' , 18);

結(jié)果:

REPLACE INTO study VALUES(1 , 'a' , 11);
REPLACE INTO study VALUES(9 , 'i' , 18);
/* 受影響記錄行數(shù): 3  已找到記錄行: 0  警告: 0  持續(xù)時間 3 條查詢: 0.000 秒. */

插入成功。此時表中的數(shù)據(jù):id 為 1 的 因為存在所以數(shù)據(jù)被更新為了11,而id為9 之前并沒有,所以其數(shù)據(jù)也并沒有更新

注意的是:

插入數(shù)據(jù)的表必須有主鍵或者是唯一索引!

否則的話,replace into 會直接插入數(shù)據(jù),這將導(dǎo)致表中出現(xiàn)重復(fù)的數(shù)據(jù)。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • MySQL跨表查詢與跨表更新

    MySQL跨表查詢與跨表更新

    本文主要給大家講解的是MySQL中如何使用跨表更新的方法和示例,非常的實用,有需要的小伙伴可以查看查看
    2020-02-02
  • Can''t connect to MySQL server的解決辦法

    Can''t connect to MySQL server的解決辦法

    ERROR 2003 (HY000): Can't connect to MySQL server on '*.*.*.*' (113)的解決辦法
    2010-06-06
  • mysqldumpslow用法示例(慢查詢)

    mysqldumpslow用法示例(慢查詢)

    這篇文章主要介紹了mysqldumpslow是mysql自帶的用來分析慢查詢的工具,需要的朋友可以參考下
    2016-08-08
  • MYSQL行列轉(zhuǎn)置方式

    MYSQL行列轉(zhuǎn)置方式

    本文介紹了如何使用MySQL和Navicat進行列轉(zhuǎn)行操作,首先,創(chuàng)建了一個名為`grade`的表,并插入多條數(shù)據(jù),然后,通過修改查詢SQL語句,使用`CASE`和`IF`函數(shù)將列轉(zhuǎn)換為行,總結(jié)指出,`SUM`可以替換為`MAX`、`MIN`、`AVG`等聚合函數(shù),并且在查詢中需要對普通字段進行分組
    2025-01-01
  • mysql 5.7如何安裝 mysql 5.7安裝配置教程

    mysql 5.7如何安裝 mysql 5.7安裝配置教程

    這篇文章主要為大家詳細介紹了MySQL 5.7安裝配置方法,安裝過程中出現(xiàn)問題的解決方案,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 3步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL的方法詳解

    3步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL的方法詳解

    免編程,3步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL詳解,好多做ip地址查詢的朋友用的到。
    2009-10-10
  • mysql解壓包的安裝基礎(chǔ)教程

    mysql解壓包的安裝基礎(chǔ)教程

    這篇文章主要為大家詳細介紹了mysql解壓包的安裝基礎(chǔ)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 一文帶你了解MySQL中的鎖機制

    一文帶你了解MySQL中的鎖機制

    鎖是計算機協(xié)調(diào)多個進程或線程并發(fā)訪問某一資源的機制(避免爭搶)。本文就來通過幾個簡單的實力為大家詳細講講MySQL中的鎖機制吧
    2023-02-02
  • MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小

    MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小

    MySQL是一個非常流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的查詢操作是非常強大和靈活的。查詢的效率不僅取決于表的大小,而且還取決于索引的大小,本文主要介紹了MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小,感興趣的可以了解一下
    2024-01-01
  • MySQL explain根據(jù)查詢計劃去優(yōu)化SQL語句

    MySQL explain根據(jù)查詢計劃去優(yōu)化SQL語句

    MySQL是一種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),常被用于各種應(yīng)用程序中存儲數(shù)據(jù),當涉及到大量的數(shù)據(jù)時,就需要MySQL的explain功能來幫助優(yōu)化,本文將詳細介紹MySQL的explain功能,感興趣的朋友可以參考閱讀
    2023-04-04

最新評論