mysql에서 insert 문의 반환값은 새로 추가된 데이터의 ID입니다. INSERT 문은 데이터베이스의 기존 테이블에 하나 이상의 튜플 데이터 행을 삽입하는 데 사용됩니다. 구문은 "INSERT INTO table(column1,column2...) VALUES (value1,value2,...);"입니다. "INSERT INTO" 절 뒤의 괄호는 테이블 이름과 쉼표로 구분된 열 목록을 지정합니다.
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
insert의 반환 값은 새 데이터의 ID입니다. 물론, 데이터베이스가 자동 증가 ID 기본 키를 지원한다는 전제가 있습니다. 자동 증가 기본 키가 정의되지 않은 경우 특수 번호가 반환됩니다.
데이터베이스와 테이블이 성공적으로 생성된 후에는 데이터베이스 테이블에 데이터를 삽입해야 합니다. MySQL에서는 INSERT 문을 사용하여 하나 이상의 튜플 데이터 행을 데이터베이스의 기존 테이블에 삽입할 수 있습니다.
1. 간단한 MySQL INSERT 문
MySQL INSERT
문은 테이블에 하나 이상의 행을 삽입하는 데 사용됩니다. INSERT
문의 구문은 다음과 같습니다. INSERT
语句用于将一行或多行插入到表中。下面说明了INSERT
语句的语法:
INSERT INTO table(column1,column2...) VALUES (value1,value2,...);
首先,在INSERT INTO
子句之后,在括号内指定表名和逗号分隔列的列表。
然后,将括号内的相应列的逗号分隔值放在VALUES
关键字之后。
在执行插入语句前,需要具有执行INSERT
语句的INSERT
权限。
让我们创建一个名为tasks
的新表来练习INSERT
语句,参考以下创建语句 -
USE testdb; CREATE TABLE IF NOT EXISTS tasks ( task_id INT(11) AUTO_INCREMENT, subject VARCHAR(45) DEFAULT NULL, start_date DATE DEFAULT NULL, end_date DATE DEFAULT NULL, description VARCHAR(200) DEFAULT NULL, PRIMARY KEY (task_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
例如,如果要将任务插入到tasts
表中,则使用INSERT
语句如下:
INSERT INTO tasks(subject,start_date,end_date,description) VALUES('Learn MySQL INSERT','2017-07-21','2017-07-22','Start learning..');
执行该语句后,MySQL返回一条消息以通知受影响的行数。在这种情况下,有一行受到影响。
现在使用以下语句查询 tasks
中的数据,如下所示 -
SELECT * FROM tasks;
执行上面查询语句,得到以下结果 -
+---------+--------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+--------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | +---------+--------------------+------------+------------+------------------+ 1 row in set
2. MySQL INSERT - 插入多行
想要在表中一次插入多行,可以使用具有以下语法的INSERT
语句:
INSERT INTO table(column1,column2...) VALUES (value1,value2,...), (value1,value2,...), ...;
在这种形式中,每行的值列表用逗号分隔。例如,要将多行插入到tasks
表中,请使用以下语句:
INSERT INTO tasks(subject,start_date,end_date,description) VALUES ('任务-1','2017-01-01','2017-01-02','Description 1'), ('任务-2','2017-01-01','2017-01-02','Description 2'), ('任务-3','2017-01-01','2017-01-02','Description 3');
执行上面语句后,返回 -
Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0
现在查询tasks
表中的数据,如下所示 -
select * from tasks;
执行上面查询语句,得到以下结果 -
+---------+--------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+--------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | | 2 | 任务-1 | 2017-01-01 | 2017-01-02 | Description 1 | | 3 | 任务-2 | 2017-01-01 | 2017-01-02 | Description 2 | | 4 | 任务-3 | 2017-01-01 | 2017-01-02 | Description 3 | +---------+--------------------+------------+------------+------------------+ 4 rows in set
如果为表中的所有列指定相应列的值,则可以忽略INSERT
语句中的列列表,如下所示:
INSERT INTO table VALUES (value1,value2,...);
或者-
INSERT INTO table VALUES (value1,value2,...), (value1,value2,...), ...;
请注意,不必为自动递增列(例如
taskid
列)指定值,因为MySQL会自动为自动递增列生成值。
3. 具有SELECT子句的MySQL INSERT
在MySQL中,可以使用SELECT语句返回的列和值来填充INSERT
语句的值。此功能非常方便,因为您可以使用INSERT
和SELECT
子句完全或部分复制表,如下所示:
INSERT INTO table_1 SELECT c1, c2, FROM table_2;
假设要将tasks
表复制到tasks_bak
表。
首先,通过复制tasks
表的结构,创建一个名为tasks_bak
的新表,如下所示:
CREATE TABLE tasks_bak LIKE tasks;
第二步,使用以下INSERT
语句将tasks
表中的数据插入tasks_bak
表:
INSERT INTO tasks_bak SELECT * FROM tasks;
第三步,检查tasks_bak
表中的数据,看看是否真正从tasks
表复制完成了。
mysql> select * from tasks; +---------+--------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+--------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | | 2 | 任务-1 | 2017-01-01 | 2017-01-02 | Description 1 | | 3 | 任务-2 | 2017-01-01 | 2017-01-02 | Description 2 | | 4 | 任务-3 | 2017-01-01 | 2017-01-02 | Description 3 | +---------+--------------------+------------+------------+------------------+ 4 rows in set
4. MySQL INSERT与ON DUPLICATE KEY UPDATE
如果新行违反主键(PRIMARY KEY)或UNIQUE
约束,MySQL会发生错误。例如,如果执行以下语句:
INSERT INTO tasks(task_id,subject,start_date,end_date,description) VALUES (4,'Test ON DUPLICATE KEY UPDATE','2017-01-01','2017-01-02','Next Priority');
MySQL很不高兴,并向你扔来一个错误消息:
Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec
因为表中的主键task_id
列已经有一个值为 4
的行了,所以该语句违反了PRIMARY KEY
约束。
但是,如果在INSERT
语句中指定ON DUPLICATE KEY UPDATE选项,MySQL将插入新行或使用新值更新原行记录。
例如,以下语句使用新的task_id
和subject
来更新task_id
为4
的行。
INSERT INTO tasks(task_id,subject,start_date,end_date,description) VALUES (4,'Test ON DUPLICATE KEY UPDATE','2017-01-01','2017-01-02','Next Priority') ON DUPLICATE KEY UPDATE task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE';
执行上面语句后,MySQL发出消息说2
行受影响。现在,我们来看看tasks
表中的数据:
mysql> select * from tasks; +---------+------------------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+------------------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | | 2 | 任务-1 | 2017-01-01 | 2017-01-02 | Description 1 | | 3 | 任务-2 | 2017-01-01 | 2017-01-02 | Description 2 | | 5 | Test ON DUPLICATE KEY UPDATE | 2017-01-01 | 2017-01-02 | Description 3 | +---------+------------------------------+------------+------------+------------------+ 4 rows in set
新行没有被插入,但是更新了task_id
值为4
的行。上面的INSERT ON DUPLICATE KEY UPDATE
UPDATE tasks SET task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE' WHERE task_id = 4;
INSERT INTO
절 뒤에 테이블 이름과 쉼표로 구분된 열 목록을 지정합니다. 괄호. VALUES
키워드 뒤에 해당 열의 쉼표로 구분된 값을 괄호 안에 넣으세요. 🎜🎜insert 문을 실행하기 전에 INSERT
문을 실행할 수 있는 INSERT
권한이 있어야 합니다. 🎜🎜INSERT
문을 연습하기 위해 tasks
라는 새 테이블을 생성하겠습니다. 다음 create 문을 참조하세요. 🎜rrreee🎜예를 들어 작업을 삽입하려는 경우 맛
테이블을 보려면 다음과 같이 INSERT
문을 사용하세요. 🎜rrreee🎜 이 문을 실행한 후 MySQL은 영향을 받은 행 수를 알리는 메시지를 반환합니다. 이 경우 한 행이 영향을 받습니다. 🎜🎜이제 아래와 같이 tasks
의 데이터를 쿼리하는 문을 사용하세요. -🎜rrreee🎜위의 쿼리 문을 실행하면 다음 결과를 얻을 수 있습니다. -🎜rrreee🎜🎜🎜2 MySQL INSERT - Insert 여러 행🎜🎜 🎜🎜한 번에 여러 행을 테이블에 삽입하려면 다음 구문과 함께 INSERT
문을 사용할 수 있습니다. 🎜rrreee🎜이 형식에서 각 행의 값 목록은 쉼표로 구분됩니다. 예를 들어 tasks
테이블에 여러 행을 삽입하려면 다음 문을 사용합니다. 🎜rrreee🎜위 문을 실행한 후 -🎜rrreee🎜를 반환합니다. 이제 tasks
테이블을 쿼리합니다. 아래와 같은 데이터-🎜rrreee🎜위 쿼리문을 실행하면 다음과 같은 결과가 나온다-🎜rrreee🎜테이블의 모든 컬럼에 해당 컬럼의 값을 지정하면 의 컬럼 목록은 무시해도 된다. INSERT 문, 아래와 같이: 🎜rrreee🎜 또는 -🎜rrreee🎜🎜 자동 증가 열(예: taskid
열)에는 값을 지정할 필요가 없습니다. ) MySQL은 자동 증가 열의 값을 자동으로 생성하기 때문입니다. 🎜🎜🎜🎜🎜3. SELECT 절이 있는 MySQL INSERT🎜🎜🎜🎜MySQL에서는 SELECT 문에서 반환된 열과 값을 사용하여 INSERT
문의 값을 채울 수 있습니다. 이 기능은 다음과 같이 INSERT
및 SELECT
절을 사용하여 테이블을 전체 또는 부분적으로 복사할 수 있기 때문에 매우 편리합니다. 🎜rrreee🎜작업 code> 테이블이 <code>tasks_bak
테이블에 복사됩니다. 🎜🎜🎜먼저🎜, 아래와 같이 tasks
테이블의 구조를 복사하여 tasks_bak
라는 새 테이블을 만듭니다. 🎜rrreee🎜🎜두 번째 단계🎜, 다음을 사용합니다. INSERT
문은 tasks
테이블의 데이터를 tasks_bak
테이블에 삽입합니다. 🎜rrreee🎜🎜단계 🎜, tasks_bak
를 확인하세요. code> 테이블에서 tasks
테이블의 복사가 실제로 완료되었는지 확인하세요. 🎜rrreee🎜🎜🎜4. MySQL INSERT 및 ON DUPLICATE KEY UPDATE🎜🎜🎜🎜새 행이 기본 키(PRIMARY KEY) 또는 UNIQUE
제약 조건을 위반하면 MySQL에서 오류가 발생합니다. 예를 들어 다음 명령문을 실행하면 🎜rrreee🎜MySQL이 만족스럽지 않고 오류 메시지가 표시됩니다. 🎜rrreee🎜테이블의 기본 키 task_id
열에 이미 4
이므로 해당 문은 PRIMARY KEY
제약 조건을 위반합니다. 🎜🎜그러나 INSERT
문에 ON DUPLICATE KEY UPDATE 옵션을 지정하면 MySQL은 새 행을 삽입하거나 원래 행 레코드를 새 값으로 업데이트합니다. 🎜🎜예를 들어 다음 문은 task_id
가 4
인 행을 새로운 task_id
및 subject
로 업데이트합니다. . 🎜rrreee🎜위 명령문을 실행한 후 MySQL은 2
행이 영향을 받았다는 메시지를 보냅니다. 이제 tasks
테이블의 데이터를 살펴보겠습니다. 🎜rrreee🎜새 행이 삽입되지 않았지만 task_id
값이 4 그렇군요. 위의 <code>INSERT ON DUPLICATE KEY UPDATE
문은 다음 UPDATE 문과 동일합니다. 🎜UPDATE tasks SET task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE' WHERE task_id = 4;
【相关推荐:mysql视频教程】
위 내용은 mysql insert의 반환 값은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!