这是正确的SQL吗?

时间:2013-04-05 16:08:54

标签: sql

我有一些电子商务网站的优惠券软件。我想立刻生成一堆优惠券。它由2个表组成。优惠券为1,优惠券描述为1。主键是coupon_id。

这是执行sql的正确方法吗? coupon_id会匹配吗?由于它是自动递增的,我没有输入数字,我认为它应该。

编辑:我刚刚重新检查,只有优惠券表中的coupon_id字段自动递增而不是coupon_description中的那个

但我不确定使用2个插件是否正确。

   INSERT INTO  coupons (
    coupon_id,
    coupon_type,
    coupon_code,
    coupon_amount,
    coupon_minimum_order,
    coupon_start_date,
    coupon_expire_date,
    uses_per_coupon,
    uses_per_user,
    restrict_to_products,
    restrict_to_categories,
    restrict_to_customers,
    coupon_active,
    date_created,
    date_modified
    )
    VALUES (
    '' , '',  '" . substr(md5(uniqid(rand(), true)), 0, 8) ."', '100' , '1' , '06/05/2013' , '06/11/2013' , '1' ,  '1',  '',  '',  '',  '',  '',  '')

    INSERT INTO coupons_description (
    coupon_id,
    language_id,
    coupon_name,
    coupon_description
    )

    VALUES (
    '', '1', 'test coupon', 'test'  

    )

3 个答案:

答案 0 :(得分:0)

我可以去'优惠券'表检查最大的coupon_id并明确指定插入中的新ID。我认为这是一种更安全的方法来防止任何不匹配。

假设您已经有优惠券100张优惠券。所以在你的情况下:

INSERT INTO  coupons (
    coupon_id,
    coupon_type,
    ...
) VALUES (101 , '', ...);

INSERT INTO coupons_description (
    coupon_id,
    language_id,
    coupon_name,
    coupon_description
) VALUES (101, '1', 'test coupon', 'test')

答案 1 :(得分:0)

我建议合并两个表(它们似乎具有1:1关系)或更改描述表,以便coupon_id是第一个表的外键,并删除自动增量。之后你可以插入到第一个表中,然后不要试图猜测要插入第二个表的id,而只需使用select @@ identity; (或选择scope_identity();如果在sql server上)

答案 2 :(得分:0)

由于只有一个是自动递增的,我首先会插入到该表中,然后查找该值并将其硬编码到从属表中。那就是:

INSERT INTO  coupons (
coupon_type,
coupon_code,
...)
VALUES ('',  '" . substr(md5(uniqid(rand(), true)), 0, 8) ."', '100' ,...).

请注意,coupon_id不在insert语句中。数据库将自己分配(假设自动增量正在做它应该做的事情)。有些数据库让你分配这个,但我认为这是一个糟糕的形式。那么问题是再次找到该记录。我会用:

select * from coupons order by coupon_id desc;

除非其他人同时添加优惠券,否则您应该看到优惠券。如果您使用独特的优惠券名称或描述,将会有所帮助。无论如何,您必须获取分配的ID,然后更新表而不使用自动增量:

INSERT INTO coupons_description (
coupon_id,
language_id,
coupon_name,
coupon_description)

VALUES ('123', '1', 'test coupon', 'test')

其中'123'实际上是您从select语句中找到的coupon_id。

但是你的语法看起来是正确的,否则。