>  기사  >  데이터 베이스  >  mysql에서 삽입 작업을 구문 분석합니다.

mysql에서 삽입 작업을 구문 분석합니다.

怪我咯
怪我咯원래의
2017-04-01 10:03:281361검색

삽입 구문

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.