Russian Qt Forum

Qt => Базы данных => Тема начата: Alp от Ноябрь 21, 2009, 21:50



Название: UNIQUE VARCHAR
Отправлено: Alp от Ноябрь 21, 2009, 21:50
Есть простенькая БД (sqlite) из семи полей, последнее VARCHAR(1024) хочется сделать уникальным.
Код
C++ (Qt)
   QString q = "CREATE TABLE IF NOT EXISTS " + QString(tableName) + " ("
               "key INTEGER PRIMARY KEY NOT NULL AUTOINCREMENT,"
               "author VARCHAR(255),"
               "singer VARCHAR(255),"
               "title VARCHAR(255),"
               "descr VARCHAR(255),"
               "type VARCHAR(2),"
               "filename VARCHAR(1024)"
               ")";
 
В SQL я почти полный ноль, потому найти в гугле подходящую инструкции не сумел.

Из того, что пробовал:
Код
C++ (Qt)
"CONSTRAINT uniq_data UNIQUE(filename)"
не помогло, хотя таблица создалась, но запись с таким же именем файла успешно добавилась

Код
C++ (Qt)
"filename UNIQUE VARCHAR(1024)"
тут просто таблица не создалась.

Делать имя файла ключом как-то странно, на мой взгляд, хотя может быть для подобных случаев это и принятая практика? Но если мне потребуется в дальнейшем нормализовать таблицу, то объединять их по имени файла глупость несусветная...


Название: Re: UNIQUE VARCHAR
Отправлено: Rcus от Ноябрь 21, 2009, 21:58
Код:
main@krchome:~$ sqlite3
SQLite version 3.6.16
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test_table (id integer primary key, name text, constraint name_uniqueness unique(name));
sqlite> insert into test_table (name) values ('a');
sqlite> insert into test_table (name) values ('b');
sqlite> select * from test_table;
1|a
2|b
sqlite> insert into test_table (name) values ('a');
SQL error: column name is not unique
sqlite> insert into test_table (name) values ('c');
sqlite> insert into test_table (name) values ('b');
SQL error: column name is not unique
...