SQLite does not evaluate check constraints until you actually do an INSERT or UPDATE. Follow-up: I tried this same thing on MySQL 5.6, PostgreSQL 9.3, Oracle 11g, and SQL Server 2017. They all work the same as SQLite in this regard - they all defer the error detection until an INSERT or UPDATE occurs.