首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这是正确的sql吗?

这是正确的sql吗?
EN

Stack Overflow用户
提问于 2013-04-06 00:08:54
回答 3查看 77关注 0票数 0

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

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

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

但是我不确定使用2个插入是否是正确的方式。

代码语言:javascript
运行
复制
   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'  

    )
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-06 03:23:31

因为只有一个是自动递增的,所以我将首先插入到表中,然后查找该值并将其硬编码到依赖表中。这就是:

代码语言:javascript
运行
复制
INSERT INTO  coupons (
coupon_type,
coupon_code,
...)
VALUES ('',  '" . substr(md5(uniqid(rand(), true)), 0, 8) ."', '100' ,...).

注意,coupon_id不在insert语句中。数据库将自己分配(假设自动增量正在做它应该做的事情)。有些数据库允许你这样做,但我认为这是不好的形式。那么,问题就是如何再次找到这条记录。我会使用:

代码语言:javascript
运行
复制
select * from coupons order by coupon_id desc;

除非其他人同时添加优惠券,否则您应该在顶部看到您的优惠券。如果您使用唯一的优惠券名称或描述,这将有所帮助。无论如何,您必须获取分配的ID,然后在没有自动递增的情况下更新表:

代码语言:javascript
运行
复制
INSERT INTO coupons_description (
coupon_id,
language_id,
coupon_name,
coupon_description)

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-04-06 00:35:28

我可能会去‘优惠券’表检查最大的coupon_id,并在insert中显式指定新的id。我认为这是一种防止任何不匹配的更安全的方法。

假设你已经有100张优惠券了。所以在你的例子中:

代码语言:javascript
运行
复制
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')
票数 0
EN

Stack Overflow用户

发布于 2013-04-06 03:12:08

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15838597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档