> 데이터 베이스 > MySQL 튜토리얼 > MySQL 최적화 - 추가, 삭제 및 수정에 대한 구체적인 분석(그림)

MySQL 최적화 - 추가, 삭제 및 수정에 대한 구체적인 분석(그림)

黄舟
풀어 주다: 2017-03-10 10:21:01
원래의
1072명이 탐색했습니다.

MySQL 최적화 - 추가, 삭제 및 수정에 대한 구체적인 분석(그림)

삽입

추가 행 쿼리 결과가 테이블에 삽입됩니다.

구문

INSERT INTO table_name1(column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition)
로그인 후 복사

table_name1은 데이터가 삽입될 테이블을 지정합니다. table_name2는 삽입할 데이터를 지정합니다.

쿼리 대상 테이블은 데이터 소스 테이블의 쿼리 열을 지정합니다. 이 목록은 동일한 수의 필드와 동일한 데이터 유형을 가져야 합니다. column_list1 list;

condition은 SELECT 문의 쿼리 조건을 지정합니다.

person_old 테이블의 모든 레코드를 쿼리하여 person 테이블에 삽입합니다.

CREATE TABLE person (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  NAME CHAR(40) NOT NULL DEFAULT '',
  age INT NOT NULL DEFAULT 0,
  info CHAR(50) NULL,
  PRIMARY KEY (id)
)

CREATE TABLE person_old (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  NAME CHAR(40) NOT NULL DEFAULT '',
  age INT NOT NULL DEFAULT 0,
  info CHAR(50) NULL,
  PRIMARY KEY (id)
)

INSERT INTO person_old
VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')

SELECT * FROM person_old
로그인 후 복사

레코드가 성공적으로 삽입되었으며 이제 person_old 테이블에 두 개의 레코드가 있는 것을 볼 수 있습니다. 다음으로 person_oldperson_old 테이블의 모든 레코드를 person 테이블

INSERT INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;
SELECT * FROM person
로그인 후 복사


에 삽입하면 데이터 전송이 성공한 것을 확인할 수 있습니다. 여기서 id 필드는 자동 증가 기본 키의 경우 삽입 시 필드 값의 고유성이 보장되어야 합니다. 확실하지 않은 경우 삽입 시 필드를 무시할 수 있습니다.

값만 삽입하세요. 다른 필드

다시 실행하면 한 번은 잘못됩니다

MYSQL과 SQLSERVER의 차이점:

차이점 1

가져올 데이터에 중복된 값이 있는 경우 MYSQL에는 세 가지 옵션이 있습니다.

옵션 1: 사용 무시 키워드
옵션 2: 대체 항목 사용
옵션 3: ON DUPLICATE KEY UPDATE

두 번째 및 세 번째 옵션은 더 복잡하고 요구 사항을 충족하지 않기 때문에 여기서는 소개하지 않습니다. 여기서는 첫 번째 옵션에 대해서만 이야기합니다

TRUNCATE TABLE person

TRUNCATE TABLE persona_old 

INSERT INTO person_old
VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')

##注意下面这条insert语句是没有ignore关键字的
INSERT  INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

INSERT INTO person_old 
VALUES (13,'kay',26,'student')

##注意下面这条insert语句是有ignore关键字的
INSERT IGNORE INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;
로그인 후 복사

삽입이 성공한 것을 확인할 수 있습니다

SQLSERVER

SQLSERVER 측에서 중복 키를 무시하려면 WITH 지정이 필요합니다(IGNORE_DUP_KEY=ON) 테이블 생성 시 ON [ PRIMARY]

이렇게 삽입할 때 중복된 값이 있으면 SQLSERVER는 처음에는 해당 값을 유지하고 두 번째로 중복된 값이 발견되면 SQLSERVER는 이를 무시합니다.

차이 2

자동 증가 열 삽입 시 차이점

SQLSERVER SET을 사용해야 합니다. IDENTITY_INSERT 테이블 이름 ON 자동 증가 필드의 값을 테이블에 삽입합니다. SET IDENTITY_INSERT 테이블 이름 ON <을 추가하지 않으면 🎜>

테이블에 데이터를 삽입할 때 자동 증가 필드의 값을 지정할 수 없으며, id 필드의 값을 지정할 수 없으며 SQLSERVER가 자동으로 증가시킵니다.一

아아아아

근데 MYSQL은 필요없고 자유도가 엄청 크네요

당신 id 필드의 값을 NULL로 지정하면 MYSQL이 자동으로 id 값을 쓰지 않고

INSERTINTO person(NAME,age,info) VALUES (&#39;feicy&#39;,33,&#39;student&#39;)
로그인 후 복사

값을 지정할 수도 있습니다. MYSQL은 자동으로

INSERTINTO person(id,NAME,age,info) VALUES (NULL,&#39;feicy&#39;,33,&#39;student&#39;)
로그인 후 복사

를 추가합니다. 지정할 때 현재 ID 필드 열에 값이 없는 한 이를 지정할 수 있습니다. 삽입하는 값, 즉 중복된 값이 없을 것입니다. ​

자유도가 매우 커서

SET IDENTITY_INSERT 테이블 이름 ON 옵션을 지정할 필요가 없습니다.

차이 3

고유 인덱스의 NULL 값 중복 문제

MYSQL

MYSQL에서는 UNIQUE null 필드의 경우 인덱스가 실패합니다

INSERT IGNORE INTO person(id,NAME,age,info) VALUES (16,&#39;tom&#39;,88,&#39;student&#39;)
로그인 후 복사
위의 삽입 문을 반복적으로 삽입할 수 있습니다(Union Unique 인덱스의 경우에도 마찬가지)SQLSERVER

SQLSERVER가 작동하지 않습니다

INSERT IGNORE INTO person(NAME,age,info) VALUES (&#39;amy&#39;,12,&#39;bb&#39;)
로그인 후 복사

insert into test(a) values(null)
 
insert into test(a) values(null)
로그인 후 복사

업데이트

업데이트가 상대적으로 간단하고 별로 말이 없습니다

CREATE TABLE person (
  id INT  NOT NULL IDENTITY(1,1),
  NAME CHAR(40)  NULL DEFAULT &#39;&#39;,
  age INT NOT NULL DEFAULT 0,
  info CHAR(50) NULL,
  PRIMARY KEY (id)
)

CREATE UNIQUE INDEX IX_person_unique ON [dbo].[person](name)

INSERT INTO [dbo].[person]
        ( [NAME], [age], [info] )
VALUES  ( NULL, -- NAME - char(40)
          1, -- age - int
          &#39;aa&#39;  -- info - char(50)
          ),
          ( NULL, -- NAME - char(40)
          2, -- age - int
          &#39;bb&#39;  -- info - char(50)
          )
로그인 후 복사



删除

删除person表中一定范围的数据


DELETE FROM  person  WHERE id BETWEEN 14 AND 17

SELECT * FROM person
로그인 후 복사


如果要删除表的所有记录可以使用下面的两种方法

##方法一
DELETE     FROM person

##方法二
TRUNCATE TABLE  person
로그인 후 복사

跟SQLSERVER一样,TRUNCATE TABLE会比DELETE FROM TABLE 快

MYISAM引擎下的测试结果,30行记录


跟SQLSERVER一样,执行完TRUNCATE TABLE后,自增字段重新从一开始。

################################
INSERT IGNORE INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

SELECT * FROM person

TRUNCATE TABLE  person


INSERT IGNORE INTO person(NAME,age,info) VALUES (&#39;amy&#39;,12,&#39;bb&#39;)

SELECT * FROM person
로그인 후 복사


当你刚刚truncate了表之后执行下面语句就会看到重新从一开始

SHOW TABLE STATUS LIKE &#39;person&#39;
로그인 후 복사


위 내용은 MySQL 최적화 - 추가, 삭제 및 수정에 대한 구체적인 분석(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿