mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)
ALTER TABLE 语句
ALTER TABLE更改表的结构。例如,可以添加或删除列、创建或销毁索引、更改现有列的类型、重命名列或表本身。还可以更改表特性,例如用于表或表注释的存储引擎。
●要使用ALTER TABLE,需要表的ALTER、CREATE和INSERT权限。重命名表需要对旧表执行ALTER和DROP操作,对新表执行ALTER、CREATE和INSERT操作。
●在表名之后,指定要进行的更改。如果没有给定值,ALTER TABLE将不执行任何操作。
●许多允许更改的语法与CREATE TABLE语句的子句类似。column_definition 子句对ADD和CHANGE使用与CREATE TABLE相同的语法。
●COLUMN是可选的,可以省略,但RENAME COLUMN除外(用于区分列重命名操作和表重命名操作)。
●一个ALTER TABLE语句中允许有多个ADD、ALTER、DROP和CHANGE子句,用逗号分隔。这是一个MySQL对标准SQL的扩展,标准SQL只允许每个ALTER TABLE语句有其中一个子句。例如,要在一个语句中删除多个列,请执行以下操作:
● 如果存储引擎不支持要进行的ALTER TABLE操作,则会出现警告。可以用SHOW WARNINGS语句来显示这些警告。
● MySQL 8.0.17及更高版本的InnoDB支持使用key_part规范在JSON列上添加多值索引,可以采用(CAST json_path AS type ARRAY)这个形式。
● 使用mysql_info() C API函数,可以查出ALTER TABLE复制了多少行。
本节还对ALTER TABLE语句的以下主题中进行了描述:
Table 选项
table_options 指定了类似于可以在CREATE TABLE语句中使用的表选项,例如ENGINE、AUTO_INCREMENT、AVG_ROW_LENGTH、MAX_ROWS、ROW_FORMAT或TABLESPACE。
但是,ALTER TABLE在作为表选项给出时会忽略DATA DIRECTORY 和 INDEX DIRECTORY。ALTER TABLE只允许它们作为分区选项,并且要求具有FILE权限。
在ALTER TABLE中使用表选项可以方便地更改单个表的特性。例如:
● 如果t1当前不是InnoDB表,则此语句将其存储引擎更改为InnoDB:
■ 指定ENGINE子句时,ALTER TABLE将重建该表。即使表已经具有指定的存储引擎,也是如此。
■ 对现有的INNODB表运行ALTER TABLE tbl_name ENGINE=INNODB 语句会产生一个 "null" ALTER TABLE操作,该操作可用于对INNODB表进行碎片整理。对InnoDB表执行ALTER TABLE tbl_name FORCE,会产生同样的作用。
■ ALTER TABLE tbl_name ENGINE=INNODB和ALTER TABLE tbl_name FORCE使用联机DDL。
■ 更改表的存储引擎的结果受所需存储引擎是否可用以及NO_ENGINE_SUBSTITUTION SQL模式的设置的影响。
■ 为了防止意外的数据丢失,ALTER TABLE不能将表的存储引擎更改为MERGE或BLACKHOLE。
● 将InnoDB表更改为使用压缩行存储格式:
● ENCRYPTION子句为InnoDB表启用或禁用页级数据加密。必须安装和配置keyring插件才能启用加密。
如果启用table_encryption_privilege_check变量,则需要TABLE_ENCRYPTION_ADMIN权限才能使用ENCRYPTION子句设置与默认模式不同的加密设置。
在MySQL8.0.16之前,只有在改变驻留在独立表空间(file-per-table tablespaces)中的表时,才支持ENCRYPTION子句。从MySQL8.0.16开始,对于驻留在常规表空间中的表也支持ENCRYPTION子句。
对于驻留在常规表空间中的表,表和表空间加密必须匹配。
在没有显式指定ENCRYPTION子句的情况下,不允许通过将表移动到其他表空间或更改存储引擎来更改表加密。
从MySQL 8.0.16开始,如果表使用不支持加密的存储引擎,则不允许使用'N'或''以外的值指定ENCRYPTION子句。此前,该子句是接受的。也不允许使用不支持加密的存储引擎在启用加密的模式中创建没有ENCRYPTION子句的表。
● 重置当前自动增量值:
不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大AUTO_INCREMENT列值加1。
● 更改默认表字符集:
● 添加(或更改)表注释:
● 使用带有TABLESPACE选项的ALTER TABLE语句在现有的常规表空间、独立表空间和系统表空间之间移动InnoDB表。
■ ALTER TABLE ... TABLESPACE操作总是会导致完整的表重建,即使TABLESPACE属性没有改变以前的值。
■ ALTER TABLE ... TABLESPACE语法不支持将表从临时表空间移动到持久表空间。
■ CREATE TABLE ... TABLESPACE支持DATA DIRECTORY子句,ALTER TABLE ... TABLESPACE不支持,如果指定,则忽略。
● MySQL NDB Cluster 8.0支持设置NDB_TABLE选项,用于控制表的分区平衡、从任何副本读取、完全主从复制,或这些控制的任意组合,这个设置是ALTER TABLE语句的表注释的一部分,其方式与CREATE TABLE语句中的方式相同,如下例所示:
请记住,ALTER TABLE ... COMMENT ...放弃表的任何现有注释。
● ENGINE_ATTRIBUTE和SECONDARY_ENGINE_ATTRIBUTE选项(从MySQL 8.0.21开始提供)用于指定主存储引擎和辅助存储引擎的表、列和索引属性。这些选项保留供将来使用。不能更改索引属性。必须删除一个索引并将其添加回所需的更改,这可以在单个ALTER TABLE语句中执行。
若要验证表选项是否按预期更改,请使用SHOW CREATE TABLE或查询INFORMATION_SCHEMA.TABLES表。
mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)相关推荐
- mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...
添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...
- MySQL中定义fk语句_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (4)
外键和其他约束 InnoDB和NDB存储引擎支持 FOREIGN KEY 和 REFERENCES 子句,这些存储引擎实现了ADD [CONSTRAINT [symbol]] FOREIGN KEY ...
- MySQL修改数据表(ALTER TABLE语句)
为实现数据库中表规范化设计的目的,有时候需要对之前已经创建的表进行结构修改或者调整. 在 MySQL 中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列.创建或取消索引.更改 ...
- 《MySQL技术》学习笔记——使用SQL管理数据
MySQL技术内幕--使用SQL管理数据 使用SQL管理数据 服务器的SQL模式 MySQL的标识符语法和命名规则 SQL语句的大小写规则 字符集支持 指定字符集 确定可用字符集和当前设置 Unico ...
- SQL ALTER TABLE 语句
SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中添加列,请使用下面 ...
- SQL ALTER TABLE 语句在项目中的使用
1.在实际的项目开发过程中,之前已经创建好的实体类可能需要增加/删除字段,亦或是更改已有字段的属性,比如主键的增长策略从自增型改为UUID型,那么就会涉及到 SQL 中 alter table 语句的 ...
- mysql的altertable_【编程词典】mysql ALTER TABLE语句
alter 英 [ˈɔ:ltə(r)] 美 [ˈɔltɚ] vt.改变;更改;改建(房屋);(人)变老 vi.改变;修改 第三人称单数: alters 现在分词: altering 过去式: al ...
- ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Booking_Hotel“冲突。
错误:SQL Server 创建数据库表的外键时出错 ALTER TABLE 语句与 FOREIGN KEY 约束"FK_Booking_Hotel"冲突.该冲突发生于数据库&qu ...
- 【数据库】ALTER TABLE 语句与 CHECK 约束““冲突。该冲突发生于数据库““,表““, column ‘‘
摘要:微信搜索[三桥君] 本篇讲述的是在已经创建好表且有数据的情况下,增加CHECK约束的报错问题 一.问题 当我给数据库中已经创建好的Student表,增加约束条件. --增加student表的约束 ...
最新文章
- {} 与 function() { } , 选用空对象{}来存放keyValue
- gin自定义HTTP配置
- java comp env 区别_加和不加java:comp/env/前缀有什么区别?
- 一些语法在游戏开发中的应用
- PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验?
- linux更改python版本链接
- python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...
- Mybatis判断int类型是否为空
- [python教程入门学习]使用Python六步制作小鸟管道游戏(附源码)
- linux服务器分区方案
- Android API 实验记录 (二)
- mp4 文件中的h264 avc1格式介绍
- t分布(Student t distribution)——正态分布的小样本抽样分布
- axure 折线图部件_在Axure中怎么做柱状图、折线图啊?
- 怎样快速查询单号物流信息,筛选出未签收的单号
- 随笔-你买罐头干什么
- 女友闹别扭不用担心,这个撩妹黑科技轻松哄好
- STM32F429 13. SPI 通讯(code)
- Rails 中的 RJS 模板
- mysql学习计划_MySQL学习计划
热门文章
- OpenCV中图像垂直拼接函数vconcat的使用
- MYSQL 加密函数的用法
- java高级-多线程编程
- SSM前后端分离及跨域
- GLSL三种修饰符区别与用途(uniform,attribute和varying)
- 专门用来显示大量数据的视图:AdapterView(1)
- [公告] TechNet / MSDN 经理人博客上周移机整合暂断
- 一个asp.net2005的页面文件调用CSS样式的BUG
- app_offline.htm 是确有其事
- C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程