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

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

黄舟
黄舟원래의
2017-03-10 10:21:011015검색

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 ('feicy',33,'student')

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

INSERTINTO person(id,NAME,age,info) VALUES (NULL,'feicy',33,'student')

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

자유도가 매우 커서

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

차이 3

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

MYSQL

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

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

SQLSERVER가 작동하지 않습니다

INSERT IGNORE INTO person(NAME,age,info) VALUES ('amy',12,'bb')

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 '',
  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
          'aa'  -- info - char(50)
          ),
          ( NULL, -- NAME - char(40)
          2, -- age - int
          'bb'  -- 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 ('amy',12,'bb')

SELECT * FROM person


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

SHOW TABLE STATUS LIKE 'person'


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

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