Delete命令适用于一个单独的row,对于指定的row,它可以删除一个CQ的所有CELL,一个CF的所有CELL,或者一个row的所有CELL。如果指定了TIMESTAMP子句,将会删除TIMESTAMP小于或者等于给定值的CELL。否则,将自动分配当前时间作为TIMESTAMP子句。
Delete在删除时,将会插入一个删除标记,即此时为逻辑删除。删除标记持久的存在于库中,除非一个major compaction操作发生,此时将执行物理删除。删除标记将会删除同一row下,TIMESTAMP早于删除标记对应的TIMESTAMP的记录。
如果在执行了Delete命令后,再执行Insert命令,并且Insert命令中的TIMESTAMP小于Delete命令中的TIMESTAMP,则会出现不能插入的情况。例如:
delete * from test where row = "row1" TIMESTAMP “2012-11-11 00:00:00” 或者 delete * from test where row = "row1" //TIMESTAMP 默认为当前时间,假设当前时间为 “2012-11-11 00:00:00” ;
insert into test values ("2012-11-10 00:00:00", "row1", "foo", "bar") //此CELL不能被插入;
当然,如果Insert命令不带TIMESTAMP的话,则应该可以正常执行,因为Insert时的TIMESTAMP默认为当前时间,其应该晚于Delete命令中的TIMESTAMP。