Як змінити тип даних у таблиці PostgresSQL?
У мене в таблиці є атрибут char(5000) , хочу змінити його на тип text . Чи можливо це і якщо та то як?
5,357 13 13 золотих знаків 62 62 срібних знака 123 123 бронзових знаків
alter table table_name alter colunm type text не працює? Тоді 1) додати нове поле; 2) скопіювати значення зі старого в нове; 3) переконатися, що скопійовано вірно; 4) видалити старе поле;
SQL-Ex blog
Запити SQL для зміни типу даних стовпця
- SQL Server 2019
- MySQL Server
- PostgreSQL
SQL-запит для зміни типу стовпця у базі даних SQL Server
Ми можемо використовувати оператор ALTER TABLE ALTER COLUMN зміни типу стовпця в таблиці. Використовує наступний синтаксис:
ALTER TABLE [tbl_name] ALTER COLUMN [col_name] [DATA_TYPE]
- tbl_name: визначає ім'я таблиці.
- col_name: задає ім'я стовпця, тип якого ми хочемо змінити col_name має бути вказано після ключових слів ALTER COLUMN.
- DATA_TYPE: задає новий тип даних та довжину стовпця.
CREATE TABLE [dbo].[tblstudent]
(
[id] [INT] IDENTITY(1, 1) NOT NULL,
[student_code] [VARCHAR](20) NOT NULL,
[student_firstname] [VARCHAR](250) NOT NULL,
[student_lastname] [VARCHAR](10) NOT NULL,
[address] [VARCHAR](max) NULL,
[city_code] [VARCHAR](20) NOT NULL,
[school_code] [VARCHAR](20) NULL,
[admissiondate] [DATETIME] NULL,
CONSTRAINT [PK_ID] PRIMARY KEY CLUSTERED ( [id] ASC )
)
Припустимо, ви хочете змінити тип даних [address] з varchar(max) на nvarchar(1500). Виконайте наступний запит, щоб змінити тип стовпця.
Alter table tblstudent alter column address nvarchar(1500)
Перевіримо зміни за допомогою наступного сценарію.
use StudentDB
go
select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS
where table_name='tblStudent'
Видно, що тип стовпця змінився.
- При зменшенні розміру стовпця SQL Server перевірить дані в таблиці і якщо дані перевищують нову довжину, поверне попередження і перерве виконання оператора.
- При зміні типу даних nvarchar на varchar, якщо стовпець містить рядок Юнікод, SQL Server повертає помилку і перериває оператор.
- На відміну від MySQL, зміна типу даних кількох стовпців не допускається.
- Ви не можете додати
а. обмеження NOT NULL, якщо стовпець містить значення NULL;
б. обмеження UNIQUE, якщо у стовпці є дублікати.
Запит SQL для зміни типу стовпця MySQL
Для зміни типу даних шпальти ми можемо використовувати оператор ALTER TABLE MODIFY COLUMN. Синтаксис зміни типу даних стовпця має такий вигляд:
ALTER TABLE [tbl_name] MODIFY COLUMN [col_name_1] [DATA_TYPE],
MODIFY [col_name_2] [data_type],
MODIFY [col_name_3] [data_type]
- Tbl_name: визначає ім'я таблиці, що містить стовпець, який ми хочемо змінити.
- Col_name: задає ім'я стовпця, тип якого ми хочемо змінити Col_name має бути вказано після ключових слів MODIFY COLUMN. Ми можемо змінити тип даних кількох стовпців. При зміні типу даних кількох стовпців, стовпці поділяються комою (,).
- Datatype: задає новий тип даних та довжину стовпця. Тип даних повинен вказуватись після імені стовпця.
create table tblactor
(
actor_id int,
first_name varchar(500),
first_name varchar(500),
address varchar(500),
CityID int,
lastupdate datetime
)
Розглянемо кілька прикладів.
Приклад 1: Запит зміни типу одного стовпця
Ми хочемо змінити тип стовпця address з varchar(500) тип даних TEXT. Виконайте наступний запит, щоб змінити тип даних.
mysql> ALTER TABLE tblActor MODIFY address TEXT
Для перевірки змін виконайте наступний запит:
mysql> describe tblactor
Як можна побачити, тип даних стовпця address було змінено на TEXT.
Приклад 2: SQL-запит для зміни типу даних кількох стовпців
Ми можемо змінити тип даних кількох стовпців у таблиці. У прикладі ми хочемо змінити тип стовпців first_name і last_name. Новим типом даних стовпців стає TINYTEXT.
mysql> ALTER TABLE tblActor MODIFY first_name TINYTEXT, modify last_name TINYTEXT;
Виконайте наступний запит, щоб перевірити зміни:
mysql> describe tblActor
Як видно, тип даних стовпців first_name та last_name змінився на TINYTEXT.
Приклад 3: Перейменування стовпця MySQL
Щоб перейменувати стовпці, ми маємо використовувати оператор ALTER TABLE CHANGE COLUMN. Припустимо, що ви хочете перейменувати стовпець CityID у CityCode; Ви повинні виконати наступний запит.
mysql> ALTER TABLE tblActor CHANGE COLUMN CityID CityCode int
Виконайте команду describe, щоб побачити зміни структури таблиці.
Видно, що ім'я шпальти змінилося.
Запит SQL для зміни типу стовпця у базі даних PostgreSQL
Ми можемо використовувати оператор ALTER TABLE ALTER COLUMN для зміни типу стовпця. Синтаксис зміни типу даних стовпця:
ALTER TABLE [tbl_name] ALTER COLUMN [col_name_1] TYPE [data_type],
ALTER COLUMN [col_name_2] TYPE [data_type],
ALTER COLUMN [col_name_3] TYPE [data_type]
- Tbl_name: задає ім'я таблиці, що містить стовпець, який потрібно змінити.
- Col_name: задає ім'я стовпця, тип якого ми хочемо змінити Col_name має бути вказано після ключових слів ALTER COLUMN. Ми можемо змінити тип даних кількох стовпців.
- Data_type: задає новий тип даних та довжину стовпця. Тип даних має бути вказано після ключового слова TYPE.
create table tblmovies
(
movie_id int,
Movie_Title varchar(500),
Movie_director TEXT,
Movie_Producer TEXT,
duraion int,
Certificate varchar(5),
rent numeric(10,2)
)
Тепер розглянемо кілька прикладів.
Приклад 1: Запит SQL для зміни типу даних одного стовпця
Ми хочемо змінити тип стовпця movie_id з даних int4 на int8. Щоб змінити тип даних, виконайте наступний запит.
ALTER TABLE tblmovies ALTER COLUMN movie_id TYPE BIGINT
Для перевірки змін виконайте наступний запит:
SELECT
table_catalog,
table_name,
column_name,
udt_name,
character_maximum_length
FROM
information_schema.columns
WHERE
table_name = 'tblmovies';
Як бачимо, тип даних стовпця movie_id став int8.
Приклад 2: Запит SQL для зміни типу даних кількох стовпців
Ми можемо змінити тип даних відразу кількох стовпців таблиці. У нашому прикладі ми хочемо змінити тип стовпців movie_title та movie_producer. Новим типом даних для стовпця movie_title стає TEXT, а movie_producer - varchar(2000).
ALTER TABLE movie_title TYPE text, ALTER COLUMN movie_producer TYPE varchar(2000);
Виконайте наступний запит для перевірки змін:
SELECT
table_catalog,
table_name,
column_name,
udt_name,
character_maximum_length
FROM
information_schema.columns
WHERE
table_name = 'tblmovies';
Як бачимо, типом даних стовпця movie_title є TEXT, а movie_producer - varchar(2000).
Зворотні посилання
Немає зворотних посилань
Коментарі
Показувати коментарі Як список | Деревоподібною структурою
Автор не дозволив коментувати цей запис