Search

REPLACE文について

unknown

REPLACE文は、INSERT文UPDATE文を合体させたようなものです。

挿入するデータが既にテーブルに存在する場合は、新しくレコードを挿入せず、既存のレコードを新しいデータで上書き(置換)します。(UPDATE文と同じ)

逆に、挿入するデータがテーブルに存在しない場合は、新規レコードを挿入します(INSERT文と同じ)。

またREPLACE文は、INSERT文同様、SELECT文の結果を挿入することが可能です。

INSERT INTO テーブル名(フィールド名) VALUES (値) SELECT 文;
REPLACE INTO テーブル名(フィールド名) VALUES (値) SELECT 文;

データのみ指定して、レコード挿入・置換

unknown

REPLACE INTO テーブル名 VALUES (値1[, 値2, ...]);
# MySQLログイン、データベース選択
C:\mysql\bin> mysql -u root -p db_User Enter
Enter password: ***** Enter
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5696 to server version: 4.0.26-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

# テーブルtbl_CustomerBの中身を確認
mysql> SELECT * FROM tbl_CustomerB; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | 研二      | 羽山     | m    |   45 | ←このレコードを置換
+--------+-----------+----------+------+------+
3 rows in set (0.44 sec)

##### レコード置換
# 主キーUserIDが'P003'のレコードを置換
mysql> REPLACE INTO tbl_CustomerB VALUES ('P003','kenji','hayama','m','40'); Enter
Query OK, 2 rows affected (0.00 sec)

# レコードが置換されているかテーブルtbl_CustomerBの中身を確認
mysql> SELECT * FROM tbl_CustomerB; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | kenji     | hayama   | m    |   40 | ←レコード「上書き」
+--------+-----------+----------+------+------+
3 rows in set (0.00 sec)

##### レコード挿入
# 主キーUserIDが'P004'のレコードを挿入
mysql> REPLACE INTO tbl_CustomerB VALUES ('P004','太郎','鈴木','m',20); Enter
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM tbl_CustomerB; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | kenji     | hayama   | m    |   40 |
| P004   | 太郎      | 鈴木     | m    |   20 | ←レコード「挿入」
+--------+-----------+----------+------+------+
4 rows in set (0.00 sec)

mysql>

カラム名とデータを指定して、レコード挿入・置換

unknown

REPLACE INTO テーブル名(フィールド1[, フィールド2, ...) VALUES (値1[, 値2, ...]);
# MySQLログイン、データベース選択
C:\mysql\bin> mysql -u root -p db_User Enter
Enter password: ***** Enter
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5696 to server version: 4.0.26-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

# テーブルtbl_CustomerBの中身を確認
mysql> SELECT * FROM tbl_CustomerB;
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | kenji     | hayama   | m    |   40 | ←このデータを置換
| P004   | 太郎      | 鈴木     | m    |   20 |
+--------+-----------+----------+------+------+
4 rows in set (0.00 sec)

##### カラム名とデータを指定してレコード置換
# 主キーUserIDが'P003'のレコードを置換
mysql> REPLACE INTO tbl_CustomerB (UserID, FirstName, LastName) Enter
    -> VALUES ('P003','研二','羽山'); Enter
Query OK, 2 rows affected (0.00 sec)

# 指定しなかったカラムのデータには「NULL」が挿入されます
mysql> SELECT * FROM tbl_CustomerB;
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | 研二      | 羽山     | NULL | NULL | ←レコード「上書き」
| P004   | 太郎      | 鈴木     | m    |   20 |
+--------+-----------+----------+------+------+
4 rows in set (0.00 sec)

# テーブルの全カラムを指定すれば、該当するレコードが全て上書きされます
mysql> REPLACE INTO tbl_CustomerB (UserID, FirstName, LastName, Sex, Age) Enter
    -> VALUES ('P003','研二','羽山','m',30); Enter
Query OK, 2 rows affected (0.00 sec)

mysql> SELECT * FROM tbl_CustomerB; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | 研二      | 羽山     | m    |   30 | ←レコード「上書き」
| P004   | 太郎      | 鈴木     | m    |   20 |
+--------+-----------+----------+------+------+
4 rows in set (0.00 sec)

##### レコード挿入(一致するデータがない場合)
# 主キーUserIDが'P005'のレコードを挿入
mysql> REPLACE INTO tbl_CustomerB (UserID, FirstName, LastName, Sex, Age) Enter
    -> VALUES ('P005','花子','日本','f',15); Enter
Query OK, 1 row affected (0.01 sec)

# レコードが挿入されているか確認
mysql> SELECT * FROM tbl_CustomerB; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | 研二      | 羽山     | m    |   30 |
| P004   | 太郎      | 鈴木     | m    |   20 |
| P005   | 花子      | 日本     | f    |   15 | ←レコード「挿入」
+--------+-----------+----------+------+------+
5 rows in set (0.00 sec)

mysql>

SELECT文の結果を挿入

unknown

REPLACE INTO テーブル名(フィールド名) VALUES (値) SELECT 文;
# テーブルtbl_CustomerAの中身確認
mysql> SELECT * FROM tbl_CustomerA; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| U001   | 花子      | 鈴木     | f    |   21 |
| U002   | 太郎      | 田中     | m    |   30 | ←このデータをtbl_CustomerBに挿入
| U003   | 一郎      | 鈴木     | m    |   45 |
| U004   | 萌子      | 山口     | f    |   18 |
| U005   | 愛        | 森永     | f    |   21 |
| U006   | 太郎      | 鈴木     | m    |   22 |
| U007   | 花子      | 佐藤     | f    |   35 |
+--------+-----------+----------+------+------+
7 rows in set (0.00 sec)

# テーブルtbl_CustomerBの中身確認
mysql> SELECT * FROM tbl_CustomerB; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | 研二      | 羽山     | m    |   45 |
+--------+-----------+----------+------+------+
3 rows in set (0.00 sec)

# テーブルtbl_CustomerAのUserIDが'U002'のデータを
# テーブルtbl_CustomerBに挿入
mysql> REPLACE INTO tbl_CustomerB Enter
    -> SELECT * FROM tbl_CustomerA WHERE UserID='U002'; Enter
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

# データが追加されているかテーブルtbl_CustomerBの中身を確認
mysql> SELECT * FROM tbl_CustomerB; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| P001   | まなみ    | 青山     | f    |   43 |
| P002   | 綾子      | 沢崎     | f    |   36 |
| P003   | 研二      | 羽山     | m    |   45 |
| U002   | 太郎      | 田中     | m    |   30 |
+--------+-----------+----------+------+------+
4 rows in set (0.00 sec)

mysql>

このページで使用しているサンプルデータ

unknown

サンプルデータ
### データベース(db_User)作成
CREATE DATABASE IF NOT EXISTS db_User;

###データベース選択
USE db_User;

### テーブル(tbl_CustomerA)作成
CREATE TABLE tbl_CustomerA(
UserID VARCHAR(4) NOT NULL PRIMARY KEY,
FirstName VARCHAR(32) NOT NULL,
LastName VARCHAR(32) NOT NULL,
Sex CHAR(2) DEFAULT NULL,
Age INTEGER DEFAULT NULL
);

# データ挿入
INSERT INTO tbl_CustomerA (UserID,FirstName,LastName,Sex,Age) VALUES
('U001','花子','鈴木','f',21),
('U002','太郎','田中','m',30),
('U003','一郎','鈴木','m',45),
('U004','萌子','山口','f',18),
('U005','愛','森永','f',21),
('U006','太郎','鈴木','m',22),
('U007','花子','佐藤','f',35);


### テーブル(tbl_CustomerB)作成
CREATE TABLE IF NOT EXISTS db_User.tbl_CustomerB(
UserID VARCHAR(4) NOT NULL PRIMARY KEY,
FirstName VARCHAR(32) NOT NULL,
LastName VARCHAR(32) NOT NULL,
Sex CHAR(2) DEFAULT NULL,
Age INTEGER DEFAULT NULL
);

# データ挿入
INSERT INTO tbl_CustomerB (UserID,FirstName,LastName,Sex,Age) VALUES 
('P001','まなみ','青山','f',43),
('P002','綾子','沢崎','f',36),
('P003','研二','羽山','m',45);

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop

polarized women