삽입 구문
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] 或: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] 或: INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
열 목록과 VALUES 목록이 모두 빈 목록인 경우 INSERT는 각 열 집합이 있는 행을 생성합니다. 기본값:
INSERT INTO tbl_name () VALUES();
작업자 테이블에 이름과 이메일만 있다고 가정하고 데이터 조각을 삽입합니다.
insert into worker values(“tom”,”tom@yahoo.com”);
여러 조각을 삽입합니다. 데이터 일괄
insert into worker values(‘tom','tom@yahoo.com'),(‘paul','paul@yahoo.com');
할당할 열에 값을 지정한 후 해당 값 나열데이터 삽입
insert into worker (name) values (‘tom'); insert into worker (name) values (‘tom'), (‘paul');
set를 사용하여 삽입 data
insert into worker set name='tom';
SET 절의 이름 없는 행에는 기본값이 할당됩니다. 이 형식의 INSERT 문을 사용하면 여러 행을 삽입할 수 없습니다.
식은 이전에 값 테이블에 설정된 열을 참조할 수 있습니다. 예:
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); --但不能这样 INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
다른 테이블에서 선택한 행을 삽입하려면 INSERT...SELECT 문을 사용하세요.
insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2; --如果每一列都有数据 insert into tbl_name1 select col3,col4 from tbl_name2;
쿼리는 ORDER BY 절을 포함할 수 없으며, INSERT 문의 대상 테이블은 SELECT 쿼리 부분의 FROM 절에 나타날 수 없습니다.
ON DUPLICATE KEY UPDATE
ON DUPLICATE KEY UPDATE를 지정하고 행을 삽입하면 UNIQUEindex 또는 PRIMARY KEY에 중복 값이 발생하는 경우 이전 행 UPDATE를 수행합니다.
--假设a,b为唯一索引,表table没有1,2这样的行是正常插入数据,冲突时,更新c列的值 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; --或者是 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=values(c); --引用其他列更新冲突的行 INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 向一个已定义为NOT NULL的列中插入NULL。对于一个多行INSERT语句或INSERT INTO...SELECT语句,根据列数据的类型,列被设置为隐含的默认值。对于数字类型,默认值为0;对于字符串类型,默认值为空字符串('');对于日期和时间类型,默认值为“zero”值。
INSERT INTO...중복 키 업데이트 선택
insert into tbl_name1(a,b,c) select col1,col2,col3 from tbl_name2 ON DUPLICATE KEY UPDATE c=values(c);
INSERT DELAYED
이 경우 이 옵션은 클라이언트가 INSERT가 완료될 때까지 기다릴 수 없는 경우 매우 유용합니다. 클라이언트가 INSERT DELAYED를 사용하면 즉시 서버로부터 확인을 받게 됩니다. 그리고 행은 대기열에 추가되고 다른 스레드에서 테이블을 사용하지 않을 때 행이 삽입됩니다.
INSERT DELAYED 사용의 또 다른 중요한 이점은 많은 클라이언트의 삽입이 함께 풀링되어 블록에 기록된다는 것입니다. 이는 많은 독립적인 삽입을 수행하는 것보다 훨씬 빠릅니다.
INSERT DELAYED INTO worker (name) values (‘tom'), (‘paul');
DELAYED를 사용할 때 몇 가지 제한 사항이 있습니다.
1.INSERT DELAYED는 MyISAM, MEMORY 및 ARCHIVE 테이블에서만 사용할 수 있습니다. MyISAM 테이블의 경우 데이터 파일 중간에 여유 블록이 없으면 SELECT 및 INSERT 문이 모두 지원됩니다. 이러한 경우 기본적으로 MyISAM에서 INSERT DELAYED를 사용할 필요가 없습니다.
2.INSERT DELAYED는 값 목록을 지정하는 INSERT 문에만 사용해야 합니다. 서버는 INSERT DELAYED...SELECT 문의 DELAYED를 무시하고 INSERT DELAYED...ON DUPLICATE UPDATE 문의 DELAYED를 무시합니다.
3. 행이 삽입되기 직전에 문이 반환되므로 LAST_INSERT_ID()를 사용하여 AUTO_INCREMENT 값을 얻을 수 없습니다. AUTO_INCREMENT 값은 명령문에 의해 생성될 수 있습니다.
4. SELECT 문의 경우 DELAYED 행은 실제로 삽입될 때까지 표시되지 않습니다.
5.DELAYED는 슬레이브 복제 서버에서 무시됩니다. DELAYED는 마스터 서버와 슬레이브 서버에서 다른 데이터를 생성하지 않기 때문입니다.
위 내용은 mysql에서 삽입 작업을 구문 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!