NULL is a special thing.  It's never considered unique.

SQLite version 3.20.0 2017-08-01 13:24:15
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table TheTable (ID Integer, Info Text, PRIMARY KEY (ID));
sqlite> insert into TheTable (1,"Test");
Error: near "1": syntax error
sqlite> insert into TheTable values (1,"Test");
sqlite> insert into TheTable values (2,"Test2");
sqlite> insert into TheTable values (null,"TestNull1");
sqlite> insert into TheTable values (null,"TestNull2");
sqlite> insert into TheTable values (null,"TestNull3");
sqlite> insert into TheTable values (2,"Test2.1");
Error: UNIQUE constraint failed: TheTable.ID
sqlite> select count(*) from TheTable;
5
sqlite>


On Thu, Jul 18, 2019 at 12:02 PM Alexandre Billon <a.bil...@bert.fr> wrote:

> Hello,
>
> I have created a table.
>
>         CREATE TABLE "sales" (
>                 "client"        TEXT,
>                 "salesman"      TEXT,
>                 "revenue"       REAL,
>                 PRIMARY KEY("client","salesman")
>         );
>
>
> I can run the query below mutliple times without any error :
>
>         INSERT INTO sales ("client", "salesman", "revenue")
>         VALUES ('C1', NULL, 10.0);
>
>
> Have I missed something in the CREATE instruction ?
> Is this a normal behaviour ?
>
> I have tried to read https://sqlite.org/lang_createtable.html#constraints
> and https://www.sqlite.org/nulls.html but I don't really have found why I
> can insert 2 records that have the same primary key.
>
>         SQLite version 3.27.2 2019-02-25 16:06:06
>         Enter ".help" for usage hints.
>         Connected to a transient in-memory database.
>         Use ".open FILENAME" to reopen on a persistent database.
>         sqlite> .headers on
>         sqlite> .mode column
>         sqlite> .nullvalue null
>         sqlite>
>         sqlite> CREATE TABLE "sales" (
>            ...> "client"TEXT,
>            ...> "salesman"TEXT,
>            ...> "revenue"REAL,
>            ...> PRIMARY KEY("client","salesman")
>            ...> );
>         sqlite>
>         sqlite>
>         sqlite>
>         sqlite> INSERT INTO sales ("client", "salesman", "revenue")
>            ...> VALUES ('C1', NULL, 10.0);
>         sqlite>
>         sqlite> INSERT INTO sales ("client", "salesman", "revenue")
>            ...> VALUES ('C1', NULL, 10.0);
>         sqlite>
>         sqlite> INSERT INTO sales ("client", "salesman", "revenue")
>            ...> VALUES ('C1', '', 10.0);
>         sqlite>
>         sqlite> INSERT INTO sales ("client", "salesman", "revenue")
>            ...> VALUES ('C1', '', 10.0);
>         Error: UNIQUE constraint failed: sales.client, sales.salesman
>         sqlite>
>         sqlite> SELECT * FROM sales;
>         client      salesman    revenue
>         ----------  ----------  ----------
>         C1          null        10.0
>         C1          null        10.0
>         C1                      10.0
>         sqlite>
>
> Thanks in advance for your insights.
>
> Alex
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to