如何使用默认值在SQLite中插入行?

更新

这是我从下面的答案中学到的东西...

SQLite支持在列上定义默认值。但是,它在查询中不支持任何形式的DEFAULT关键字或函数。因此,实际上,不可能进行MySQL样式的批量插入,即在某些行中显式设置列,而在其他行中使用列默认值。

下面列出了几种创造性的变通办法,但是为了简单起见,我最喜欢Shawn的建议,即每行使用INSERT语句,可能全部包装在BEGIN TRANSactION语句中。只有这样,您才能利用列默认值。


原始问题:

我有一个名为$(()=>{ $('#food').change(function(){ $('#Person').find('option').each(function(){ $(this).toggle(); }); $('#Person').find('option').eq(0).css('display') == 'none' ? $('#Person').val(2) : $('#Person').val(1); }) })的简单SQLite表,具有这种模式...

如何使用默认值在SQLite中插入行?

我可以使用这种语法在该表中插入行...

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="food" >
        <option>Cool Drink</option>
        <option>Food</option>
    </select>
    <select id="Person" >
        <option value="1">Pepsi</option>
        <option>Coac</option>
        <option>Sprite</option>
        <option value="2" style="display:none;">Bar b Q</option>
        <option style="display:none;">Chicken</option>
        <option style="display:none;">Pizza</option>
    </select>

但是,

我无法弄清楚如何忽略某些值并使数据库使用该列的默认值。

例如,todo列的默认值为INSERT INTO 'todo' ('title','complete','notes') VALUES ('Pickup dry cleaning',true,'They close at 7pm'),('Clean apartment',false,'Floors have already been swept'),('Finish homework','Chapters 3 and 4'); 。能够将complete作为查询中的值之一传递,从而向SQLite发出信号,表示我想使用任何列默认值,这会很好,但是却出现0错误当我尝试这个。

undefined在这种情况下也不起作用,因为有时您想将单元格的值显式设置为null。您也不能仅仅忽略该值,因为参数是位置性的。

sdn199 回答:如何使用默认值在SQLite中插入行?

您只需将其排除在要插入的列之外即可

INSERT INTO todo(title,notes) VALUES ('Music practice','Not Elvis');
,
  

我无法弄清楚如何忽略某些值,并让数据库使用该列的默认值。

在撰写本文时,SQLite不支持default(_)函数,但是您可以使用触发器来实现所需的效果,尽管这样做有点麻烦。

这是一个例子:

CREATE TRIGGER IF NOT EXISTS onnull
AFTER INSERT ON mytable
FOR EACH ROW
WHEN NEW.column = 'undefined'
BEGIN
    UPDATE mytable 
    SET column = 'mydefault' ;
END;
,

Shawn所说的话以及批量问题可以通过 DEFAULT 值来解决,也就是说,如果您手动插入所有记录,例如,如果要通过循环动态地记录它,则必须将变量声明为默认值,如果存在特定值,则更改为特定值,然后在查询中使用此变量。

mg_client = MailGun::Client.new
本文链接:https://www.f2er.com/3166056.html

大家都在问