美文网首页
mysql之修改表结构【Alter】

mysql之修改表结构【Alter】

作者: 丿灬尘埃 | 来源:发表于2020-05-02 17:13 被阅读0次

    今天呢,咱们来谈谈DDL中的Alter操作,只谈操作,底层实现和原理不谈哦。想知道原理的:咳咳,对不起这个暂时真没有==
    步入正题,MySql版本:5.6.42【查看方式:select version();】
    先来开下表结构

    CREATE TABLE `users` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
      `age` tinyint(3) NOT NULL DEFAULT '0' COMMENT '年龄',
      `ctime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      `mtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    1. 修改默认值
      一般网上都会给出2种写法,基本就是有默认值drop,无默认值直接可以alter。
      那么有1个问题,有默认值是否可以直接操作。毕竟不是所有的公司都允许你drop
      有默认值:
      先删除默认值
    alter table tableName alter column columnName drop default;
    alter table users alter column age drop default;
    

    结果:

      `age` tinyint(3) NOT NULL COMMENT '年龄',
    

    ok,创建默认值

    alter table tableName alter columns columnName set default defaultValue;
    alter table users alter column age set default 0;
    

    结果:

      `age` tinyint(3) NOT NULL DEFAULT '0' COMMENT '年龄',
    

    效果很好!【因为版本局限,5.7 版本使用方法1会把默认值和commot全部干掉,so,需要小心】
    2.无默认值【一般字段都会有默认值的,建议创建表结构时,加上not null && default,not null十分重要,会影响索引和count()】
    alter table tableName alter column columnName set default defaultValue
    看下效果:【alter table users alter column age set default 12;】

     `age` tinyint(3) NOT NULL DEFAULT '12' COMMENT '年龄'
    

    其实,有无默认值都可以这样执行。modify也是可以满足的上述情况的,而且功能更强大
    3.modify修改默认值
    alter table users modify age TINYINT(3) not null DEFAULT 18 COMMENT '年龄';
    结果:

      `age` tinyint(3) NOT NULL DEFAULT '18'  COMMENT '年龄'
    

    其实modify可以更改很多东西,比如字段类型,默认值,字段长度,解释等都是可以的,不过切记一点,
    一定,一定要把所有的内容写全:
    alter table users modify columnName columnType(length) not null default defaultValue comment "balabala"
    假如你不慎丢失了一个信息【比如not null】,且并不想那么操作,那么,但是在show create table tableName,那个字段会允许为空。so,切记把所有的内容都写上
    说到这里,在给一个不常用的东西:change也可以解决一部分情况,写下语法,例子就不写了
    alter table 表名 change old字段名 new字段名 类型 not null default xx comment 'xxxx'

    最后赠送一个不常用的操作,修改表名:
    Alter table oldTableName rename to newTableName

    附linux mysql5.6升级5.7:【记得做好数据备份哦,尽管我没备份数据没丢,不过习惯要养成】

    yum install php72w-mysql.x86_64
    【这个不要也行,需要配置文件路径:/etc/yum.repos.d
    修改配置文件:mysql-community.repo和mysql-community-source.repo
    修改内容:将所要更新的版本的enabled=1,其他版本的enabled=0即可】
     yum -y install mysql-server
    service mysqld restart
    

    相关文章

      网友评论

          本文标题:mysql之修改表结构【Alter】

          本文链接:https://www.haomeiwen.com/subject/dcffwhtx.html