`
A牛哥哥
  • 浏览: 151536 次
社区版块
存档分类
最新评论

mysql 修改字段,字符集,alter table 优化

 
阅读更多
一次添加一个字段:
ALTER  TABLE  表名称  ADD COLUMN  字段名  VARCHAR(20)  NULL COMMENT '新添加的字段'  AFTER `前一个字段名`;

Comment 表示注释;
After   `前一个字段名` 可以省略,默认是将新字段添加在表的最后一列,如果想将字段放在某个字段的后面, 可以加after  `前一个字段名` 指定;

一次添加多个字段:
ALTER  TABLE  表名称  add(
字段1   TINYINT NULL   COMMENT 'xxxx ',
字段2   TINYINT NULL   COMMENT 'yyyy'
);




一次删除一个字段:
ALTER  TABLE  表名称  DROP COLUMN  字段名;



一次删除多个字段:
ALTER  TABLE  表名称  DROP COLUMN 字段1, DROP COLUMN  字段2;




修改字段名称:
ALTER  TABLE  表名称 CHANGE  旧字段名   新字段名  varchar(10)  NULL COMMENT  '注释文字';



修改字段的类型:
ALTER TABLE  表名称 MODIFY COLUMN 字段名  INT NULL COMMENT '注释文字';





修改单个字段的字符集:
ALTER  TABLE  表名称 MODIFY COLUMN 字段名  VARCHAR(80) CHARACTER SET utf8mb4 NOT NULL COMMENT  '注释文字';



修改所有字段的字符集(仅对字符类型的字段有效,不会修改int等这种非字符的字段):
 ALTER TABLE  表名称  CONVERT  TO  CHARACTER SET utf8mb4;



修改默认字符集:
ALTER TABLE  表名称   EFAULT CHARACTER SET gbk;


改的是下方ENGINE=InnoDB 后面的 DEFAULT CHARSET=gbk;
CREATE TABLE `zzz` (
  `names` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  `kecheng` varchar(80) CHARACTER SET utf8mb4 NOT NULL COMMENT '课程',
  `score` int(11) DEFAULT NULL COMMENT '分数'
) ENGINE=InnoDB DEFAULT CHARSET=gbk;





Alter table 优化:
Alter table 要慎重, mysql内部是按照新的表结构建一个新表, 然后把旧表中的数据插入到新表, 然后删除旧表,然后将新表重命名为旧表名.如果表中数据较多,alter过程将非常长.
如下3种情况可以进行优化(避免表重建):
(1)      更改字段的默认值
(2)      增加/删除字段的AUTO_INCREMENT属性
(3)      增加/删除/修改 ENUM的常量值。对于删除操作,如果有字段引用了这个常量值,则在删除后查询的结构为空字符串

针对上述3种情况, 有两种方式可以避免表重建:
假设现在的表名称叫 users , 要将字段gender 的默认值从0 改成1,两种方式分别如下:
方式一:
ALTER  TABLE s_user ALTER COLUMN gender SET DEFAULT 1;


而不是使用
ALTER  TABLE s_user MODIFY COLUMN gender TINYINT NULL DEFAULT 1;



第一条sql不会引起表重建, 而第二条sql会引起表重建.

方式二:
因为这3部分数据存储在表的.frm(myisam引擎结构文件有三种:.frm:表结构文件  .MYD:表数据文件  .MYI:表索引, innodb有两种: . frm:表结构文件, .ibd:数据和索引文件是同一个. MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而InnoDB是聚集索引,就是索引文件节点中就包含了完整的数据记录)文件中,可以用新的.frm文件替换旧表的.frm文件来达到修改的目的,已亲测可用.
Create  table  users_new  like users; -- 建新表


Alter table users_new  alter column gender SET DEFAULT 1; -- 改新表的gender默认值


然后进入到mysql的data目录, 将users.frm 重命名为 users.frm.bak, 将users_new.frm复制一份重命名为users.frm, 重启mysql才能生效.








分享到:
评论

相关推荐

    设置mysql字符集

    例如,可以使用`ALTER TABLE`语句更改表的字符集: ```sql ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4...

    mysql字符集设置

    - 检查并确保MySQL服务器、客户端、数据库、表和字段的字符集设置一致。 - 使用正确的编码读取和写入数据,如使用UTF-8编码的文件连接UTF-8的数据库。 - 数据导入导出时,指定相应的字符集,如`LOAD DATA INFILE ...

    Mysql字符集设置原理及常见问题解决

    在MySQL中,字符集主要分为全局字符集、数据库字符集、表字符集和字段字符集四级。全局字符集是服务器级别的设置,影响所有数据库;数据库字符集在创建数据库时指定,适用于该数据库的所有表;表字符集用于单个表,...

    Mysql字符集

    如果在运行一段时间后需要修改已存在的数据库或表的字符集,直接使用`ALTER DATABASE`或`ALTER TABLE`命令是不可行的,因为这些命令仅影响新插入的数据。正确的做法是先导出数据和表结构,修改字符集,再重新导入...

    MySql表字符集问题[参考].pdf

    在本案例中,问题的核心在于两个表之间的字段字符集不兼容,导致了"非法的混合排序规则"(Illegal mix of collations)错误。这个错误意味着在执行等于操作('=')时,涉及到了具有不同字符集的列。 首先,我们来...

    MySql表、字段、库的字符集修改及查看方法

    如果需要单独更改某个字段的字符集,可以使用`ALTER TABLE`与`CHANGE`或`MODIFY`子句: ```sql ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE collation_name]; ``` 其中...

    修改MySQL数据库中表和表中字段的编码方式的方法

    这个命令会更改`test`表中名为`name`的字段的字符集为`utf8`,同时保持其VARCHAR类型和非空约束不变。如果字段已有数据,记得先备份,因为修改字符集可能会影响数据的表示。 在执行这些操作之前,确保你理解表和...

    MySQL字符集的基本类型与统一字符集分析

    4. 更新现有数据库、表及字段的字符集,使用`ALTER DATABASE`, `ALTER TABLE`, `ALTER COLUMN`语句。 5. 检查并更新应用程序的字符集设置,确保与数据库一致。 理解MySQL的字符集设置对于避免数据乱码、正确存储和...

    MySQL中因字段字符集不同导致索引不能命中的解决方法

    经过分析,发现查询涉及到的子查询返回的GuidNo值与Orders表中的GuidNo字段字符集不匹配,导致索引无法被有效利用。为了解决这个问题,可以采取以下策略: 1. **统一字符集**:确保所有涉及到的表和字段都使用相同...

    mysql出现中文乱码解决

    - 修改字段字符集:`ALTER TABLE your_table MODIFY column_name column_type CHARACTER SET utf8 COLLATE utf8_general_ci;` 4. 调整应用程序或连接工具的字符集设置:确保你的应用程序或连接工具(如Java程序、...

    如何修改MYSQL的默认编码

    要修改MySQL的默认编码,通常是为了适应包含中文或其他多语言字符集的需求,例如切换到UTF-8编码,因为UTF-8支持全球大多数语言。 在Windows操作系统中,以下是一种简单且全面的修改MySQL默认编码至UTF-8的方法: ...

    mysql数据库常用命令汇总

    6. 修改数据库字符集:使用`alter database`命令修改数据库的字符集,例如:`alter database db_test charset utf8;` 7. 修改数据库校对集:使用`alter database`命令修改数据库的校对集,例如:`alter database db...

    MySQL数据库常用语句

    在MySQL中,修改数据库的字符集是一项常见的操作,特别是在需要支持多种语言环境时。例如: ```sql ALTER DATABASE jsp CHARACTER SET utf8; ``` 这条命令的作用是将名为“jsp”的数据库的字符集从当前设置更改为UTF...

    mysqldba手册

    - 更改默认字符集:在创建数据库或表时指定,如`CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`或`ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_...

    关于mysql查询字符集不匹配问题的解决方法

    如果仅需要修改特定表的字符集,可以使用`ALTER TABLE`命令: ```sql ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ``` `your_table_name`同样需要替换为你的表格名称...

    mysql汉字乱码问题

    4. **设置字段字符集**:在创建表时,可以为每个字段指定字符集,如`CREATE TABLE mytable (name VARCHAR(255) CHARACTER SET utf8);`。后期也可通过`ALTER COLUMN`命令修改。 5. **客户端配置**:确保连接MySQL的...

    mysql修改数据库编码(数据库字符集)和表的字符编码的方法

    MySQL数据库是全球最受欢迎的开源关系型数据库管理系统之一,它支持多种字符集以适应不同语言和地区的文本处理需求。字符集,或称字符编码,决定了数据库和表如何存储和展示字符数据。本文将详细介绍如何修改MySQL...

    MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法总结

    若要修改已有字段的名称或类型,可以使用`ALTER TABLE`语句的`CHANGE`子句。例如,将`bulletin`表中的`uid`字段改为`username`,类型改为`VARCHAR(50)`: ```sql ALTER TABLE bulletin CHANGE uid username ...

    mysql 中文乱码 方案

    6. **检查表结构中的字段字符集** - 使用`DESCRIBE`或`SHOW CREATE TABLE`命令检查表结构中的字符集是否正确设置。 ```sql SHOW CREATE TABLE users; ``` 7. **插入数据时指定字符集** - 在插入包含中文的...

Global site tag (gtag.js) - Google Analytics