MySQL: ALTER

正文

在数据库管理系统(DBMS)中,DDL(Data Definition Language)、DCL(Data Control Language)、和 DML(Data Manipulation Language)是三种主要的SQL(Structured Query Language)语句类型,它们各自负责数据库的不同方面。

  1. DDL(Data Definition Language):数据定义语言,用于定义或修改数据库的结构。它主要包括以下命令:
    • CREATE:用于创建新的数据库、表、索引、视图等对象。
    • ALTER:用于修改现有数据库对象的结构,如添加、删除或修改表中的列。
    • DROP:用于删除整个数据库、表、索引、视图等对象。
    • TRUNCATE:用于删除表中的所有数据,但不删除表本身。
    • COMMENT:用于给数据库、表、列等添加注释。
    • RENAME:用于重命名数据库中的对象,如表或索引。
  2. DCL(Data Control Language):数据控制语言,用于定义数据库、表、或字段的访问权限和安全级别。它主要包括以下命令:
    • GRANT:用于授予用户或角色对数据库对象的访问权限。
    • REVOKE:用于撤销之前通过GRANT命令授予的权限。
  3. DML(Data Manipulation Language):数据操纵语言,用于检索、插入、更新和删除数据库中的数据。它主要包括以下命令:
    • SELECT:用于从数据库表中检索数据。
    • INSERT:用于向数据库表中插入新的数据行。
    • UPDATE:用于修改表中的数据。
    • DELETE:用于从表中删除数据行。

这三种语言共同构成了SQL的核心,使得用户能够高效地管理数据库中的数据。在实际应用中,DDL、DCL和DML语句的使用是密不可分的,它们相互配合,共同完成了数据库的创建、维护和管理等任务。

ALTER TABLE

在 MySQL 中,ALTER TABLE 语句用于修改表结构,但它本身并不直接支持在添加列的同时给这些新列填充多个具体的值(即,不是像 INSERT 语句那样插入数据行)。ALTER TABLE ... ADD COLUMN 只是用于添加新的列到表中,而不涉及填充数据。

如果你想要为新添加的列填充数据,你需要在添加列之后使用 UPDATE 语句来更新表中的行,或者对于新插入的行,在 INSERT 语句中指定这些列的值。

然而,如果你的意图是在添加列时给表中已存在的每一行都设置一个默认值,那么你只需要在 ADD COLUMN 语句中指定该默认值即可。这样,MySQL 会自动为新列中的每一行应用这个默认值。

例如,如果你想要给 employees 表添加一个新列 hire_date,并且想要为表中已存在的每一行都设置 hire_date 的默认值为 '1970-01-01',你可以这样做:

ALTER TABLE employees  
ADD COLUMN hire_date DATE DEFAULT '1970-01-01';

但是,如果你想要在添加多个列的同时,基于某些逻辑或条件为这些新列填充不同的值(即,不是统一的默认值),那么你需要分别进行:

  1. 使用 ALTER TABLE ... ADD COLUMN 语句添加列。
  2. 使用 UPDATE 语句基于需要填充的逻辑或条件更新这些新列的值。

例如,如果你还想要添加一个 salary 列,并根据某种逻辑(比如基于员工的职位或其他属性)为现有员工设置不同的薪资,你需要:

-- 添加新列  
ALTER TABLE employees  
ADD COLUMN salary DECIMAL(10, 2);  
  
-- 更新新列的值  
-- 假设这里有一个简单的逻辑:所有员工薪资设为 50000  
UPDATE employees  
SET salary = 50000;  
  
-- 或者,基于更复杂的逻辑更新薪资  
-- 例如,基于职位设置薪资  
UPDATE employees  
SET salary = CASE  
    WHEN position = 'Engineer' THEN 60000  
    WHEN position = 'Manager' THEN 80000  
    ELSE 50000  
END;

注意,UPDATE 语句中的条件(如 position = 'Engineer')应该基于你表中实际存在的列和值来编写。

ADD COLUMN 多列

在 MySQL 中,ALTER TABLE ... ADD COLUMN 语句通常用于一次添加一个列。但是,如果你想要一次性添加多个列,你需要在 ALTER TABLE 语句中多次使用 ADD COLUMN,每个新列之间用逗号分隔,但每个 ADD COLUMN 都需要单独的一行(尽管在某些 SQL 方言或工具中可能允许在一行内使用多个 ADD COLUMN,但在 MySQL 的标准语法中,这是不推荐的)。

下面是一个在 ALTER TABLE 语句中一次性添加多个列的示例:

ALTER TABLE employees  
ADD COLUMN column1_name datatype1 [constraint1],  
ADD COLUMN column2_name datatype2 [constraint2],  
ADD COLUMN column3_name datatype3 [constraint3];

注意,每个 ADD COLUMN 子句都是独立的,并且以逗号分隔(尽管在 ADD COLUMN 之间实际上不需要逗号,因为它们是单独的语句,但出于清晰和一致性的目的,在列出多个时添加逗号是一个好习惯)。然而,在 MySQL 中,由于语法限制,每个 ADD COLUMN 通常需要放在单独的行上。

下面是一个具体的例子

ALTER TABLE employees  
ADD COLUMN email VARCHAR(255) NOT NULL UNIQUE,  
ADD COLUMN phone_number VARCHAR(20),  
ADD COLUMN hire_date DATE DEFAULT '1970-01-01';

在这个例子中,employees 表被添加了三个新列:

  • email 列,数据类型为 VARCHAR(255),不允许空值(NOT NULL),并且所有值都必须是唯一的(UNIQUE)。
  • phone_number 列,数据类型为 VARCHAR(20),没有额外的约束(尽管它可能应该有一个 NOT NULL 约束,具体取决于你的需求)。
  • hire_date 列,数据类型为 DATE,默认值为 '1970-01-01'(这可能不是最佳实践,因为 1970-01-01 通常是 UNIX 时间戳的起点,你可能想要一个更有意义的默认值,或者确保在插入新记录时提供具体的日期)。

--end--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值