mysql没有主键
我都会有此代码
drop table if exists Payments;
create table Payments
(
customer_email VARCHAR(50) NOT NULL,
amount DOUBLE,
payment_type ENUM('Visa','Mastercard', 'Cash'),
PRIMARY KEY (customer_email),
FOREIGN KEY (customer_email) references customer(email)
);
现在每次我输入客户的付款购买时输入他的电子邮件和金额时, 。 问题是,每次我输入同一封电子邮件时,我都会收到主键错误(无法复制主键),
这里的主键指的是包含客户个人详细信息的表。
有什么想法吗?
i have this code here
drop table if exists Payments;
create table Payments
(
customer_email VARCHAR(50) NOT NULL,
amount DOUBLE,
payment_type ENUM('Visa','Mastercard', 'Cash'),
PRIMARY KEY (customer_email),
FOREIGN KEY (customer_email) references customer(email)
);
now each time i enter a customer's payment buy entering his email and the amount.
the prob is that each time i enter the same email i get a primary key error (can't duplicate the primary key)
the primary key here refers to a table that consists of the personal details of the customer.
any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
主键必须是唯一的 - 如果每个客户要进行多次付款,则不能将 customer_email 指定为主键。考虑添加一个单独的 id 列并将其作为主键。
The primary key must be unique -- if each customer is going to have multiple payments, you cannot designate the customer_email as a primary key. Consider adding a separate id column and making that the primary key instead.
我将标准化您的设计并使用存储过程插入付款,如下所示:
此处完整脚本:http://pastie.org/ 1688269
希望这会有所帮助:)
调用示例
存储过程
存储过程首先检查客户帐户是否已存在,如果不存在,则创建一个帐户,然后插入付款数据。
表、视图和触发器
测试
I'd normalise your design and use a stored procedure to insert payments as follows:
Full script here : http://pastie.org/1688269
Hope this helps :)
Example calls
Stored procedure
The stored procedure first checks to see if a customer account already exists, if not it creates one then inserts the payment data.
Tables, views and triggers
Testing
主键值在列中只能存在一次。要支持多次存在的值,您可以:
我会解决您的问题通过添加某人付款的日期:
日期是有意义的,因为这是某人可能需要/用于报告的日期。由于日期和在存储的时间中,您不太可能有相同日期值的重复项(这会导致错误,就像您已经遇到的那样)。使用
NOW()
或 ANSI 标准CURRENT_TIMESTAMP
在 INSERT 语句中填充日期值也很容易...或者您可以为列定义 DEFAULT 约束插入数据时自动使用当前日期。A primary key value can only exist once in the column. To support the value existing more than once, you either:
I would solve your issue by adding the date that someone make a payment:
A date makes sense, because it's what someone is likely to need/use for reporting. Because of the date & time being stored, it's very unlikely you'll have duplicates of identical date values (which would result in an error, like the one you've already encountered). It's also easy to populate the date value in an INSERT statement, using either
NOW()
or the ANSI standardCURRENT_TIMESTAMP
... or you could define a DEFAULT constraint for the column to automatically use the current date when data is inserted.