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')
INSERTINTO person(id,NAME,age,info) VALUES (NULL,'feicy',33,'student')
SET IDENTITY_INSERT 테이블 이름 ON 옵션을 지정할 필요가 없습니다.
차이 3
고유 인덱스의 NULL 값 중복 문제MYSQL
MYSQL에서는 UNIQUE null 필드의 경우 인덱스가 실패합니다INSERT IGNORE INTO person(id,NAME,age,info) VALUES (16,'tom',88,'student')
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!