Laravel 5.4执行迁移时遇SQLSTATE[42S02]错误,求解决方案
这个报错我碰到过好多次,本质就是Laravel找不到用来追踪迁移记录的migrations表,下面给你一步步排查解决:
第一步:确认数据库连接配置正确
先检查项目根目录的.env文件,确保DB_DATABASE=kshitiz对应的数据库确实存在于你的MySQL服务中,同时DB_USERNAME和DB_PASSWORD能正常连接数据库。可以用MySQL命令行或可视化工具(比如Navicat)登录,确认kshitiz数据库是否存在。如果配置没问题,先执行php artisan config:clear清除配置缓存,避免缓存导致的配置不生效问题。第二步:用Laravel命令创建migrations表
如果数据库存在但migrations表缺失,直接执行Laravel自带的迁移初始化命令:php artisan migrate:install这个命令的核心作用就是专门创建
migrations表。执行完成后再跑php artisan migrate,应该就能正常执行迁移了。第三步:手动用SQL创建migrations表
要是上面的命令执行失败,可能是数据库权限或引擎兼容问题,直接在MySQL中执行以下SQL语句手动创建表:CREATE TABLE migrations ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, migration VARCHAR(255) NOT NULL, batch INT UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;创建完成后回到项目终端,再次执行
php artisan migrate即可。第四步:检查数据库用户权限
如果还是报错,大概率是你的数据库用户没有足够的权限创建表。登录MySQL,给用户授予kshitiz数据库的全部权限:GRANT ALL PRIVILEGES ON kshitiz.* TO '你的数据库用户名'@'localhost'; FLUSH PRIVILEGES;完成权限配置后再尝试执行迁移命令。
简单解释下原因:Laravel的迁移系统依赖migrations表来记录哪些迁移文件已经执行过,第一次执行migrate时Laravel会自动创建这个表,但如果数据库配置错误、用户权限不足或者数据库引擎不兼容(比如使用了MyISAM而非InnoDB),就会导致自动创建失败,出现你看到的报错。
内容的提问来源于stack exchange,提问作者Umesh Kumar Yadav

