这篇文章涵盖了改变列类型的不同SQL查询。我们将学习如何改变以下数据库的列的数据类型。
- SQL Server 2019
- MySQL服务器
- PostgreSQL
改变SQL Server数据库中的列类型的SQL查询
我们可以使用ALTER TABLE ALTER COLUMN语句来改变表的列类型。改变列类型的语法如下。
ALTER TABLE [tbl_name] ALTER COLUMN [col_name_1] [DATA_TYPE]
在这个语法中。
- Tbl_name:指定表的名称
- Col_name:指定你想改变其数据类型的列名。col_name必须在ALTER COLUMN关键字之后指定。
- 数据类型:指定新的数据类型和列的长度。
为了演示,我创建了一个名为tblStudent的表。
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时,如果该列包含Unicode字符串,那么SQL Server将返回错误并终止该语句。
- 与MySQL不同,不允许改变多列的数据类型
- 你不能添加
- 如果该列包含NULL值,则有NOT NULL约束。
- 如果列有重复的值,则采用UNIQUE约束。
在MySQL服务器中改变列类型的SQL查询
我们可以使用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关键字之后指定。我们可以改变多个列的数据类型。当我们改变多列的数据类型时,每一列必须用逗号(,)隔开。
- 数据类型:指定新的数据类型和列的长度。数据类型必须在列名之后指定。
为了演示,我在DemoDatabase中创建了一个名为 tblactor在DemoDatabase中。创建该表的代码如下
create table tblactor
(
actor_id int,
first_name varchar(500),
first_name varchar(500),
address varchar(500),
CityID int,
lastupdate datetime
)
现在,让我们通过几个例子来理解这个概念。
例1:改变一个列的数据类型的SQL查询
我们想把地址列的类型从varchar(500)改为TEXT数据类型。运行下面的查询来改变数据类型。
mysql> ALTER TABLE tblActor MODIFY address TEXT
运行下面的查询来验证这些变化。
mysql> describe tblactor
正如你所看到的,列的数据类型被改为 地址列的数据类型已经被改变为 TEXT.
例2:改变多列数据类型的SQL查询
我们可以改变一个表的多个列的数据类型。在我们的例子中,我们想改变first_name和last_name的列类型。新的数据类型是varchar(200)。
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命令,查看表结构的变化。
正如你所看到的,列名已经被改变。
改变PostgreSQL数据库中列类型的SQL查询
我们可以使用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关键字之后指定。我们可以改变多个列的数据类型
- 数据类型:指定新的数据类型和列的长度。数据类型必须在TYPE关键字之后指定。
为了演示,我创建了一个名为 tblmovies在DemoDatabase中。创建该表的代码如下。
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_director的列类型。movie_title列的新数据类型是TEXT,而movie_producer的新数据类型是varchar(2000)。
ALTER TABLE tblmovies ALTER COLUMN 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)。
小结
在这篇文章中,我们学习了如何改变SQL Server 2019、MySQL Server和PostgreSQL中列的数据类型。