MySQL insert語句


 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| course             |
| information_schema |
| monitor            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.03 sec)

mysql> use course;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_course |
+------------------+
| course           |
| dept             |
| students         |
| teacher          |
+------------------+
4 rows in set (0.01 sec)

mysql> desc dept;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| dept_name | varchar(64) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> insert into dept(dept_name,id) values('a',1);
Query OK, 1 row affected (0.04 sec)

mysql> delete from dept;
Query OK, 1 row affected (0.06 sec)

mysql> insert into dept(dept_name,id) values("a",1);
Query OK, 1 row affected (0.02 sec)

mysql> select * from dept;
+----+-----------+
| id | dept_name |
+----+-----------+
|  1 | a         |
+----+-----------+
1 row in set (0.00 sec)

mysql> create table dept_bak(id int primary key auto_increment,dept_name varchar(64));
Query OK, 0 rows affected (0.07 sec)

mysql> insert into dept_bak values(1,'a'),(2,'b');
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from dept_bak;
+----+-----------+
| id | dept_name |
+----+-----------+
|  1 | a         |
|  2 | b         |
+----+-----------+
2 rows in set (0.00 sec)

mysql> select *  from dept;
+----+-----------+
| id | dept_name |
+----+-----------+
|  1 | a         |
+----+-----------+
1 row in set (0.00 sec)

mysql> delete from dept;
Query OK, 1 row affected (0.08 sec)

mysql> insert into dept select * from dept_bak;
Query OK, 2 rows affected (0.05 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from dept;
+----+-----------+
| id | dept_name |
+----+-----------+
|  1 | a         |
|  2 | b         |
+----+-----------+
2 rows in set (0.00 sec)

mysql> desc dept_bak;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| dept_name | varchar(64) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> alter table dept_bak add name varchar(10);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from dept_bak;
+----+-----------+------+
| id | dept_name | name |
+----+-----------+------+
|  1 | a         | NULL |
|  2 | b         | NULL |
+----+-----------+------+
2 rows in set (0.00 sec)

mysql> select * from dept;
+----+-----------+
| id | dept_name |
+----+-----------+
|  1 | a         |
|  2 | b         |
+----+-----------+
2 rows in set (0.00 sec)

mysql> delete from dept;
Query OK, 2 rows affected (0.09 sec)

mysql> insert into dept select id,dept_name from dept_bak;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> delete from dept;
Query OK, 4 rows affected (0.03 sec)

mysql> insert into dept(dept_name) select concat(id,dept_name) from dept_bak;
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from dept;
+----+-----------+
| id | dept_name |
+----+-----------+
|  6 | 1a        |
|  7 | 2b        |
+----+-----------+
2 rows in set (0.01 sec)

• 當insert語句中使用on duplicate key update子句時,如果碰到當前插入的數據違反主鍵或唯一鍵的唯一性約束,則Insert會轉變成update語句修改對應的已經存在表中的這條數據。比如如果a字段有唯一性約束且已經含有1這條記錄,則以下兩條語句的執行結果相同

• INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
• UPDATE table SET c=c+1 WHERE a=1;

• On duplicate key update子句后面可以跟多個修改,用逗號隔開
• 上述例子中如果b字段也有唯一性約束,則與此語句的執行結果相同,但一般應該避免出現對應多條的情況

• UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

 

• mysql> create table students2(sid int primary key,sname varchar(20),sex int);
• Insert into students2 values(1,’aaa’,1); ##插入成功
• Insert into students2 values(1,’bbb’,0); ##插入失敗
• mysql> insert into students2 values(1,'bbb',0);
• ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY‘
• insert into students2 values(1,‘bbb’,0) on duplicate key update sname=‘bbb’; ##執行成功
• +-----+-------+------+| sid | sname | sex  |+-----+-------+------+| 1   | bbb   | 1    |
• insert into students2 values(1,‘ccc’,0) on duplicate key update sname=‘ccc’,sex=0; ##執行成功

 

mysql> create table students2(sid int primary key,sname varchar(20),sex int);
Query OK, 0 rows affected (0.11 sec)

mysql> Insert into students2 values(1,'aaa',1);
Query OK, 1 row affected (0.19 sec)

mysql> desc students2
    -> ;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid   | int(11)     | NO   | PRI | NULL    |       |
| sname | varchar(20) | YES  |     | NULL    |       |
| sex   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> Insert into students2 values(1,'bbb',0);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into students2 values(1,'bbb',0) on duplicate key update sname='bbb';
Query OK, 2 rows affected (0.05 sec)

mysql> select * from students2;
+-----+-------+------+
| sid | sname | sex  |
+-----+-------+------+
|   1 | bbb   |    1 |
+-----+-------+------+
1 row in set (0.00 sec)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM