powered by simpleCommunicator - 2.0.31     © 2024 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Rename Column и View
7 сообщений из 32, страница 2 из 2
Rename Column и View
    #40100176
little-brother
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибки при этом не возникает
Возможно потому, что pragma foreign_keys --> 0.

авторInteger Unsigned
В Unsigned смысла нет. Более того при таком задании PK не будет использоваться как rowid (только при INTEGER PRIMARY KEY), что несколько медленнее.
...
Рейтинг: 0 / 0
Rename Column и View
    #40100182
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
little-brother
Ошибки при этом не возникает

Возможно потому, что pragma foreign_keys --> 0.

Прагма тут абсолютно ни при чем. Я использую эту прагму только при пересоздании таблицы и только в случае наличия в ней первичного или внешних ключей. В скрипте по созданию таблицы с нуля ее нет
...
Рейтинг: 0 / 0
Rename Column и View
    #40100255
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
little-brother, я сейчас ищу информацию по Unsigned. C первичными ключами все понятно, но я никак не могу понять, стоит ли вообще использовать его в SQLite? Есть один официальный тип Unsigned Big Int, но действительно ли он Unsigned или это тоже эмуляция? Ничего конкретного пока найти не могу
...
Рейтинг: 0 / 0
Rename Column и View
    #40100308
little-brother
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У SQLite всего 5 типов: NULL, FLOAT (он же REAL), (signed) INTEGER (несколько штук: INT8, INT16, ...), TEXT и BLOB.
Все остальные типы транслируются в эти.

В скрипте по созданию таблицы с нуля ее нет
По умолчанию значение этой прагмы 0, т.е. выполняя скрипт создания таблицы с настройками по умолчанию, SQLite не будет проверять внешние ключи. Возможно он не будет проверять и при включенной прагме, мне лень протестировать :)
...
Рейтинг: 0 / 0
Rename Column и View
    #40100310
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
little-brother, то есть, я могу с чистой совестью совсем избавиться от Unsigned в скриптах SQLite?
...
Рейтинг: 0 / 0
Rename Column и View
    #40100316
little-brother
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да. В SQLite эти типы скорее как подсказка, нежели как руководство к действию.
Так в численное поле без проблем можно положить текст. Оно работает только при сохранении, напр. строка `111` может быть приведена к 111, а вот `111a` уже будет сохранено как текст в числовую колонку.
В других базах вы получите ошибку.

С версии 3.37 обещают специальный режим strict, когда значения обязаны следовать типу колонки.
В любом случае, использование всяких VARCHAR, CHAR, UNSIGNED INT, NUMERIC - это просто для удобства, например при миграции с других баз.
...
Рейтинг: 0 / 0
Rename Column и View
    #40100317
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
little-brother, вот образец моего скрипта для создания таблицы. Специально для чистоты эксперимента включил поддержку внешних ключей. Проверил на пустой базе. Ошибок нет. Разумеется, такой скрипт будет отрабатываться в пакете скриптов для создания базы с нуля. Для изменения существующих таблиц я в начале скрипта выключаю поддержку и включаю ее обратно в конце

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
-- Включаем поддержку внешних ключей

PRAGMA foreign_keys = 1;

-- Удаляем таблицу, если она существует

Drop Table If Exists `tbListVars`;

-- Создаем таблицу

Create Table If Not Exists `tbListVars`
-- Уникальный идентификатор
(`iID` Integer Unsigned Default 0 Not Null Constraint `pkListVars_ID` Primary Key,
-- Идентификатор родителя в дереве
 `iParentID` Integer Unsigned Default 0 Not Null Constraint `fkListVars_ParentID` References `tbListVars`(`iID`) On Delete Cascade,
-- Идентификаторы всех родителей
 `vcParentString` VarChar(1000) Default '…' Not Null,
-- Тип переменной
 `tiType` TinyInt Unsigned Default 0 Not Null,
-- Фиксированный признак переменной
 `tiTag` TinyInt Unsigned Default 0 Not Null Constraint `ckListVars_Tag` Check (`tiTag` < 5),
-- Значение переменной
 `vcValue` VarChar(200) Default '…' Not Null,
-- Комментарий
 `txRemark` Text Default '…' Not Null,
-- Признак разрешения удаления записи
 `bIsDeletable` Boolean Default False Not Null);

-- Создаем индексы

-- Индексация типа переменной

Create Index If Not Exists 
  `kListVars_Type`
On
  `tbListVars`(`tiType`);

-- Обеспечение уникальности значения переменной в пределах типа

Create Unique Index If Not Exists 
  `ukListVars_Type_Value`
On
  `tbListVars`(`tiType`, `vcValue`);

-- Ссылка на родительскую запись в деревянной структуре

Create Index If Not Exists 
  `kListVars_ParentID_Auto`
On
  `tbListVars`(`iParentID`);

-- Создаем «нулевую» запись

Insert Into `tbListVars`
(`iID`,
 `iParentID`,
 `vcParentString`,
 `tiType`,
 `tiTag`,
 `vcValue`,
 `txRemark`,
 `bIsDeletable`)
Values
(0,
 0,
 '…',
 0,
 0,
 '…',
 '…',
 False);

-- Удаляем таблицу-лог, если она существует

Drop Table If Exists `tbListVars_Log`;

-- Создаем таблицу-лог

Create Table If Not Exists `tbListVars_Log`
-- Первичный ключ по умолчанию
(`iID` Integer Unsigned Default 0 Not Null Constraint `pkListVars_Log_ID` Primary Key,
-- Идентификатор записи в основной таблице
 `iIDMain` Integer Unsigned Default 0 Not Null,
-- Идентификатор родителя в дереве
 `iParentID` Integer Unsigned Default 0 Not Null,
-- Идентификаторы всех родителей
 `vcParentString` VarChar(1000) Default '…' Not Null,
-- Тип переменной
 `tiType` TinyInt Unsigned Default 0 Not Null,
-- Фиксированный признак переменной
 `tiTag` TinyInt Unsigned Default 0 Not Null,
-- Значение переменной
 `vcValue` VarChar(200) Default '…' Not Null,
-- Комментарий
 `txRemark` Text Default '…' Not Null,
-- Признак разрешения удаления записи
 `bIsDeletable` Boolean Default False Not Null,
-- Источник изменения записи (откуда было выполнено изменение)
 `vcNetName` VarChar(1000) Default '…' Not Null,
-- Дата и время выполнения изменения
 `dtDateBegin` DateTime Default (DateTime('now', 'localtime')) Not Null,
-- Дата и время окончания действия изменения (выполнения следующего изменения)
 `dtDateEnd` DateTime Default '2500-00-00 00:00:00' Not Null,
-- Вид изменения: 0 - создание; 1 - изменение; 2 - удаление; 3 - восстановление
 `tiEditMode` TinyInt Unsigned Default 0 Not Null);

-- Создаем «нулевую» запись

Insert Into `tbListVars_Log`
(`iID`,
 `iIDMain`,
 `iParentID`,
 `vcParentString`,
 `tiType`,
 `tiTag`,
 `vcValue`,
 `txRemark`,
 `bIsDeletable`,
 `vcNetName`,
 `dtDateBegin`,
 `dtDateEnd`,
 `tiEditMode`)
Values
(0,
 0,
 0,
 '…',
 0,
 0,
 '…',
 '…',
 False,
 '…',
 (DateTime('now', 'localtime')),
 '2500-00-00 00:00:00',
 0);
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Rename Column и View
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]