在使用 Django 和 MySQL 5.7 的项目中,如果在 Linux 环境下导入数据时遇到错误提示“Field * doesn't have a default value”,这通常是因为 MySQL 的严格模式(Strict Mode)导致的。本文将提供解决这个问题的详细步骤。
要解决这个问题,您需要修改 MySQL 的配置文件,具体步骤如下:
/etc/mysql/my.cnf
文件。sql-mode
设置中的 STRICT_TRANS_TABLES
移除或注释掉:在 MySQL 5.0.2 之前的版本中,MySQL 对非法值的检查较为宽松,并且会尝试将非法值转换为合法值。然而,从 5.0.2 版本开始,MySQL 提供了更严格的 SQL 模式,以确保数据的完整性。
在没有启用严格模式的情况下,MySQL 会尝试处理非法值,例如将 NULL 值插入非 NULL 列,或者将过大的数据插入数值列。而在启用严格模式后,MySQL 会拒绝这些非法值并抛出错误。
启用严格模式可以提高数据的准确性,但同时也可能导致导入数据时的错误。通过调整 MySQL 的 sql-mode
设置,您可以在保持数据完整性的同时,避免在导入数据时遇到不必要的问题。记得在修改配置后重启 MySQL 服务,并重新同步您的 Django 模型。
我们先添加一个int自增值字段,比如,我在表A里新增一个字段名为id、数据类型为INT的字段并将其设置为主键,所执行的SQL语句为:
alter table A add column id int auto_increment primary key;
语法格式如下:
alter table 表名 add column 字段名 数据类型 auto_increment primary key;
到’结构’选项卡,选中刚才添加的字段,选择’主键’,然后点确定就好了
回到浏览,即可看到,已经可以进行编辑
在mysql中,可以通过给字段添加“AUTO_INCREMENT”属性来给字段增加自增属性,语法“alter table 表名 add column 字段名 数据类型 AUTO_INCREMENT;”
通过给字段添加 AUTO_INCREMENT 属性来实现字段自增长。语法格式如下:
字段名 数据类型 AUTO_INCREMENT
默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。
一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。
AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。
AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。
自增字段一般用于主键中。]]>
当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
phpMyAdmin:4.9
将phpMyAdmin文件夹中(你的phpMyAdmin安装路径,宝塔面板一般是在www/server中)
/phpMyAdmin/sql/
中的
create_tables.sql
下载到本地!
将create_tables.sql导入到phpMyAdmin
导入后可能会报一下错,不过这并不影响
打开phpmyadmin文件夹下的“config.sample.inc.php”文件并复制,重命名为“config.inc.php”(如果已经有“config.inc.php”文件,直接修改即可)
将“config.inc.php”文件中的
/ Storage database and tables /
到
/* End of servers configuration */
之间的代码全部删除注释即可
注销phpmyadmin之后并重新登录。大功告成!
这时再去看数据库工具栏里就多出来“事件、程序、设计器等功能”
在phpmyadmin的SQL查询框中填入“show variables like '%scheduler%';”并执行
当显示event_scheduler的“Value”为“ON”时,表示计划事件已开启;
当显示event_scheduler的“Value”为“OFF”时,表示计划事件未开启。
到mysql配置文件my.cnf新增一项,在mysqld后面添加event_scheduler = on(或是event_scheduler = 1),保存后重启mysql服务器即可。
在phpmyadmin的“事件”功能里,“事件计划状态”显示为“开”即计划事件已正常开启。
在phpmyadmin的“事件”功能里,点击“新建”下的“添加事件”
根据弹窗填写表格
其中状态
“ENABLED”为“启用”
“DISABLED”为“不启用”
“SLAVESIDE_DISABLED“为“在从库上不启用该事件“
事件类型
"RECURRING"为“循环执行”
"ONE TIME"为“只执行一次”
运行周期即根据需要选择执行的周期时间
起始时间即开始执行的时间
终止时间即结束时间,留空表示一直执行下去
定义即执行的SQL语句
用户按"数据库用户名@数据库地址"的格式填写
最后点击"执行"即创建定时任务完成。
这里记录下防以后踩坑!
]]>