为什么没有一个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) 如何组合执行存储过程并在常规SQL查询中使用其结果或参数?
例如,我想做类似以下的事情:
-- passing result of SELECT to SP
SELECT a, b FROM t
EXEC my_sp a, b
-- passing result of SP to INSERT
INSERT INTO t
EXEC my_sp a, b
Run Code Online (Sandbox Code Playgroud)
等等
我试过像这样添加一个外键......
ALTER TABLE OrderLineItem
ADD CONSTRAINT
FK_OrderLineItem_ShippingType_name FOREIGN KEY
(shippingType)
REFERENCES ShippingType(name);
Run Code Online (Sandbox Code Playgroud)
或者在Mysql 5.5中这样...
alter table OrderLineItem add foreign key
FK_OrderLineItem_ShippingType (shippingType) references ShippingType(name);
Run Code Online (Sandbox Code Playgroud)
每次我看到以下错误.
[2011-11-18 15:07:04] [HY000] [150]使用外键约束创建表'realtorprint_dev_dev/#sql-7d0_80'失败.引用的表中没有索引,其中引用的列显示为第一列.
[2011-11-18 15:07:04] [HY000] [1005]无法创建表'realtorprint_dev_dev.#sql-7d0_80'(错误号:150)
OrderLineItem.shippingType和ShippingType.name都具有varchar(50)类型,而不是null.ShippingType.name是ShippingType的primaryKey.
以下是关于ShippingType以及OrderLineItem的show create table的结果...
CREATE TABLE `shippingtype` (
`name` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
`description` varchar(255) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `orderlineitem` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`description` varchar(255) CHARACTER SET latin1 NOT NULL, …Run Code Online (Sandbox Code Playgroud) 出于某种原因,在MySQL 5.5.30机器上,从第二个表中删除行的触发器不再触发第二个表上的删除触发器.
这完全适用于我们的本地MySQL版本5.5.25
我没有找到任何可以解释这种行为的文档,有人可能有同等的问题吗?
这可能是MySQL版本大于5.5.25时出现的错误,也可能是意外启用的"功能".
UPDATE table1 => fires BEFORE UPDATE trigger ON table1
table1 BEFORE UPDATE TRIGGER executes: DELETE FROM table2 => should fire BEFORE DELETE trigger on table2 ( but doesn't )
table 2 BEFORE DELETE TRIGGER executes: DELETE FROM table3 (never happens)
Run Code Online (Sandbox Code Playgroud)
好了,我的重现步骤:
数据库
CREATE DATABASE "triggerTest" DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
表
CREATE TABLE "table1" (
"id" int(11) NOT NULL AUTO_INCREMENT,
"active" tinyint(1) NOT NULL DEFAULT '0',
"sampleData" varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', …Run Code Online (Sandbox Code Playgroud) 如何在PostgreSQL 8.4中的模式中的所有表上授予DML(SELECT,INSERT,UPDATE,DELETE)?我也希望这笔赠款能够在将来继续创建新的表格.
我已经看过9.0的解决方案,但我坚持使用8.4,因为它随Debian稳定运行.
我已经尝试了以下作为基线,但它不起作用,导致不可避免的"访问关系X被拒绝":
GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
Run Code Online (Sandbox Code Playgroud)
我已经通过文档挖掘了,我似乎无法找到合适的解决方案.
如果用户更改了表HelloWorlds,那么我想要"他们做的动作",他们做的时间以及原始行插入的副本HelloWorldsHistory.
由于列长度,我宁愿避免单独的插入,更新和删除操作触发器.
我试过这个:
create trigger [HelloWorlds_After_IUD] on [HelloWorlds]
FOR insert, update, delete
as
if @@rowcount = 0
return
if exists (select 1 from inserted) and not exists (select 1 from deleted)
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'INSERT', helloWorld.id, helloWorld.text ... and more from inserted
end
else
if exists (select 1 from inserted) and exists (select 1 from deleted)
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'UPDATE', helloWorld.id, helloWorld.text ... and …Run Code Online (Sandbox Code Playgroud) 如何选择所有列并在Oracle中添加具有常量值的列?
使用MS SQL Server,我可以使用:
Select *,5 From TableA;
Run Code Online (Sandbox Code Playgroud)
我会得到这个:
column1 column2 5 xx xx 5 xx xx 5
我使用Delphi XE8和FireDAC来加载一个大的SQLite数据库.为此,我使用Array DML执行技术一次有效地插入大量记录,如下所示:
FDQueryAddINDI.SQL.Text := 'insert into indi values ('
+ ':indikey, :hasdata, :gedcomnames, :sex, :birthdate, :died, '
+ ':deathdate, :changed, :eventlinesneedprocessing, :eventlines, '
+ ':famc, :fams, :linkinfo, :todo, :nextreportindi, :firstancestralloop'
+ ')';
FDQueryAddINDI.Params.Bindmode := pbByNumber; {more efficient than by name }
FDQueryAddINDI.Params.ArraySize := MaxParams; { large enough to load all of them }
NumParams := 0;
repeat
{ the code to determin IndiKey,... is not shown, but goes here }
FDQueryAddINDI.Params[0].AsStrings[NumParams] := IndiKey;
FDQueryAddINDI.Params[1].AsIntegers[NumParams] := HasData;
FDQueryAddINDI.Params[2].AsStrings[NumParams] := GedcomNames; …Run Code Online (Sandbox Code Playgroud) 我熟悉应用于SQL的DDL,DML和DCL的定义.有很多网站和书籍可以定义和解释它们.但似乎没有人给出权威的参考.
我对这些术语的起源感兴趣.SQL发明了吗?他们是否已经在历史上用于其他数据库?是否有其他标准创建它们,它们是否被SQL使用?或者SQL甚至在ISO规范中都使用它们?
一本书表明SQL92包含这些术语,但我无法在线提供的草稿中找到它们.(也许我必须购买最终的SQL92 ISO规范才能确定.)SQL:1999切换到不同的分类系统.
(我很好奇的一个原因是,如果这些是非SQL发明的一般行业术语,那么继续使用它们并不一定是不正确的,这是对新SQL分类的补充.)
任何人都可以提供有关这些术语起源的更多信息,以及对最初可能定义它们的任何标准或规范的权威参考吗?
dml ×10
sql ×4
mysql ×3
ddl ×2
foreign-keys ×2
sql-server ×2
t-sql ×2
triggers ×2
acronym ×1
constraints ×1
database ×1
delphi ×1
firedac ×1
grant ×1
oracle ×1
performance ×1
postgresql ×1
select ×1
tcollection ×1
truncate ×1