在MariaDB数据库中如何更改现有表的结构
Admin 2022-06-24 群英技术资讯 1040 次浏览
在这篇文章中,我们来学习一下“在MariaDB数据库中如何更改现有表的结构”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。ALTER TABLE命令是用于更改现有表的结构。 例如,可以添加或删除列,创建或销毁索引,更改现有列的类型或重命名列或表本身。也可以更改表的注释和表的存储引擎。
如果另一个连接正在使用该表,则元数据锁将处于活动状态,并且此语句将等待,直到释放该锁。对于非事务性表也是如此。
在具有重复值的列(或一组列)上添加一个UNIQUE索引时,将会产生一个错误,并且该语句将被停止。要抑制错误并强制创建UNIQUE索引,丢弃重复项,可以指定IGNORE选项。 如果一列(或一组列)应该是唯一的,但是它包含重复的值,这有时可能是有用的; 然而,这种技术不能控制哪些行被保存,哪些被删除。
要在原有的表上添加一列,可参考以下语法 -
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';
语法
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 | |
+-------+---------+------+-----+---------+-------+
允许修改列的类型。该列与原始列位于同一位置,列中的所有索引都将保留。 请注意,修改列时,应指定新列的所有属性。
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;
修改在表的特定列或列上添加约束。
语法
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;
添加一个新的列:
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;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍MariaDB数据库的外键的相关内容,包括了对外建,外键约束的介绍以及如何创建外键约束,文本具体的示例介绍,对大家学习有一定的参考价值,感兴趣的朋友就继续往下看吧。
这篇文章小编给大家分享的是MariaDB中alter命令以及简单的使用,对大家学习alter命令会有帮助,文中示例介绍的很详细,感兴趣的朋友可以了解看看,下面让我们一起来学习一下吧!
在MariaDB数据库中,使用SELECT语句和LIMIT子句从表中检索一个或多个记录。
MariaDB 索引是什么?怎样创建?索引是用于加速记录检索的工具。 索引为索引列中的每个值生成一个条目。创建索引, 您可以通过CREATE TABLE ... INDEX语句或CREATE INDEX语句创建索引。 支持可读性,维护和最佳实践的最佳选项是CREATE INDEX。
这篇文章给大家分享的是MariaDB建立连接的方法。与MariaDB建立连接的方法是在命令提示符下执行mysql小编觉得挺实用的,文中的介绍很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008