SQL更改修改关系数据库表中的现有列和约束。

一组设计良好的表是任何数据库应用程序的基础。然而,随着时间的推移,最初的假设被细化,项目中添加了额外的范围,对问题域的新理解需要更改表模式。SQL Alter语句修改现有的列asd约束,而不是通过数据迁移过程删除活的生产表;一般来说,创伤较小的调整。

SQL ALTER可以通过添加和删除列来更改表,转换(铸造)数据类型,删除(丢弃)表,以及用于某些数据库 - 重命名表。SQL ALTER的语法在商业数据库供应商之间变化;检查特定于您的类型和数据库版本的文档。下面还注意到了显着的语法变体。

起点

我们从一部电影表,他们的创造者和发布年开始。(SQL创建和填充此表的帖子结束时出现。)

标题 导演
黑天鹅 Aronofsky. 2010年
龙纹身的女孩 2011年
原子金发女郎 猎犬 2017
小于零 Kanievska 1987
的天才一族 安德森 2001年

SQL修改添加

ALTER TABLE TABLENAME ADD(Columnone数据类型,ColumnTWO数据类型,ColumnThree DataType);

要添加包含IMDB评级的列 - 浮点值 - 我们可以使用以下内容:

更改桌面电影添加评级浮点;

添加列的单元格为空。要在新列中设置一个值,然后检查它,使用如下方法:

更新电影集额定值= 1.2其中标题='黑天鹅';选择*来自标题='黑天鹅'的电影;
标题 导演 评级
黑天鹅 Aronofsky. 2010年 1.2

SQL ALTER修改

SQL Alter Modify修改列的数据类型。有三种常用的语法变体;查看数据库文档了解更多细节。

SQL Server / Microsoft Access MySQL / Oracle < 10g版本 Oracle >版本10g
ALTER TABLE tableALTER COLUMN列类型 ALTER TABLE TABLEMODify列列数据类型 ALTER TABLE TABLEMODIFY列数据类型

转换数据类型时的数据丢失问题

修改列数据类型显然会修改现有数据;必须进行规划,以确保没有意外的数据丢失。例如,将评级列从FLOAT更改为INT会减少小数部分。

ALTER TABLE movies MODIFY COLUMN rating INT;选择*来自标题='黑天鹅'的电影;
标题 导演 评级
黑天鹅 Aronofsky. 2010年 1

并不是所有的数据类型都可以在两者之间转换。包含仅包含数字的字符串的列可以转换为数字类型,但包含字母字符的字符串将导致转换错误。

可以修改列以使它们“更宽” - a瓦尔(10)可以成为A.VARCHAR (20)这是没有问题的,但是当列变得“更窄”时,大多数数据库将根据提议的新数据类型验证现有数据,并抛出截断转换错误。

添加不是null约束

一种没有空可以将约束添加到列中,该列提供了当前在列中存在nulls。此约束执行一个字段以始终包含一个值,这意味着您无法插入新记录,或更新记录,而无需此字段的值。

更改表动画修改列额定值INT NOT NOUL;

在添加NOT NULL约束之前,必须执行到NULL等价的转换——一个零或空字符串。

更新表设置列=''其中列为null;

SQL修改重命名

有些数据库允许用Alter Rename命令重命名列和表。下面的例子首先将表从“movies”重命名为“chill”,然后将“ratings”列重命名为“opinions”,结果是:

更改桌面电影重命名为寒意;更改表电影将列评级重命名为意见;选择*从寒意中,标题='黑天鹅';
标题 导演 意见
黑天鹅 Aronofsky. 2010年 1

支持ALTER RENAME的那些数据库的一些使用说明:

  • 与被重命名的表相关联的数据库对象(索引和触发器)将自动与新表相关联。
  • Alter Rename会影响当前活动数据库中的表。它不能用于在数据库之间移动;即,重命名database_one.table to database_two.table将无法正常工作。
  • 视图或触发器语句中引用的表名必须手动重命名。

SQL ALTER DROP.

SQL ALTER DROP DROPS(或删除)表列。注意请某些数据库禁止丢弃列。

更改桌面电影丢弃列额定值;选择*来自标题='黑天鹅'的电影;
标题 导演
黑天鹅 Aronofsky. 2010年

要了解更多关于SQL的信息,请注册我们的SQL 188金宝搏安不安全Nanodegree程序, 描述在细节

开始学习

SQL Alter示例表代码

以下将构建和填充本博客文章中提到的示例数据,您可以交互地测试的数据SQL小提琴

创建表电影(Title Varchar(50),Auteur Varchar(33),年INT);插入电影价值(“Black Swan”,“Aronofsky”,2010),(“龙纹身的女孩”,“Fincher”,2011),(“原子金发女郎”,“leitch”,2017),(“少而不是零“,”Kanievska“,1987),(”皇家Tenenbaums“,”安德森“,2001年);