5

私はこのmysqlテーブルを次のように構築しています:

CREATE TABLE `posts` (
    `post_id` INT(10) NOT NULL AUTO_INCREMENT,
    `post_user_id` INT(10) NOT NULL DEFAULT '0',
    `gen_id` INT(10) NOT NULL DEFAULT '0',
    PRIMARY KEY (`post_user_id`, `post_id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

私がする時:

insert into posts (post_user_id) values (1);
insert into posts (post_user_id) values (1);
insert into posts (post_user_id) values (2);
insert into posts (post_user_id) values (1);
select * from posts;

私は得る:

post_id | post_user_id | gen_id
1                  1     0
2                  1     0
1                  2     0
3                  1     0

一意のpost_idは、一意のユーザーごとに生成されます。

gen_id列を123 4 5 6などにする必要があります。挿入を行うときにこの列をインクリメントするにはどうすればよいですか?以下のものを試しましたが、うまくいきません。これを行う正しい方法は何ですか?

insert into posts (post_user_id,gen_id) values (1,select max(gen_id)+1 from posts);
//Select the highest gen_id and add 1 to it.
4

5 に答える 5

13

これを試して:

  INSERT INTO posts (post_user_id,gen_id) 
  SELECT 1, MAX(gen_id)+1 FROM posts;
于 2012-11-08T04:02:56.807 に答える
3

テーブルでを使用TRIGGERします。このサンプルコードで始めることができます。

DELIMITER //
CREATE TRIGGER ai_trigger_name AFTER INSERT ON posts
FOR EACH ROW
BEGIN

    UPDATE posts 
       SET gen_id = (SELECT MAX(gen_id) FROM posts) + 1
     WHERE post_id = LAST_INSERT_ID()
     LIMIT 1;

END;//
DELIMITER  ;
于 2012-11-08T03:56:17.393 に答える
2

私の場合、最初にインクリメントする数値はnullでした。私は解決します

IFNULL(MAX(number), 0) + 1 

以上のクエリは

SELECT IFNULL(MAX(number), 0) + 1 FROM mytable;
于 2014-01-17T14:25:31.623 に答える
2

表「Autos」とそれに含まれるデータは次のとおりです。

AutoID | Year | Make | Model | Color |Seq
1      | 2012 | Jeep |Liberty| Black | 1 
2      | 2013 | BMW  | 330XI | Blue  | 2 

このAutoID列は自動インクリメント列であるため、挿入ステートメントに含める必要はありません。

Seq整数の列/フィールドである列を除いて、残りの列はvarcharsです。

次の行をテーブルに挿入し、Seq列が自動的に#3にインクリメントされるようにする場合は、次のようにクエリを作成する必要があります。

INSERT INTO Autos
(
  Seq,
  Year,  
  Make, 
  Model,
  Color,

)
Values
(
  (SELECT MAX(Seq) FROM Autos) + 1, --this increments the Seq column
  2013,'Mercedes','S550','Black');

私が最初に列を置いた理由はSeq、それが正しく機能することを確認するためです...どこに置いてもかまいませんが、申し訳ありませんが安全です。

これで、Seq列の値と3、データベース内のその行の残りの値の追加値が表示されます。

于 2016-01-06T05:20:58.663 に答える
1

私が意図したように表示されることはありませんでした...それで最初から始めます:最初にテーブルを作成しました。

create table Cars (  
AutoID int identity (1,1) Primary Key,
Year int,
Make varchar (25),
Model varchar (25),
TrimLevel varchar (30),
Color varchar (30),
CreatedDate date,
Seq int
)

次に、ダミー値を挿入しました

insert into Cars values (

2013,'Ford' ,'Explorer','XLT','Brown',GETDATE(),1),
(2011,'Hyundai' ,'Sante Fe','SE','White',GETDATE(),2),
(2009,'Jeep' ,'Liberty','Jet','Blue',GETDATE(),3),
(2005,'BMW' ,'325','','Green',GETDATE(),4),
(2008,'Chevy' ,'HHR','SS','Red',GETDATE(),5);

挿入が完了すると、5行のデータが必要になります。Seq列は自動インクリメント列ではなく、次のSeqのデータ行が自動的に#6にインクリメントされ、後続の行もインクリメントされるようにするため、次のコードを記述する必要があります。

INSERT INTO Cars
(
  Seq,
  Year,
  color,
  Make,
  Model,
  TrimLevel,
  CreatedDate
)
Values
(
  (SELECT MAX(Seq) FROM Cars) + 1,
  2013,'Black','Mercedes','A550','AMG',GETDATE());

正しく機能することを確認するために、さまざまなデータを使用してこの挿入ステートメントを何度も実行しました。これが役立つことを願っています。

于 2016-01-06T05:52:23.010 に答える