标题说明了一切。
具有以下创建语法的空表,仅包含数据库中的表。
CREATE TABLE IF NOT EXISTS `ACME`.`Registration` (
`ConfirmationNumber` INT NOT NULL AUTO_INCREMENT,
`FirstName` VARCHAR(45) NOT NULL,
`LastName` VARCHAR(45) NOT NULL,
`CompanyName` VARCHAR(100) NOT NULL,
`Title` VARCHAR(60) NOT NULL,
`Email` VARCHAR(60) NOT NULL,
`PhoneNumber` VARCHAR(20) NOT NULL,
`StreetAddress` VARCHAR(100) NOT NULL,
`City` VARCHAR(30) NOT NULL,
`Province` VARCHAR(30) NOT NULL,
`ZipCode` VARCHAR(10) NOT NULL,
`Country` VARCHAR(40) NOT NULL,
PRIMARY KEY (`ConfirmationNumber`),
UNIQUE INDEX `ConfirmationNumber_UNIQUE` (`ConfirmationNumber` ASC),
UNIQUE INDEX `Email_UNIQUE` (`Email` ASC),
UNIQUE INDEX `PhoneNumber_UNIQUE` (`PhoneNumber` ASC))
ENGINE = InnoDB
任何和所有插入都会出现此错误。
Error 1062, "Duplicate entry 'a@b.com' for key 'Email_UNIQUE'"
我尝试使用和不使用0插入自动递增确认编号。
我认为可能与我的mysql安装有关,因为(Mac)系统首选项窗格显示服务器运行正常,但如果我尝试停止/启动终端,我得到了奇怪的错误。具体做法是:
$ mysql.server stop
ERROR! MySQL server PID file could not be found!
$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/rover-231-4.rovernet.mtu.edu.pid).
虽然,我知道我正在连接到正确的服务器(localhost)和数据库,因为数据已经被插入到注册表中。
这是一个Python / MySQL / Flask - > HTML / CSS / JS堆栈,我都是新手。要插入的Python代码是:
query_string = (
"INSERT INTO Registration "
"(FirstName, LastName, CompanyName, Title, Email, PhoneNumber, "
"StreetAddress, City, Province, ZipCode, Country) "
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);")
cursor.execute(query_string, (first_name, last_name, company, title, email, phone, address, city, state, zipcode, country))
编辑:我还应该补充一点,直到我遇到安装问题并且不得不重新安装,完全相同的代码完全正常。
答案 0 :(得分:0)
鉴于显示的代码部分,我们猜测电子邮件变量在执行查询时包含字符串“a@b.com”。
我建议您尝试查询表格
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example of Auto Loading Bootstrap Modal on Page Load</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#myModal").modal('show');
});
</script>
</head>
<body>
TEST
<div class="hidden-md hidden-xs">
This is a test page..1
</div>
<div id="myModal" class="modal fade active">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Subscribe our Newsletter</h4>
</div>
<div class="modal-body">
<p>Subscribe to our mailing list to get the latest updates straight in your inbox.</p>
<form>
<div class="form-group">
<input type="text" class="form-control" placeholder="Name">
</div>
<div class="form-group">
<input type="email" class="form-control" placeholder="Email Address">
</div>
<button type="submit" class="btn btn-primary">Subscribe</button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
只是为了查看是否返回了现有行。
如果在表中的该列上定义了UNIQUE约束,则返回的错误是预期结果(如果该行已在表中,并且您尝试添加具有相同值的另一行)。
您的代码是否可能在插入语句中循环两次(或更多次)?
您确定您的代码使用相同的凭据和数据库连接到同一个MySQL服务器吗?
另一个不太可能的可能性是在表上定义了一个BEFORE INSERT触发器,它将NEW.email设置为该字符串值。
另一种可能性,特别是如果它们是MyISAM表,则表中存在损坏。您可以删除表并重新创建它。
为了调试这个,我建议你回显/打印查询执行中引用的变量的值,特别是电子邮件变量。
答案 1 :(得分:0)
我在黑暗中捅了一下,但用IF NOT EXISTS
创建表意味着只有 才会创建表格。
如果表 已经存在,并且它包含数据,例如列Email
为a@b.com
的行,您的插入将失败。
如果表已经存在,CREATE TABLE
命令不会抱怨,并且它不会清除现有表中的数据,因此多次运行代码很可能会产生您看到的错误。
如果你有能力丢失桌子,那么在你开始使用烧瓶应用程序之前尝试放弃它并查看问题是否仍然存在。如果您不能丢失数据,请尝试重命名表并重新启动烧瓶应用程序:
mysql> rename table `ACME`.`Registrations` to `ACME`.`blah`;
答案 2 :(得分:0)
HTML / CSS / JS新手。原来我的JS和我的HTML都调用了validate函数,但我没有注意到,因为这是第一次(在很多开发中)到两次调用函数会导致错误。感谢mhawke和spencer7593让我指向正确的方向。