MySQL ALTER命令
MySQL ALTER 命令用于修改已存在的数据库表结构,包括添加、修改或删除列,修改表名以及修改其他表属性。使用 ALTER 命令,可以根据需要动态地修改数据库模式。
以下是 ALTER 命令的一些常见用法:
1.添加列:
ALTER TABLE table_name ADD column_name datatype;
2.修改列的数据类型:
ALTER TABLE table_name MODIFY column_name new_datatype;
3.修改列名:
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
4.修改列的默认值:
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_value;
5.删除列:
ALTER TABLE table_name DROP COLUMN column_name;
6.修改表名:
ALTER TABLE table_name RENAME TO new_table_name;
7.添加主键约束:
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
8.添加外键约束:
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES referenced_table(ref_column);
9.添加唯一约束:
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);
10.修改表的存储引擎:
ALTER TABLE table_name ENGINE = engine_name;
11.创建普通索引:
ALTER TABLE table_name ADD INDEX index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);
12.创建唯一索引:
ALTER TABLE table_name ADD UNIQUE INDEX index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);
13.删除索引:
ALTER TABLE table_name DROP INDEX index_name;
删除添加字段
举个例子:
现有一表结构如下:
我们可以使用 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段:
ALTER TABLE testalter_tbl DROP i;
结果如下所示:
注意:如果数据表中只剩余一个字段则无法使用DROP来删除字段。
我们可以使用 ADD 子句来向数据表中添加列,如下实例在表 testalter_tbl 中添加 i 字段,并定义数据类型:
ALTER TABLE testalter_tbl ADD i INT;
结果如图所示:
执行以上命令后,i 字段会自动添加到数据表字段的末尾。
如果你需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。
举个例子:
ALTER TABLE testalter_tbl ADD Y INT FIRST;
这样就能使Y字段添加到数据表字段的开头:
修改字段类型及名称
如果需要修改字段类型及名称, 我们可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
使用 MODIFY 子句,把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:
ALTER TABLE testalter_tbl MODIFY c CHAR(10);
结果如下所示:
使用 CHANGE 子句,语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。
ALTER TABLE testalter_tbl CHANGE i j BIGINT; -- 这将修改i字段为j字段,并指定类型为bigint
结果如下所示:
我们也可以使用 CHANGE 子句达到不修改字段名、仅修改类型的目的:
ALTER TABLE testalter_tbl CHANGE c c INT;
执行结果如下所示:
修改表名
如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。
ALTER TABLE testalter_tbl RENAME TO qiushuo_tbl;
将数据表 testalter_tbl 重命名为 qiushuo_tbl:
MySQL 序列使用
MySQL中没有内置的序列(Sequence)功能,不像某些其他数据库管理系统(如Oracle)提供了序列生成器。然而,我们可以通过使用自增主键列(Auto Increment Primary Key)来实现类似的功能。
在MySQL中,可以在创建表时为某一列设置自增属性,使该列成为自增主键。每次插入新记录时,系统会自动为这一列生成一个唯一的递增值。
以下是创建带有自增主键列的示例表的SQL语句:
CREATE TABLE 表名 ( id INT AUTO_INCREMENT PRIMARY KEY, 列1 数据类型, 列2 数据类型, ... );
在上述示例中,"id"列被定义为自增主键列,并且设置为INT数据类型。每次插入新记录时,MySQL会自动为"id"列生成唯一的递增值。
我们可以使用INSERT INTO语句向包含自增主键列的表中插入新记录,例如:
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
在执行INSERT INTO语句时,不需要为自增主键列指定值,MySQL会自动为其生成递增的唯一值。
什么意思呢?举个例子,下图是一张users表,其中id列被定义为自增主键列,id最大为15。
如果我们在一个user表中插入username和password,而不插入id,也就是:
INSERT INTO USERS (username, password) VALUES ('qiu', '1'), ('user2', 'pass2'), ('user3', 'pass3');
执行语句后,qiu、user2、user3自动补到了id为15的用户后面:
一般情况下序列的开始值为1,但如果你需要指定一个开始值3,可以通过以下语句来实现:
CREATE TABLE 表名 ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), name VARCHAR(30) )auto_increment=3
如下图所示:
总结
以上为 【MySQL进阶之路丨第十三篇】,带领读者掌握 MySQL ALTER命令及序列使用,通过具体实操实现对MySQL数据库的深度理解。
MySQL系列将持续更新,欢迎订阅收藏。