ホームページ バックエンド開発 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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Select Channels Goの非同期処理方法 golangを使った並行プログラミング Select Channels Goの非同期処理方法 golangを使った並行プログラミング Sep 28, 2023 pm 05:27 PM

golang を使用した SelectChannelsGo 同時プログラミングの非同期処理方法 はじめに: 同時プログラミングは、アプリケーションのパフォーマンスと応答性を効果的に向上させることができる、現代のソフトウェア開発における重要な領域です。 Go 言語では、Channel と Select ステートメントを使用して同時プログラミングを簡単かつ効率的に実装できます。この記事では、SelectChannelsGo 同時プログラミングの非同期処理メソッドに golang を使用する方法を紹介し、具体的な方法を提供します。

jqueryでselect要素を非表示にする方法 jqueryでselect要素を非表示にする方法 Aug 15, 2023 pm 01:56 PM

jquery で select 要素を非表示にする方法: 1. hide() メソッド。jQuery ライブラリを HTML ページに導入します。さまざまなセレクターを使用して select 要素を非表示にできます。ID セレクターは、selectId を選択した select 要素の ID に置き換えます。実際に使用する; 2. css() メソッド、ID セレクターを使用して非表示にする必要がある select 要素を選択し、css() メソッドを使用して表示属性を none に設定し、selectId を select 要素の ID に置き換えます。

mysqlの挿入無視、挿入、置換の違いは何ですか mysqlの挿入無視、挿入、置換の違いは何ですか May 29, 2023 pm 04:40 PM

insertignore、insert、replace 命令がすでに存在するかどうかの違い 挿入エラーの例 Insertintonames(name,age)values("Xiao Ming", 23); insertignore は insertignoreintonames(name, age)values("Xiao Ming", 24); replace 置換して挿入 replaceintonames(name,age)values("Xiao Ming", 25); テーブル要件: PrimaryKey、または一意のインデックス結果: テーブル ID は自動的にインクリメントされます。テスト コードはテーブルを作成します。

REPLACE 関数を使用して MySQL の文字列の指定された部分を置換する方法 REPLACE 関数を使用して MySQL の文字列の指定された部分を置換する方法 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 ライブラリです。 Web 開発では、選択した要素のイベント バインディングを変更する必要がある状況によく遭遇します。この記事では、jQuery を使用して選択要素変更イベントをバインドする方法を紹介し、具体的なコード例を示します。まず、ラベルを使用してオプションを含むドロップダウン メニューを作成する必要があります。

Python での文字列検索と置換のテクニックは何ですか? Python での文字列検索と置換のテクニックは何ですか? Oct 20, 2023 am 11:42 AM

Python での文字列検索と置換のテクニックは何ですか? (具体的なコード例) Python では文字列が一般的なデータ型であり、日常のプログラミングでは文字列の検索や置換操作によく遭遇します。この記事では、一般的な文字列の検索と置換のテクニックを、具体的なコード例とともに紹介します。文字列内の特定の部分文字列を検索するには、文字列の find() メソッドまたは Index() メソッドを使用できます。 find() メソッドは、文字列内で最初に出現した部分文字列のインデックスを返します。

JavaのStringBuilder.insert()関数を使用して、指定された位置に文字列を挿入します。 JavaのStringBuilder.insert()関数を使用して、指定された位置に文字列を挿入します。 Jul 24, 2023 pm 09:37 PM

指定した位置に文字列を挿入するには、Java の StringBuilder.insert() 関数を使用します。StringBuilder は、可変文字列を処理するために使用される Java のクラスです。文字列を操作するためのさまざまなメソッドが提供されます。insert() 関数は、文字列を次の位置に挿入するために使用されます。指定された位置. 文字列を位置的に挿入する一般的な方法の 1 つ。この記事では、insert()関数を使用して指定した位置に文字列を挿入する方法と、対応するコード例を紹介します。入れる()

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

See all articles