Как добавить новую таблицу в бд ms sql server

Руководство по созданию индексов

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

  • Индекс имеет смысл, если нужно обеспечить доступ одновременно не более чем к 4-5% данных таблицы. Альтернативной использования индекса для доступа к данным строки является полное последовательное чтение таблицы от начала до конца, что называется полным сканированием таблицы. Полное сканирование таблицы больше подходит для запросов, которые требуют извлечения большего процента данных таблицы. Помните, что применение индексов для извлечения строк требует двух операций чтения: индекса и затем таблицы.
  • Избегайте создания индексов для сравнительно небольших таблиц. Для таких таблиц больше подходит полное сканирование. В случае маленьких таблиц нет необходимости в хранении данных и таблиц, и индексов.
  • Создавайте первичные ключи для всех таблиц. При назначении столбца в качестве первичного колюча Oracle автоматически создаст индекс по этому столбцу.
  • Индексируйте столбцы, участвующие в многотабличных операциях соединения.
  • Индексируйте столбцы, которые часто используются в конструкциях WHERE.
  • Индексируйте столбцы, участвующие в операциях ORDER BY и GROUP BY или других операциях, таких как UNION и DISTINCT, включающих сортировку. Поскольку индексы уже отсортированы, объем работы по выполнению необходимой сортировки данных для упомянутых операций будет существенно сокращен.
  • Столбцы, стоящие из длинно-символьных строк, обычно плохие кандидаты на индексацию.
  • Столбцы, которые часто обновляются, в идеале не должны быть индексированы из-за связанных с этим накладных расходов.
  • Индексируйте таблицы в которых мало строк имеют одинаковые значения.
  • Сохраняйте количество индексов небольшим.
  • Составные индексы могут понадобиться там, где одностолбцовые значения сами по себе не уникальны. В составных индексах первым столбцом ключа должен быть столбец в котором количество строк с одинаковым значением минимально.

Всегда помните золотое правило индексации таблиц: индекс таблицы должен быть основан на типах запросов, которые будут выполняться над столбцами этой таблицы. На таблице можно создавать более одного индекса: например, можно создать индекс на столбце X, или столбце Y, или обоих сразу, а также один составной индекс на обоих столбцах. Принимая правильное решение относительно того, какие индексы следует создавать, подумайте о наиболее часто используемых типах запросов данных таблицы.

SQL CREATE TABLE Example

The following example creates a table called «Persons» that contains five columns: PersonID, LastName, FirstName,
Address, and City:

Example

CREATE TABLE Persons
(
   
PersonID int,
   
LastName varchar(255),
   
FirstName varchar(255),
   
Address varchar(255),
   
City varchar(255)
);

The PersonID column is of type int and will hold an integer.

The LastName, FirstName, Address, and City columns are of
type varchar and will hold characters, and the maximum length for these fields
is 255 characters.

The empty «Persons» table will now look like this:

PersonID LastName FirstName Address City
         

Tip: The empty «Persons» table can now be filled with data with the
SQL INSERT INTO statement.

Глобальные индексы

Глобальные индексы на секционированных таблицах могут быть как секционированными, так и несекционированными. Глобальные несекционированные индексы подобны обычным индексам Oracle для несекционированных таблиц. Для создания таких индексов применяется обычный синтаксис CREATE INDEX.

Ниже приведен пример глобального индекса на таблице ticket_sales:

Обратите внимание, что управление глобально секционированными индексами требует серьезных усилий. Всякий раз, когда происходит какое-т о действие DDL над секционированной таблицей, ее глобальные индексы требуют перестройки

Действия DDL над лежащей в основе таблице помечают глобальные индексы как недействительные. По умолчанию любая операция обслуживания секционированной таблицы делает недействительными глобальные индексы.

Давайте в качестве примера воспользуемся таблицей ticket_sales, чтобы разобраться, почему это так. Предположим, что вы ежеквартально уничтожаете самый старый раздел, чтобы освободить место для нового раздела, в который поступят данные за новый квартал. Когда уничтожается раздел, относящийся к таблице ticket_sales, глобальные индексы могут стать недействительными, потому что часть данных, на которые они указывают, перестают существовать. Чтобы предотвратить такое объявление недействительным индекса из-за уничтожения раздела, необходимо использовать опцию UPDATE GLOBAL INDEXES вместе с оператором DROP PARTITION:

Если не включить оператор UPDATE GLOBAL INDEXES, то все глобальные индексы станут недействительными. Опцию UPDATE GLOBAL INDEXES можно также использовать при добавлении, объединении, обмене, слиянии, перемещении, разделении или усечении секционированных таблиц. Разумеется, с помощью ALTER INDEX..REBUILD можно перестраивать любой индекс, который становится недействительным, но эта опция также требует дополнительных затрат времени и обслуживания.

При небольшом количестве листовых блоков индекса, что приводит к высокой конкуренции Oracle рекомендует использовать глобальные индексы с хэш-секционированием. Синтаксис для создания хэш-секционированного глобального индекса подобен тому, что применяется для хэш-секционированной таблицы. Например, следующий оператор создает хэш-секционированный глобальный индекс:

Мониторинг использования индекса

Если вы сомневаетесь в использовании определенного индекса, можете попросить Oracle выполнить мониторинг его применения. Таким образом, если индекс окажется избыточным, его можно уничтожить и сэкономить место в хранилище, а также снизить накладные расходы на операции DML.

Опишем, что потребуется сделать для отслеживания индекса в базе данных. Предположим, что вы пытаетесь узнать, используется ли индекс p_key_sales в определенных запросах к таблице sales. Обеспечьте репрезентативный промежуток времени для оценки использования индекса. Для базы данных OLTP это промежуток может быть относительно коротким. Для хранилища данных может понадобится запустить тестовый мониторинг на несколько дней, чтобы точно проверить, как используется индекс.

Чтобы запустить мониторинг использования индекса, войдите в базу данный как владелец индекса p_keyPsales и запустите следующую команду:

Теперь запустите какие-нибудь запросы к таблице sales. Завершите мониторинг, применив следующую команду:

После этого можно запросить представление словаря данных V$OBJECT_USAGE для определения того, используется ли индекс p_key_sales.

Причина по которой нельзя узнать количество случаев использования индекса, связана с тем, что база данных выполняет мониторинг его использования только на фазе разбора (parsing); если бы разбор производился при каждом выполнении, пострадала бы производительность.

6 ответов

25

Вы можете легко создать скрипт таблицы относительно пользовательского интерфейса:

http://connect.microsoft.com/SQLServer/feedback/details/273934

Однако это было встречено очень немногими голосами и было быстро сбито Microsoft. Возможно, вам стоит использовать сторонний инструмент для создания схемы ( Я писал об этом ).

В SQL Server 2012 есть новые функции метаданных, которые позволяют вам приблизиться к работе, которую вы должны выполнить в 2005, 2008 и 2008 годах R2, сводя вместе информацию столбца из метаданных (в которых много предостережений, для Например, если это десятичное значение, вам нужно добавить точность /масштаб, если ] вам нужно добавить спецификацию длины, если n char вы должны сократить max_length пополам, если это MAX вам нужно изменить -1 на MAX и т. д. и т. д.). В SQL Server 2012 эта часть немного проще:

Результаты:

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

Все сказанное, если вам нужно сделать это с помощью кода, но вы можете сделать это за пределами SQL Server, вы можете рассмотреть SMO /PowerShell. См. этот совет и метод Scripter.Script () .

8

Я написал это, чтобы автоматически создать схему со всеми вещами, pk, fk, разделами, ограничениями …

ВАЖНО !! перед exec

здесь SP:

выполнить его:

2

Это может быть использование отбойного молотка, чтобы положить гвоздь в стену, но, учитывая широкий круг вопроса, я думаю, что это правильный вариант упомянуть.

Если вы используете SQL Server 2012 SP4 +, 2014 SP2 + или 2016 SP1 +, вы можете использовать , чтобы создать копию базы данных без использования схемы данные. Это идеально подходит для создания всеобъемлющих копий схемы из нескольких таблиц и может облегчить необходимость «автоматизировать» процесс циклизации по серии таблиц, но следует предупредить, что все копии таблицы будут созданы внутри новой базы данных только для чтения ,

В этих таблицах будет включены внешние ключи, первичные ключи, индексы и ограничения. Они также будут включать статистику и данные хранилища запросов (если вы не укажете и )).

Синтаксис

Есть также пара других предостережений, о которых следует знать, у Брент Озар есть отличный пост , но все это действительно сводится к тому, как и почему вы хотите создавать копии таблиц относительно того, являются ли какие-либо из тонкостей разрывами транзакций.

1

Вы можете использовать команду «Создать сценарий» в SQL Server Management Studio, чтобы получить скрипт, который может создать вашу таблицу, включая индексы, триггеры, внешние ключи и т. д.

В SSMS

Щелкните правой кнопкой мыши по базе данных, в которой находится таблица.
Выберите «Задачи» -> Создание сценариев
Выберите «Выбрать конкретные объекты базы данных»
Разверните список «Таблицы» и установите флажок рядом с таблицей, которую вы хотите сценарием.
Нажмите «Далее», чтобы перейти на следующую страницу мастера
Задайте параметры сохранения по своему усмотрению, затем нажмите кнопку «Дополнительно»
Задайте дополнительные параметры по своему усмотрению

В частности, в разделе «Параметры таблицы /просмотра» обратите внимание, что (по умолчанию) индексы, триггеры и полнотекстовые индексы имеют сценарий not ; если вы хотите их, переключите их с «False» на «True». По завершении нажмите «ОК», чтобы сохранить дополнительные параметры и «Далее», чтобы просмотреть выбранные вами параметры

Нажмите «Далее» еще раз, чтобы создать сценарий.

Затем вы можете редактировать, чтобы включить только то, что вам нужно в вашей целевой базе данных.

-1

Вы можете использовать этот скрипт для копирования структуры таблицы с помощью внешних ключей, но без индексов.
Этот скрипт грамотно обрабатывает определенные пользователем типы и вычисленные столбцы.

Если вас это интересует, вы можете найти его также в моем блоге:

-3

SQL References

SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE

MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE

Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK

Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION

SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN

Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR

Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME

MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase

Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val

Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year

Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric

SQL OperatorsSQL Data TypesSQL Quick Ref

Замечания

Ключевое слово не несёт смысловой нагрузки и может быть опущено.

Когда столбец добавляется с помощью , во всех существующих в таблице строках этот столбец инициализируется значением по умолчанию (или NULL, если предложение для столбца отсутствует). Если предложение отсутствует, это сводится только к изменению метаданных, непосредственного изменения данных таблицы не происходит; добавленные значения NULL выводятся при чтении.

Добавление столбца с предложением или изменение типа существующего столбца влечёт за собой перезапись всей таблицы и её индексов. Но возможно исключение при смене типа существующего столбца: если предложение не меняет содержимое столбца и старый тип двоично приводится к новому или является неограниченным доменом поверх нового типа, перезапись таблицы не требуется; хотя все индексы с затронутыми столбцами всё же требуется перестроить. При добавлении или удалении системного столбца также необходима перезапись всей таблицы. Перестроение больших таблиц и/или их индексов может быть весьма длительной процедурой, которая при этом временно требует вдвое больше места на диске.

Добавление ограничений или влечёт за собой необходимость просканировать таблицу, чтобы проверить, что все существующие строки удовлетворяют ограничению, но перезаписывать таблицу при этом не требуется.

Возможность объединения множества изменений в одну команду полезна в основном тем, что позволяет совместить сканирования и перезаписи таблицы, требуемые этим операциям, и выполнить их за один проход.

Форма не удаляет столбец физически, а просто делает его невидимым для операций SQL. При последующих операциях добавления или изменения в этот столбец будет записываться значение NULL. Таким образом, удаление столбца выполняется быстро, но при этом размер таблицы на диске не уменьшается, так как пространство, занимаемое удалённым столбцом, не высвобождается. Это пространство будет освобождено со временем, по мере изменения существующих строк. (При удалении системного столбца это поведение не наблюдается, так как немедленно выполняется перезапись таблицы.)

Чтобы принудительно высвободить пространство, занимаемое столбцом, который был удалён, можно выполнить одну из форм , производящих перезапись всей таблицы. В результате все строки будут воссозданы так, что в удалённом столбце будет содержаться NULL.

Перезаписывающие формы небезопасны с точки зрения MVCC. После перезаписи таблица будет выглядеть пустой для параллельных транзакций, если они работают со снимком, полученным до момента перезаписи. За подробностями обратитесь к Разделу 13.5.

В указании предложения на самом деле можно записать выражение со старыми значениями строки; то есть, оно может ссылаться как на преобразуемые столбцы, так и на другие. Это позволяет записывать в очень общие преобразования данных. Ввиду такой гибкости, выражение не применяется к значению по умолчанию данного столбца (если таковое есть); результат может быть не константным выражением, что требуется для значения по умолчанию. Это означает, что в случае отсутствия явного приведения или присваивания старого типа новому, может не справиться с преобразованием значения по умолчанию, несмотря на то, что применяется предложение . В этих случаях нужно удалить значение по умолчанию с помощью , выполнить , а затем с помощью задать новое подходящее значение по умолчанию. Подобные соображения применимы и в отношении индексов и ограничений с этим столбцом.

Если у таблицы есть дочерние таблицы, добавлять, переименовывать или менять тип столбца, либо переименовывать наследуемое ограничение в родительской таблице, не делая того же самого во всех дочерних таблицах, нельзя. То есть, команда выполнена не будет. Это гарантирует, что дочерние таблицы всегда будут содержать те же столбцы, что и родительская.

Рекурсивная операция удалит столбец из дочерней таблицы, только если этот столбец не наследуется от каких-то других родителей и не была определён в дочерней таблице независимо. Нерекурсивная операция (т. е., ) никогда не удаляет унаследованные столбцы, но вместо этого помечает их как независимо определённые, а не наследуемые.

Действия , , и никогда не распространяются рекурсивно на дочерние таблицы; то есть, они всегда выполняются так, как будто указано . Операция добавления ограничения выполняется рекурсивно только для ограничений , не помеченных как .

Какие-либо изменения таблиц системного каталога не допускаются.

С помощью конструктора таблицUsing Table Designer

  1. В SSMS в обозревателе объектовподключитесь к экземпляру Компонент Database EngineDatabase Engine , который содержит изменяемую базу данных.In SSMS, in Object Explorer, connect to the instance of Компонент Database EngineDatabase Engine that contains the database to be modified.

  2. В обозревателе объектовразверните узел Базы данных , а затем базу данных, в которой будет размещена новая таблица.In Object Explorer, expand the Databases node and then expand the database that will contain the new table.

  3. В обозревателе объектов щелкните правой кнопкой мыши узел Таблицы базы данных и выберите Создать таблицу.In Object Explorer, right-click the Tables node of your database and then click New Table.

  4. Введите имена столбцов, выберите типы данных и определите для каждого столбца, могут ли в нем присутствовать значения NULL, как показано на следующей иллюстрации:Type column names, choose data types, and choose whether to allow nulls for each column as shown in the following illustration:

  5. Вы также можете задать другие свойства столбца, например является ли этот столбец столбцом идентификаторов или вычисляемым столбцом. Для этого щелкните столбец на вкладке свойств столбцов.To specify more properties for a column, such as identity or computed column values, click the column and in the column properties tab, choose the appropriate properties. Дополнительные сведения о свойствах столбцов см. в разделе Свойства столбца таблицы (среда SQL Server Management Studio).For more information about column properties, see Table Column Properties (SQL Server Management Studio).

  6. Чтобы указать, что столбец является столбцом первичного ключа, щелкните его правой кнопкой мыши и выберите Задать первичный ключ.To specify a column as a primary key, right-click the column and select Set Primary Key. Дополнительные сведения см. в статье Create Primary Keys.For more information, see Create Primary Keys.

  7. Чтобы создать связи по внешнему ключу, проверочные ограничения или индексы, щелкните правой кнопкой мыши панель конструктора таблиц и выберите в списке объект, как показано на следующей иллюстрации:To create foreign key relationships, check constraints, or indexes, right-click in the Table Designer pane and select an object from the list as shown in the following illustration:

    Дополнительные сведения об этих объектах см. в разделах Create Foreign Key Relationships, Create Check Constraints и Indexes.For more information about these objects, see Create Foreign Key Relationships, Create Check Constraints and Indexes.

  8. По умолчанию таблица содержится в схеме dbo .By default, the table is contained in the dbo schema. Чтобы указать другую схему для таблицы, щелкните правой кнопкой мыши панель конструктора таблиц и выберите Свойства , как показано на следующей иллюстрации.To specify a different schema for the table, right-click in the Table Designer pane and select Properties as shown in the following illustration. Выберите нужную схему из раскрывающегося списка Схема .From the Schema drop-down list, select the appropriate schema.

    Дополнительные сведения о схемах см. в разделе Create a Database Schema.For more information about schemas, see Create a Database Schema.

  9. В меню Файл выберите команду Сохранить имя_таблицы.From the File menu, choose Save table name.

  10. В диалоговом окне Выбор имени введите имя таблицы и нажмите кнопку OK.In the Choose Name dialog box, type a name for the table and click OK.

  11. Чтобы просмотреть новую таблицу, в обозревателе объектовразверните узел Таблицы , а затем нажмите клавишу F5 , чтобы обновить список объектов.To view the new table, in Object Explorer, expand the Tables node and press F5 to refresh the list of objects. Новая таблица будет отображена в списке таблиц.The new table is displayed in the list of tables.

Создание структуры таблицы БД Access командой CREATE TABLE языка SQL

2015-07-04

Инструкция SQL (SELECT) или запрос на выборку данных из таблиц БД Access рассмотрена в работе SQL — язык доступа и управления СУБД Access. В этой статье рассмотрим инструкцию SQL (CREATE TABLE) запроса на изменение.

К этому типу запросов относятся запросы на создание таблицы, на добавление или на удаление записей в таблице и запросы на ее обновление. Структуру таблицы можно создать с помощью оператора CREATE TABLE языка SQL.

Рассмотрим создание структуры таблиц базы данных БД «Деканат» на основе модели «сущность – связь» в СУБД Access с помощью запросов SQL. Для этого создадим новую базу данных sql_training_st.mdb в приложении Access 2007.


Рис. 1.

Следует отметить, что файл новой базы данных сохраним в формате Access 2002-2003. После создания новой БД, в окне приложения будет отображаться окно БД на вкладке Режим таблицы и новая пустая таблица с именем Таблица 1 в режиме таблица.


Рис. 2.

Закрываем Таблицу1, щелкнув правой кнопкой мыши на Таблица1 в окне редактирования, и в контекстном меню выбрав команду Закрыть. Далее создадим структуру таблицы Группы аналогичную структуре таблицы Группы, созданной в Конструкторе, используя команду SQL create table.

Для этого в окне БД щелкаем левой кнопкой мыши на вкладке Создание и выбираем команду «Конструктор запросов». В результате в окне редактирования откроется объект «Запрос1» и окно диалога «Добавление таблицы». Закроем окно диалога, щелкнув левой кнопкой мыши на пиктограмме «Закрыть» в правом верхнем углу этого окна.


Рис. 3.

Затем создаем структуру таблицы «Группы», для этого выберем режим SQL, выполнив команду Вид/ Режим SQL. Удаляем появившуюся в окне запроса команду SELECT и вводим с клавиатуры следующую команду:

create table Группы
(КодГруппы COUNTER CONSTRAINT PrimaryKey PRIMARY KEY,
Название char(6),
Курс int,
Семестр int);

Сохраняем запрос с именем «Создание Группы». В результате в «Области переходов» появится несвязанный объект — «Создание Группы». После сохранения запроса необходимо выполнить этот запрос, щелкая на пиктограмме «Выполнить». В результате выполнения команды «create table Группы» в «Области переходов» появится объект — «Группы: таблицы».


Рис. 4.

Закроем окно «Создание Группы» и откроем объект – «Группы: таблица» в режиме конструктора.


Рис. 5.

Созданная с помощью запроса на изменение структура таблицы «Группы» аналогична структуре таблицы «Группы студентов», созданной в режиме «Конструктор».

Затем создаем структуру таблицы «Студенты», для этого выберем режим SQL, выполнив команду Вид/ Режим SQL. Удаляем появившуюся в окне запроса команду SELECT и вводим с клавиатуры следующую команду:

create table Студенты
(КодСтудента COUNTER CONSTRAINT PrimaryKey PRIMARY KEY,
КодГруппы int,
Фамилия char(20),
Имя char(15),
Отчество char(15),
Пол char(1),
Дата_рождения DATE,
Место_рождения MEMO,
FOREIGN KEY (КодГруппы) REFERENCES Группы (КодГруппы));

Для описания связей между таблицами «Группы» и «Студенты» через поле «КодГруппы» (отношение «один-ко-многим»), а также обеспечения целостности базы
данных применена запись «FOREIGN KEY (КодГруппы) REFERENCES Группы (КодГруппы)».

Сохраняем запрос с именем «Создание Студенты». В результате в «Области переходов» появится несвязанный объект — «Создание Студенты». После сохранения запроса необходимо выполнить этот запрос, щелкая на пиктограмме «Выполнить». В результате выполнения команды «create table Студенты» в «Области переходов» появится объект — «Студенты: таблицы».


Рис. 6.

Синтаксис

Простая форма синтаксиса оператора CREATE TABLE в MySQL:

CREATE TABLE table_name ( column1 datatype , column2 datatype , … ); Полный синтаксис оператора MySQL CREATE TABLE: CREATE TABLE table_name ( column1 datatype ,

column2 datatype , …

| ] PRIMARY KEY (index_col_name, …) | index_name (index_col_name, …) | ] UNIQUE (index_col_name, …)

| {FULLTEXT | SPATIAL} index_name (index_col_name, …)

| ] FOREIGN KEY index_name (index_col_name, …) REFERENCES another_table_name (index_col_name, …)

| CHECK (expression)

{ENGINE | TYPE} = engine_name | AUTO_INCREMENT = value | AVG_ROW_LENGTH = value | CHARACTER SET = charset_name | CHECKSUM = {0 | 1} | COLLATE = collation_name | COMMENT = ‘string’ | DATA DIRECTORY = ‘absolute path’ | DELAY_KEY_WRITE = { 0 | 1 } | INDEX DIRECTORY = ‘absolute path’ | INSERT_METHOD = { NO | FIRST | LAST } | MAX_ROWS = value | MIN_ROWS = value | PACK_KEYS = {0 | 1 | DEFAULT} | PASSWORD = ‘string’ | RAID_TYPE = { 1 | STRIPED | RAIDO } RAID_CHUNKS = value RAID_CHUNKSIZE = value | ROW_FORMAT = {DEFAULT | DYNAMIC | FIXED | COMPRESSED} | UNION = (table1, … ) );

Параметры или аргументы

TEMPORARY — необязательный. Он указывает, что таблица является временной таблицей.IF NOT EXISTS — необязательный. Если указано, оператор CREATE TABLE не приведет к возникновению ошибки, если таблицы уже существуют.table_name — имя таблицы, которую вы хотите создать.column1, column2 — столбцы, которые вы хотите создать в таблице.datatype — тип данных для столбца и может быть одним из следующих:

Значение
CHAR
VARCHAR
BINARY
VARBINARY (length)
DATE
TIME
TIMESTAMP
DATETIME
YEAR
TINYINT
SMALLINT
MEDIUMINT
INT
INTEGER
BIGINT
REAL
DOUBLE
FLOAT
DECIMAL ) ]
NUMERIC ) ]
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM(value1, value2, …)

NULL или NOT NULL — каждый столбец должен быть определен как NULL или NOT NULL. Если этот параметр опущен, база данных предполагает значение NULL по умолчанию.DEFAULT default_value — необязательный. Это значение присваивается столбцу, если он оставлен пустым или NULL.AUTO_INCREMENT — необязательный. Он устанавливает столбец как поле с автонумерацией.constraint_name — необязательный. Имя ограничения, если вы определяете первичный ключ, уникальное ограничение или внешний ключ.index_col_name — необязательный. Это следующий синтаксис:

column_name

Сначала проверьте разрешения!Check your permissions first!

Эта задача требует разрешения CREATE TABLE в базе данных и разрешения ALTER на схему, в которой создается таблица.This task requires CREATE TABLE permission in the database, and ALTER permission on the schema in which the table is being created.

Если какие-либо столбцы в инструкции CREATE TABLE определены как принадлежащие к определяемому пользователем типу данных CLR, необходимо быть владельцем данного типа либо иметь разрешение REFERENCES на него.If any columns in the CREATE TABLE statement are defined as a CLR user-defined type, either ownership of the type, or REFERENCES permission on it is required.

Если какие-либо столбцы в инструкции CREATE TABLE имеют связанную коллекцию схем XML, необходимо быть владельцем этого набора схем или иметь разрешение REFERENCES на него.If any columns in the CREATE TABLE statement have an XML schema collection associated with them, either ownership of the XML schema collection or REFERENCES permission on it is required.

Типы таблиц Oracle

В базах данных Oracle можно создавать таблицы (table) двух типов: реляционные и объектные.

Реляционные таблицы — это базовые табличные структуры, которые состоят из строк и столбцов, хранящих данные.

Объектные таблицы используют объектные типы для определений столбцов и служат для хранения экземпляров объектов определенного типа. В этой статье будут использоваться исключительно реляционные таблицы.

Что такое таблица DUAL?

Таблица DUAL относится к схеме sys и создается автоматически при создании словаря данных.Таблица DUAL имеет единственный столбец по имени dummy и одну строку. Эта таблица позволяет применять команду Oracle SELECT для вычисления константных выражений. Как уже было показано, все, что есть в Oracle, должно находиться в какой-то таблице. Даже если что-то не находится в таблице, например, вычисляемое арифметическое выражение, запрос, который извлекает это значение, нуждается в какой-то таблице, и таблица DUAL служит таблицей “остальные” (catchall) для таких выражений. Например, для вычисления произведения 9 на 24567, можно воспользоваться следующей командой SQL: SELECT 9*24567 FROM dual.

Временные и производные таблицы

Последнее обновление: 14.08.2017

Временные таблицы

В дополнение к табличным переменным можно определять временные таблицы. Такие таблицы могут быть полезны для хранения табличных данных
внутри сложного комплексного скрипта.

Временные таблицы существуют на протяжении сессии базы данных. Если такая таблица создается в редакторе запросов (Query Editor) в SQL Server Management Studio,
то таблица будет существовать пока открыт редактор запросов. Таким образом, к временной таблице можно обращаться из разных скриптов внутри редактора запросов.

После создания все временные таблицы сохраняются в таблице tempdb, которая имеется по умолчанию в MS SQL Server.

Если необходимо удалить таблицу до завершения сессии базы данных, то для этой таблицы следует выполнить команду DROP TABLE.

Название временной таблицы начинается со знака решетки #. Если используется один знак #, то создается локальная таблица, которая доступна в течение
текущей сессии. Ели используются два знака ##, то создается глобальная временная таблица. В отличие от локальной глобальная временная таблица доступна всем открытым сессиям базы данных.

Например, создадим локальную временную таблицу:

CREATE TABLE #ProductSummary
(ProdId INT IDENTITY,
ProdName NVARCHAR(20),
Price MONEY)

INSERT INTO #ProductSummary
VALUES ('Nokia 8', 18000),
		('iPhone 8', 56000)

SELECT * FROM #ProductSummary

И с этой таблицей можно работать в большей степени как и с обычной таблицей — получать данные, добавлять, изменять и удалять их. Только после закрытия
редактора запросов эта таблица перестанет существовать.

Подобные таблицы удобны для каких-то временных промежуточных данных. Например, пусть у нас есть три таблицы:

CREATE TABLE Products
(
    Id INT IDENTITY PRIMARY KEY,
    ProductName NVARCHAR(30) NOT NULL,
    Manufacturer NVARCHAR(20) NOT NULL,
    ProductCount INT DEFAULT 0,
    Price MONEY NOT NULL
);
CREATE TABLE Customers
(
    Id INT IDENTITY PRIMARY KEY,
    FirstName NVARCHAR(30) NOT NULL
);
CREATE TABLE Orders
(
    Id INT IDENTITY PRIMARY KEY,
    ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE,
    CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE,
    CreatedAt DATE NOT NULL,
    ProductCount INT DEFAULT 1,
    Price MONEY NOT NULL
);

Выведем во временную таблицу промежуточные данные из таблицы Orders:

SELECT ProductId, 
		SUM(ProductCount) AS TotalCount, 
		SUM(ProductCount * Price) AS TotalSum
INTO #OrdersSummary
FROM Orders
GROUP BY ProductId

SELECT Products.ProductName, #OrdersSummary.TotalCount, #OrdersSummary.TotalSum
FROM Products
JOIN #OrdersSummary ON Products.Id = #OrdersSummary.ProductId

Здесь вначале извлекаются данные во временную таблицу #OrdersSummary. Причем так как данные в нее извлекаются с помощью выражения SELECT INTO, то
предварительно таблицу не надо создавать. И эта таблица будет содержать id товара, общее количество проданного товара и на какую сумму был продан товар.

Затем эта таблица может использоваться в выражениях INNER JOIN.

Подобным образом определяются глобальные временные таблицы, единственное, что их имя начинается с двух знаков ##:

CREATE TABLE ##OrderDetails
(ProductId INT, TotalCount INT, TotalSum MONEY)

INSERT INTO ##OrderDetails
SELECT ProductId, SUM(ProductCount), SUM(ProductCount * Price)
FROM Orders
GROUP BY ProductId

SELECT * FROM ##OrderDetails

Производные таблицы

Кроме временных таблиц MS SQL Server позволяет создавать производные таблицы, которые в плане производительности являются более эффективным решением, чем временные.
Производная таблица задается с помощью ключевого слова WITH:

WITH OrdersInfo AS
(
	SELECT ProductId, 
		SUM(ProductCount) AS TotalCount, 
		SUM(ProductCount * Price) AS TotalSum
	FROM Orders
	GROUP BY ProductId
)

SELECT * FROM OrdersInfo -- здесь нормально
SELECT * FROM OrdersInfo -- здесь ошибка
SELECT * FROM OrdersInfo -- здесь ошибка

В отличие от временных таблиц производные хранятся в оперативной памяти и существуют только во время первого выполнения запроса, который представляет эту таблицу.

НазадВперед

Ссылка на основную публикацию