MySQL升级会导致INSERT语句中断吗?

时间:2017-08-15 02:48:44

标签: mysql

我升级了我的Mac,因此升级了我的MySQL版本。现在,来自可信PHP书的这个INSERT示例会产生错误。它之前没有。为什么?

我从MySQL版本5.6.36到5.7.19。 MySQL版本的更改是否会导致INSERT中断?

这是“PHP和MySQL Web开发”一书中的一个例子

这是数据库:

DESCRIBE customers;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| customerid | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | char(50)         | NO   |     | NULL    |                |
| address    | char(100)        | NO   |     | NULL    |                |
| city       | char(30)         | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

这是从Bash终端发出的插入内容:

INSERT INTO customers (name, city) values ('Melissa Jones', 'Nar Nar Goon North');

此错误:

  

错误1364(HY000):字段'地址'没有默认值

通过PHP运行查询时出现此错误

  

警告:mysqli_query():/ Users / laptop / Sites /...中的空查询

我错过了什么或做错了什么?谢谢

1 个答案:

答案 0 :(得分:1)

NOT NULL - 每行必须包含该列的值,不允许使用空值

https://www.w3schools.com/php/php_mysql_create_table.asp

@Barmar指出评论时,address字段有NOT NULL个属性,插入行时应包含值。

INSERT INTO customers (name, address, city) values ('Melissa Jones', 'the_address', 'Nar Nar Goon North');

编写脚本时,有可能会额外NOT,它应该是:

CREATE TABLE customers (
customerid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name CHAR(50) NOT NULL,
address CHAR(100) NULL,
city CHAR(30) NOT NULL
) 

注意:将namecityaddress设为CHAR类型字段并不好。在此处阅读原因:https://dev.mysql.com/doc/refman/5.7/en/char.html