为什么没有一个TRUNCATE上mygroup工作?即使ON DELETE CASCADE SET我得到了:
错误1701(42000):无法截断外键约束中引用的表(
mytest.instance,CONSTRAINTinstance_ibfk_1FOREIGN KEY(GroupID)REFERENCESmytest.mygroup(ID))
drop database mytest;
create database mytest;
use mytest;
CREATE TABLE mygroup (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB;
CREATE TABLE instance (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
GroupID INT NOT NULL,
DateTime DATETIME DEFAULT NULL,
FOREIGN KEY (GroupID) REFERENCES mygroup(ID) ON DELETE CASCADE,
UNIQUE(GroupID)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud) MySQL中的MUL,PRI和UNI有什么区别?
我正在使用以下命令处理MySQL查询:
desc mytable;
Run Code Online (Sandbox Code Playgroud)
其中一个字段显示为MUL键,其他字段显示为UNI或PRI.
我知道如果一个密钥是PRI,那么每个表只能有一个记录与该密钥相关联.如果密钥是MUL,这是否意味着可能存在多个关联记录?
这是mytable的回应.
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| courseid | int(11) | YES | MUL | NULL | |
| dept | char(3) | YES | | NULL | |
| coursenum | char(4) | YES | | NULL | |
+-----------+---------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud) 我在使用Laravel 5删除数据时遇到了一些问题.我似乎陷入了"外键约束",但我不明白为什么.
在我当前的数据库模型中,我有一个datapoints表,它有一个传感器表的外键(datapoints.sensors_id - > sensor.id).
我正在尝试的代码:
Route::get('/truncateData', function() {
DB::table('datapoints')->truncate();
DB::table('sensors')->truncate();
return 'Done...';
Run Code Online (Sandbox Code Playgroud)
});
结果:
SQLSTATE [42000]:语法错误或访问冲突:1701无法截断外键约束中引用的表(
alerting.datapoints,CONSTRAINTdatapoints_sensor_id_foreignFOREIGN KEY(sensor_id)REFERENCESalerting.sensors(id))(SQL:truncatesensors)
如果订单是反向的(首先删除传感器),我会理解这个约束,但是当数据点为空时,删除传感器应该没有问题吗?我也尝试过:
DB::table('datapoints')->delete();
DB::table('sensors')->delete();
return 'Done...';
Run Code Online (Sandbox Code Playgroud)
最后我还尝试在delete语句之间显式添加'DB :: commit()',但都返回相同的结果.
这是正常的行为吗?我错过了什么吗?
提前致谢.
干杯,
韦斯利
constraints ×2
mysql ×2
dml ×1
foreign-keys ×1
key ×1
laravel ×1
php ×1
postgresql ×1
sql ×1
truncate ×1