백엔드 개발 PHP 튜토리얼 安插不重复记录~求一mysql语句~

安插不重复记录~求一mysql语句~

Jun 13, 2016 am 10:33 AM
insert name replace select

插入不重复记录~~~求一mysql语句~~~
表结构很简单:

SQL code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->--------------------------------id  |  cat  |  article-------------------------------- 1       abc           1 2       aaa           2 3       ccc           1--------------------------------
로그인 후 복사

其中id是唯一主键,AUTO_INCREMENT,对于插入记录来讲没什么用。

现在要插入一些记录,当新记录的cat和article_id在原先数据中都未出现时才允许插入。比如cat='ddd',article=1和cat='aaa',article=1的记录都允许插入,但是cat="abc",article=1和cat="ccc",article=1的记录都不允许插入,因为已经存在这样的记录了。

请问怎么写mysql语句呢?

网上找的帖子,看得不是很懂,貌似都依赖主键不重复的。

------解决方案--------------------
在 cat 和 article 上做联合唯一索引

插入时用 replace 指令
------解决方案--------------------
你都不看手册的吗?这样如何进步?

CREATE [UNIQUE|FULLTEXT] INDEX index_name
ON tbl_name (col_name[(length)],... )


REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES (expression,...),(...),...
or REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
SELECT ...
or REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name=expression, col_name=expression,...

REPLACE 功能与 INSERT 完全一样,除了如果在表中存在一个老的记录与新记录在一个 UNIQUE 或 PRIMARY KEY 上有相同的值,那么在新记录被插入之前,老的记录将被删除。查看章节 6.4.3 INSERT 句法。 

换句话说,你不可以从一个 REPLACE 中访问老的记录行的值。某些老的 MySQL 版本中,你或许可以这样做,但是这是一个 Bug,现在已被修正了。 

为了能够使用 REPLACE,你必须有对该表的 INSERT 和 DELETE 权限。 

当你使用一个 REPLACE 时,如果新的记录行代替了老的记录行,mysql_affected_rows() 将返回 2。这是因为在新行被插入之前,重复记录行被先删除了。 

这个事实使得判断 REPLACE 是否是添加一条记录还是替换一条记录很容易:检查受影响记录行的值是 1 (添加)还是 2(替换)。 

注意,除非你使用一个 UNIQUE 索引或 PRIMARY KEY ,使用 REPLACE 命令是没有感觉的,因为它会仅仅执行一个 INSERT。

------解决方案--------------------
那你就这样: insert ignore into .............
但是也要在 cat 和 article 上做联合唯一索引
------解决方案--------------------
最笨的办法就是插入前,select一下是否该值已存在。
------解决方案--------------------
直接用select查吧
------解决方案--------------------
repalce into tablename(id,name) values('.$id.','".$name."'); or replace into tablename(id,name) select id,name
------解决方案--------------------
按楼主的想法先select再insert这种方式还不如replace呢
------解决方案--------------------
建议用replace,比较简单高效。
------解决方案--------------------
select 白瞎,又不锁表, 根本不是原子的,白判断。

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Select Channels의 비동기 처리 방법 golang을 이용한 Go 동시 프로그래밍 Select Channels의 비동기 처리 방법 golang을 이용한 Go 동시 프로그래밍 Sep 28, 2023 pm 05:27 PM

golang을 사용한 SelectChannelsGo 동시 프로그래밍의 비동기 처리 방법 소개: 동시 프로그래밍은 현대 소프트웨어 개발에서 중요한 영역으로, 애플리케이션의 성능과 응답성을 효과적으로 향상시킬 수 있습니다. Go 언어에서는 채널 및 Select 문을 사용하여 동시 프로그래밍을 간단하고 효율적으로 구현할 수 있습니다. 이 기사에서는 SelectChannelsGo 동시 프로그래밍의 비동기 처리 방법에 golang을 사용하는 방법을 소개하고 구체적인 내용을 제공합니다.

jquery에서 선택 요소를 숨기는 방법 jquery에서 선택 요소를 숨기는 방법 Aug 15, 2023 pm 01:56 PM

jquery에서 선택 요소를 숨기는 방법: 1. hide() 메서드, HTML 페이지에 jQuery 라이브러리를 도입하고 다른 선택기를 사용하여 선택 요소를 숨길 수 있습니다. ID 선택기는 selectId를 선택한 선택 요소의 ID로 바꿉니다. 2. css() 메서드, ID 선택기를 사용하여 숨겨야 하는 선택 요소를 선택하고, css() 메서드를 사용하여 표시 속성을 없음으로 설정하고, selectId를 선택 요소의 ID로 바꿉니다.

mysql에서 삽입 무시, 삽입 및 교체의 차이점은 무엇입니까 mysql에서 삽입 무시, 삽입 및 교체의 차이점은 무엇입니까 May 29, 2023 pm 04:40 PM

insertignore, insert 및 replacement 명령어의 차이가 이미 존재하는지 여부 ;replace insertintonames(name,age)values("Xiao Ming", 25); 테이블 요구 사항: PrimaryKey 또는 고유 인덱스 결과: 테이블 ID가 자동으로 증가되어 테이블이 생성됩니다.

Jul 25, 2023 pm 01:18 PM

MySQL은 데이터를 처리하고 운영하는 다양한 기능을 제공하는 일반적으로 사용되는 관계형 데이터베이스 관리 시스템입니다. 그 중 REPLACE 함수는 문자열의 지정된 부분을 바꾸는 데 사용됩니다. 이 기사에서는 MySQL에서 문자열 교체를 위해 REPLACE 함수를 사용하는 방법을 소개하고 코드 예제를 통해 사용법을 보여줍니다. 먼저 REPLACE 함수의 구문인 REPLACE(str,search_str,replace_str)를 살펴보겠습니다.

jQuery에서 선택 요소의 변경 이벤트 바인딩을 구현하는 방법 jQuery에서 선택 요소의 변경 이벤트 바인딩을 구현하는 방법 Feb 23, 2024 pm 01:12 PM

jQuery는 DOM 조작, 이벤트 처리, 애니메이션 효과 등을 단순화하는 데 사용할 수 있는 인기 있는 JavaScript 라이브러리입니다. 웹 개발에서 우리는 선택 요소에 대한 이벤트 바인딩을 변경해야 하는 상황에 자주 직면합니다. 이 기사에서는 jQuery를 사용하여 선택 요소 변경 이벤트를 바인딩하는 방법을 소개하고 특정 코드 예제를 제공합니다. 먼저 라벨을 사용하여 옵션이 포함된 드롭다운 메뉴를 만들어야 합니다.

Jul 24, 2023 pm 09:37 PM

java의 StringBuilder.insert() 함수를 사용하여 특정 위치에 문자열을 삽입합니다. StringBuilder는 문자열을 조작하는 다양한 방법을 제공하는 Java의 클래스입니다. 문자열을 위치적으로 삽입하는 일반적인 방법. 이번 글에서는 insert() 함수를 사용하여 지정된 위치에 문자열을 삽입하는 방법을 소개하고 해당 코드 예제를 제공합니다. 끼워 넣다()

Python의 문자열 검색 및 바꾸기 기술은 무엇입니까? Python의 문자열 검색 및 바꾸기 기술은 무엇입니까? Oct 20, 2023 am 11:42 AM

Python의 문자열 검색 및 바꾸기 기술은 무엇입니까? (특정 코드 예) Python에서 문자열은 일반적인 데이터 유형이므로 일상적인 프로그래밍에서 문자열 검색 및 바꾸기 작업을 자주 접하게 됩니다. 이 기사에서는 특정 코드 예제와 함께 몇 가지 일반적인 문자열 검색 및 대체 기술을 소개합니다. 문자열에서 특정 하위 문자열을 찾으려면 문자열의 find() 메서드나 index() 메서드를 사용할 수 있습니다. find() 메소드는 문자열에서 부분 문자열이 처음 나타나는 인덱스를 반환합니다.

jQuery에서 테이블 행을 추가, 편집 및 삭제하는 방법은 무엇입니까? jQuery에서 테이블 행을 추가, 편집 및 삭제하는 방법은 무엇입니까? Sep 05, 2023 pm 09:49 PM

오늘날의 웹 개발 시대에는 특히 데이터가 많은 웹 애플리케이션을 다룰 때 효과적이고 효율적인 테이블 관리가 매우 중요해졌습니다. 테이블에서 행을 동적으로 추가, 편집 및 삭제하는 기능은 사용자 경험을 크게 향상시키고 애플리케이션을 보다 대화형으로 만들 수 있습니다. 이를 달성하는 효과적인 방법은 jQuery의 기능을 활용하는 것입니다. jQuery는 개발자가 작업을 수행하는 데 도움이 되는 많은 기능을 제공합니다. 테이블 행 테이블 행은 HTML의 요소로 표시되는 상호 연관된 데이터의 모음입니다. 테이블의 셀(요소로 표시)을 그룹화하는 데 사용됩니다. 각 요소는 테이블의 행을 정의하는 데 사용되며 다중 속성 테이블의 경우 일반적으로 하나 이상의 요소를 포함합니다. 구문$(선택기).append(co

See all articles