对表定义的修改,不同的数据库系统有不同的限制。Oracle数据库就限制对列的修改只能是加大列的宽度而不能是缩小,而且不能删除列。
增加新列
ALTER TABLE table_name ADD colum_name data_type
向已有表中增加非空约束的列
ALTER TABLE student ADD Email CHAR(15) NOT NULL
表中不能有其他数据,有数据会报错,因为所添列为非空,必须为其设置缺省值!
指明缺省值
ALTER TABLE student ADD Email CHAR(15) NOT NULL DEFAULT 'No Email'
删除列
删除学生表中的birthday 列
ALTER TABLE student DROP COLUMN birthday
直接删除具有非空约束的列
ALTER TABLE student DROP COLUMN sex
该列设有缺省值,不能直接删除,需要先删除约束,再删除该列!约束名可从直接删除该列系统的出错报告信息中获取
ALTER TABLE student DROP CONSTRAINT DF_student_sex_4CA06362
ALTER TABLE student DROP COLUMN sex
修改列
ALTER TABLE student MODIFY column_name data_type
在SQL Server 数据库系统中,并不支持MODIFY 关键字。要修改数据库中的列,我们可以通过 ALTER COLUMN 关键字实现,即将MODIFY替换ALTER COLUMN 即可。
ALTER TABLE student ALTER COLUMN Email CHAR(25)
取消 student 表中 sname 列的非空约束
ALTER TABLE student ALTER COLUMN sname CHAR(25) NULL
修改表中的某列,为其增加非空约束时,我们必须确保该列已经存在的所有记录中没有NULL 值
与许多DBMS产品不同,SQL Server 不仅允许改变列的数据长度,而且还允许改变其数据类型。但是当列为一下情况时,则不能改变其数据类型。
当改变列的数据类型时,列中已有的数据必须与新的数据类型兼容。比较常用的转换是从INTEGER 转换为字符串,因为CHAR列可保存数字、字母和特殊符号。但是,如果要将CHAR 类型转换为 INTEGER 类型,必须保证表的每行上所转换的CHAR 字段具有数字或NULL 值。
将student 表的 sno 列的类型转换为CHAR 类型
ALTER TABLE student ALTER COLUMN sno CHAR(5) NOT NULL
增加新列
ALTER TABLE table_name ADD colum_name data_type
向已有表中增加非空约束的列
ALTER TABLE student ADD Email CHAR(15) NOT NULL
表中不能有其他数据,有数据会报错,因为所添列为非空,必须为其设置缺省值!
指明缺省值
ALTER TABLE student ADD Email CHAR(15) NOT NULL DEFAULT 'No Email'
删除列
删除学生表中的birthday 列
ALTER TABLE student DROP COLUMN birthday
直接删除具有非空约束的列
ALTER TABLE student DROP COLUMN sex
该列设有缺省值,不能直接删除,需要先删除约束,再删除该列!约束名可从直接删除该列系统的出错报告信息中获取
ALTER TABLE student DROP CONSTRAINT DF_student_sex_4CA06362
ALTER TABLE student DROP COLUMN sex
修改列
ALTER TABLE student MODIFY column_name data_type
在SQL Server 数据库系统中,并不支持MODIFY 关键字。要修改数据库中的列,我们可以通过 ALTER COLUMN 关键字实现,即将MODIFY替换ALTER COLUMN 即可。
ALTER TABLE student ALTER COLUMN Email CHAR(25)
取消 student 表中 sname 列的非空约束
ALTER TABLE student ALTER COLUMN sname CHAR(25) NULL
修改表中的某列,为其增加非空约束时,我们必须确保该列已经存在的所有记录中没有NULL 值
与许多DBMS产品不同,SQL Server 不仅允许改变列的数据长度,而且还允许改变其数据类型。但是当列为一下情况时,则不能改变其数据类型。
1.列是 TEXT、IMAGE、NTEXT、TIMESTAMP类型
2.列是索引的一部分
3.列是PRIMARY 或者 KEY FOREIGN KEY的一部分
4.列具有缺省值约束
5.列具有CHECK约束
当改变列的数据类型时,列中已有的数据必须与新的数据类型兼容。比较常用的转换是从INTEGER 转换为字符串,因为CHAR列可保存数字、字母和特殊符号。但是,如果要将CHAR 类型转换为 INTEGER 类型,必须保证表的每行上所转换的CHAR 字段具有数字或NULL 值。
将student 表的 sno 列的类型转换为CHAR 类型
ALTER TABLE student ALTER COLUMN sno CHAR(5) NOT NULL