加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

在MariaDB数据库中如何修改现有表的结构

发布时间:2023-08-15 14:10:39 所属栏目:系统 来源:
导读:在这篇文章中,我们来学习一下“在MariaDB数据库中如何更改现有表的结构”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。A

在这篇文章中,我们来学习一下“在MariaDB数据库中如何更改现有表的结构”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。

ALTER TABLE命令是用于更改现有表的结构。 例如,可以添加或删除列,创建或销毁索引,更改现有列的类型或重命名列或表本身。也可以更改表的注释和表的存储引擎。

如果另一个连接正在使用该表,则元数据锁将处于活动状态,并且此语句将等待,直到释放该锁。对于非事务性表也是如此。

在具有重复值的列(或一组列)上添加一个UNIQUE索引时,将会产生一个错误,并且该语句将被停止。要抑制错误并强制创建UNIQUE索引,丢弃重复项,可以指定IGNORE选项。 如果一列(或一组列)应该是唯一的,但是它包含重复的值,这有时可能是有用的; 然而,这种技术不能控制哪些行被保存,哪些被删除。

1. 添加一列

要在原有的表上添加一列,可参考以下语法 -

ALTER TABLE xxxx ADD COLUMN [IF NOT EXISTS] (col_name column_definition,...)

示例

CREATE TABLE t(id INT PRIMARY KEY, u INT UNSIGNED NOT NULL UNIQUE)

ENGINE=InnoDB;

INSERT INTO t(id,u) VALUES(1,1),(2,2),(3,3);

ALTER TABLE t ADD COLUMN

(d DATETIME DEFAULT current_timestamp(),

p POINT NOT NULL DEFAULT ST_GeomFromText('POINT(0 0)'),

t TEXT CHARSET utf8 DEFAULT 'The quick brown fox jumps over the lazy dog');

UPDATE t SET t=NULL WHERE id=3;

SELECT id,u,d,ST_AsText(p),t FROM t;

SELECT variable_value FROM information_schema.global_status

WHERE variable_name = 'innodb_instant_alter_column';

2. 删除一列

语法

ALTER TABLE xxxx DROP COLUMN [IF EXISTS] col_name [CASCADE|RESTRICT]

删除属于多列UNIQUE约束的列是不允许的。例如:

CREATE TABLE a (

a int,

b int,

primary key (a,b)

);

ALTER TABLE x DROP COLUMN a;

[42000][1072] Key column 'A' doesn't exist in table

原因是,删除列a将导致新的约束,即列b中的所有值都是唯一的。 为了删除该列,将需要明确的DROP PRIMARY KEY和ADD PRIMARY KEY。从MariaDB 10.2.7版本起,该列被删除,并应用了额外的约束,导致以下结构:

ALTER TABLE x DROP COLUMN a;

Query OK, 0 rows affected (0.46 sec)

DESC x;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| b | int(11) | NO | PRI | NULL | |

+-------+---------+------+-----+---------+-------+

3. MODIFY COLUMN修改列

允许修改列的类型。该列与原始列位于同一位置,列中的所有索引都将保留。 请注意,修改列时,应指定新列的所有属性。

CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY((a));

ALTER TABLE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;

除了改变列的名字。该列与原始列位于同一位置,列中的所有索引都将保留。

CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(a));

ALTER TABLE t1 CHANGE a b BIGINT UNSIGNED AUTO_INCREMENT;

4. 添加约束 - ADD CONSTRAINT

修改在表的特定列或列上添加约束。

语法

ALTER TABLE table_name

ADD CONSTRAINT [constraint_name] CHECK(expression);

在插入或更新行之前,所有约束都将按照它们定义的顺序进行评估。如果任何约束失败,那么该行将不会被更新。

示例

CREATE TABLE account_ledger (

id INT PRIMARY KEY AUTO_INCREMENT,

transaction_name VARCHAR(100),

credit_account VARCHAR(100),

credit_amount INT,

debit_account VARCHAR(100),

debit_amount INT);

ALTER TABLE account_ledger

ADD CONSTRAINT is_balanced

CHECK((debit_amount + credit_amount) = 0);

删除DROP CONSTRAINT

修改表结构,删除给定的约束。

ALTER TABLE table_name

DROP CONSTRAINT constraint_name;

向表中添加约束时,无论是通过CREATE TABLE还是ALTER TABLE ... ADD CONSTRAINT语句,都可以自己设置constraint_name,或者允许MariaDB自动为您生成一个约束。例如,

CREATE TABLE t (

a INT,

b INT,

c INT,

CONSTRAINT CHECK(a > b),

CONSTRAINT check_equals CHECK(a = c));

SELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE

FROM information_schema.TABLE_CONSTRAINTS

WHERE TABLE_NAME = 't';

+-----------------+----------------+-----------------+

| CONSTRAINT_NAME | TABLE_NAME | CONSTRAINT_TYPE |

+-----------------+----------------+-----------------+

| check_equals | t | CHECK |

| CONSTRAINT_1 | t | CHECK |

+-----------------+----------------+-----------------+

要从表中删除约束,请使用ALTER TABLE ... DROP CONSTRAINT语句。 例如,

ALTER TABLE t DROP CONSTRAINT is_unique;

4. 常用语句

添加一个新的列:

ALTER TABLE t1 ADD x INT;

删除一个列:

ALTER TABLE t1 DROP x;

修改列的类型:

ALTER TABLE t1 MODIFY x bigint unsigned;

更改列的名称和类型:

ALTER TABLE t1 CHANGE a b bigint unsigned auto_increment;

更改列的名称和类型:

ALTER TABLE t1 CHANGE a b bigint unsigned auto_increment;

在单个ALTER TABLE语句中组合多个子句,用逗号分隔:

ALTER TABLE t1 DROP x, ADD x2 INT, CHANGE y y2 INT;

更改存储引擎:

ALTER TABLE t1 ENGINE = InnoDB;

重建表(前面的例子也将重建表,如果它已经是InnoDB):

ALTER TABLE t1 FORCE;

关于“在MariaDB数据库中如何更改现有表的结构”就介绍到这了,如果大家觉得不错可以参考了解看看,如果想要了解更多,小编每天都会为大家更新不同的知识。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章