2016-05-22 4 views
0

ここでは、私の表Iは、ITEM1、ITEM2、ITEM3として文字列に爆縮されたアレイの動的な値の単一のセットを格納するために使用MySQLの「ロック」テーブルのみ最大

`id` int(11) NOT NULL, 
`notifyroles` varchar(50) NULL, 
PRIMARY KEY (`id`) 
ENGINE=MyISAM DEFAULT CHARSET=utf8 

あります私がdbからデータを取り出すときに、それらの値を再び爆発させます。

ソフトウェアを初期化するときに、行ID 1を挿入し、使用するまでnotifyroles要素をNULLにしておきます。

これは、自動インクリメント機能を使用しないことを選択しました。私はINSERTを使用しません。常にID 1のUPDATEを使用してください。

これ以上の行をチェックし、それを切り捨てて、次のようになります:

テーブルをロックする方法はありますか?テーブルを1行以上にすることはできません。誰かが別の行をINSERTしようとすると失敗します。

ps。私は、MySQLの進化に伴い、今のところこのような方法があることを期待しています。

答えて

0

がテーブルをロックする方法は本当にありませんが、あなたはMySQLのトリガーを利用することができます。名前が示唆するように、指定されたアクションが実行された時点ですぐにアクティブ化されます。この場合、インサートです。たぶんこれを試してみてください:

どうしたらいいですか?いくつかの戦略ではクエリが失敗することが示唆されていますが、私は実際にはそのアプローチに慣れていません。

私はそれが役に立ちそうです。

+0

エラーをスローする場合は、 'BEFORE INSERT'トリガーで行うことができます(たとえば、[' SIGNAL'](https://dev.mysql .com/doc/refman/5.5/en/signal.html))を参照してください)。 – Andrew

+0

本当にすばらしいアイデア、今、ボックスキリトの外で考えているthats、ニース:) –

1

最も簡単なのは、ソフトウェアを使用するユーザーが挿入権を持たないため、そのテーブルに対する更新権を持つように権利を管理することです。

参照:http://dev.mysql.com/doc/refman/5.7/en/grant.html

+0

ありがとう、私はオンラインでいくつかの例を見つけました。主なものはlocalhostユーザーです。一般的なものでなければなりません。だから、私ができることを期待していたのは、私がphpMyAdminで望んでいたように、privyのテーブルを変更し、それをエクスポートして、クエリがどのように行われたかを見てから、それを捨てるだけです。しかし、私はこのテーブルオプションまたはフィールドオプションの下でそのオプションを見つけることができません。 –

+0

アプリケーションにユーザーを追加できます。そのユーザーにあなたが好きな権利を与える。 – swa66

+0

ああ今、私はそれを持っていると思う、ちょうどdb自体のユーザー名を使用して、テーブルのフィールドを指定する...意味があります;) –

関連する問題