[MySQL] ALTER语句总结

本文是对MySQL中ALTER语句的自学总结,包括增删列、修改列类型、重命名列/表以及各种约束的增删操作,如主键、唯一性、外键、非空和默认值约束。在MySQL-8.0.16以前,CHECK约束不被支持。
摘要由CSDN通过智能技术生成

​最近自学SQL,买了《SQL学习指南》作为参考书。书中主要篇幅都在SQL数据语句上,而对方案语句(CREATE\DROP\ALTER)的描述相当简略,ALTER更是一笔带过。于是搜索资料做了个总结,若有遗漏,恳请补充。

增删列

​ 以一个名为person的表为例(下同),

ALTER TABLE person ADD name VARCHAR(20);
ALTER TABLE person DROP COLUMN name; -- or 'DROP name'

修改列类型

ALTER TABLE person MODIFY name VARCHAR(30);
ALTER TABLE person CHANGE name new_name VARCHAR(30);

重命名列/表

#重命名列
ALTER TABLE person CHANGE name new_name VARCHAR(30);
#重命名表
ALTER TABLE person RENAME TO new_person;-- or 'RENAME new_person'

增/删约束

主键约束

  • 添加

    #单独添加
    ALTER TABLE person ADD PRIMARY KEY(name);
    ALTER TABLE person ADD CONSTRAINT pk_person PRIMARY KEY(name);
    #在修改列类型时添加
    ALTER TABLE person MODIFY name varchar(30) PRIMARY KEY;
    ALTER TABLE person CHANGE name name varchar(30) PRIMARY KEY;
    
  • 删除

    ALTER TABLE person DROP PRIMARY KEY;
    

唯一性约束

  • 添加

    #单独添加
    ALTER TABLE person ADD UNIQUE(name);
    ALTER TABLE person ADD UNIQUE KEY(name);
    ALTER TABLE person ADD CONSTRAINT pk_person UNIQUE(name);
    ALTER TABLE person ADD CONSTRAINT pk_person UNIQUE KEY(name);
    #修改列类型时添加
    ALTER TABLE person MODIFY name varchar(30) UNIQUE;
    ALTER TABLE person CHANGE name name varchar(30) UNIQUE;
    
  • 删除

    ALTER TABLE person DROP INDEX name;
    

外键约束

假设有另一张表favorite_food,以person中的name为外键。

  • 添加

    ALTER TABLE favorite_food ADD FOREIGN KEY(name) REFERENCES person(name);
    ALTER TABLE favorite_food ADD CONSTRAINT fk_person_food FOREIGN KEY(name)
    	REFERENCES person(name);
    
  • 删除

    ALTER TABLE favorite_food DROP FOREIGN KEY fk_person_food;
    #可用 SHOW CREATE TABLE favorite_food 查询外键约束名
    

非空约束

  • 添加

    ALTER TABLE person MODIFY name VARCHAR(30) NOT NULL;
    ALTER TABLE person CHANGE name name VARCHAR(30) NOT NULL;
    
  • 删除

    = 添加默认值约束

默认值约束

在增加列或修改列类型时若未指定默认值,则会默认为NULL。可据此消除非空约束。若要指定默认值:

ALTER TABLE person MODIFY name VARCHAR(30) DEFAULT 'Denny';
ALTER TABLE person CHANGE name name VARCHAR(30) DEFAULT 'Denny';

其他像自增约束零填充约束的增加和删除格式与非空约束相同。

检查约束

注:在MySQL-8.0.16前CHECK约束会被忽略。

  • 添加

    ALTER TABLE person ADD CONSTRAINT ck_person CHECK(id <5);
    
  • 删除

    ALTER TABLE person DROP CONSTRAINT ck_person;
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值