转载自:https://www.2cto.com/database/201708/670413.html
一、设置存储引擎
1.查看当前存储引擎
1 |
|
结果如下所示:
说明:我当前的数据表设置的存储引擎是InnoDB形式的
2.在数据库配置文件my.ini中修改默认存储引擎
方法一:如果当前存储引擎为Myisam形式,需要将存储引擎修改一下,在这里建议大家可以在MySQL的配置文件里面进行修改
2.2 修改完配置文件后,需要重启数据库服务器
方法二:使用alter语句修改存储引擎
1 |
|
1 |
|
结果如下所示:
说明我这里已经是InnoDB的模式
1 |
|
1 |
|
方法一与方法二比较
方法一 更彻底 所有的数据表都会默认innodb模式 方法二 治标不治本 只有设置的数据表会是innodb模式 注意:主表和从表均要修改成innodb模式
二、创建测试SQL脚本并运行
1.编写sql脚本
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 |
|
2.运行
结果如下:
不论是在命令行里还是在navicat图形界面化客户端里执行都是报这个错, 在百度里剖了这个错误,查到的解决办法都不适用
1)从表被约束字段的数据类型要和主表中的约束字段一样 2)主表中的约束字段是主表的主键或者唯一键或者索引 3)存储引擎一开始就设置为InnoDB模式 ,其他不再赘述 题外话: InnoDB 支持外键 Myisam 不支持外键
最后经过排查发现是因为tb_dept表中id设置了unsigned,tb_emp表中dept_id并没有设置unsigned; 血淋淋的教训 严重受到 SQL Server 的影响 花了一个多小时的时间终于发现。。。。。。 都是泪啊~~~~(>_<)~~~~
MySQL在很多小细节上与SQL Server不一样
tb_dept(id) 设置auto_increment tb_emp(dept_id)可以不设置 tb_dept(id) 为主键必然不空 tb_emp(dept_id)可以不设置not null
最终结果 给tb_emp(dept_id)加上unsigned后 一切正常