一、约束概述
1、约束保证数据的【完整性和一致性】
2、约束分为表级约束(针对多列)和列级约束(针对一列)
3、按功能分类包括:
· NOT NULL非空约束
· PRIMARY KEY主键约束
· UNIQUE KEY唯一约束
· DEFAULT默认约束
· FOREIGN KEY外键约束
二、FOREIGN KEY

0    保证数据一致性,和完整性。
1、参照表为子表,被参照表为父表
2、【语法】子表中单起一列:FOREIGN KEY 子表(外键列) REFERENCES 父表(参照列)
2、实现一对一或一对多关系
3、要求如图:
· 表:相同引擎InnoDB,不能临时表
· 列:【相同数据类型】,数字等长\同符号,字符长度可不同
· 列:必须创建索引,系统自动为外键列创建


 

 

 

子表中的外键会参照父表中的主键,新系统会自动创建索引。

外键约束参数操作
一、删除或更新父表数据,控制参数
1、语法:FOREIGN KEY 子表(外键列)REFERENCES 父表(参考列)【ON DELETE】 参数
2、参数
当父表删除和更新操作时:
· CASCADE:子表也删除和更新
· SET NULL:子表设置为NULL,但子表外键列不能设置为NOT NULL(矛盾)
· RESTRICT:拒绝对父表的删除或者更新操作。
· NO ACTION:标准SQL关键字,MYSQL中与RESTRICT相同

更新父表时候子表要进行的操作

表级约束与列级约束
1、对一个列创建的约束为列级约束
2、对多个列创建的约束为表级约束
3、列级约束既可以在列定义时声明,也可以在列定义后声明
4、表级约束只能在列定义后声明
5、并不是所有的约束都有表级约束,如NOT NULL、DEFAULT…

(三)约束以及修改数据表——修改列
1、添加单列:ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]。若不添加具体位置,则默认添加到最后。
2、添加多列:ALTER TABLE tbl_name ADD [COLUMN] (col_name1 column_definition1,...)只能添加到末尾
3、删除列:ALTER TABLE tbl_name DROP [COLUMN] col_name1,...
4、多个操作:ALTER TABLE tbl_name DROP col_name1,ADD col_name2...


 

 

 约束以及修改数据表——修改约束
1、添加主键约束:
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] PRIMARY KEY[index_type] (col_name);
2、添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE KEY[index_type] (col_name1,col_name2...);
3、添加爱外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] FOREIGN KEY [index_type](外键列) REFERENCES 父类(参考列);
4、添加/删除默认DEFAULT约束
ALTER TABLE tbl_name ALTER col_name SET DEFAULT literal / DROP DEFAULT;


 constraint 是给起一个名字


 

 添加和删除默认约束

约束以及修改数据表——删除约束
1、删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY;
2、删除唯一约束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name(引索通过SHOW INDEXES tbl_name查看);
3、删除外键约束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol(约束名字:通过SHOW CREATE TABLE tbl_name查看);

删除主键约束

 

 删除唯一约束,唯一约束有名字,可以从表结构中查看

 删除外键约束

约束以及修改数据表——修改列定义和名称
***不要随意更改列名和表名:引用问题 
1、修改列定义 (位置)
ALTER TABLE tbl_name 【MODIFY】 [COLUMN] col_name colum_definition [FIRST | AFTER col_name]
2、修改列名称(属性位置)CHANGE > MODIFY
ALTER TABLE tbl_name 【CHANGE】 [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name]
3、数据表更名
· 方法1:ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
· 方法2:RENAME TABLE tbl_name TO new_tbl_name[,tbl_name2 TO new_tbl_name2...]


 

 

 

约束,修改表结构,添加删除约束相关推荐

  1. 修改表结构添加外键约束,默认外键名

    2019独角兽企业重金招聘Python工程师标准>>> 修改表结构添加外键约束,默认外键名 alter table SUPPLIER_INFO add foreign key (CR ...

  2. mysql修改字段结构_MySQL修改表结构及其添加删除修改字段功能

    MySQL修改表结构添加删除修改字段 创建数据库CREATE DATABASE database_name 创建表CREATE TABLE `user` ( `id` int(11) unsigned ...

  3. 用SQL语句修改表结构和添加约束

    目录 一.修改表结构 1.删除列 2.添加列 3.修改字段的数据类型 二.添加约束 1.主键约束 2.唯一性约束 3.check约束 4.非空约束(修改列的数据类型) 5.外键约束 6.删除约束 7. ...

  4. SQL Server修改表结构,添加约束

    文章目录 修改表结构 1.修改字段数据类型 2.添加字段 3.删除字段 4.修改字段特征(约束) 1>添加标识列约束(IDENTITY) 2>添加主键约束(PRIMARY KEY) 3&g ...

  5. 数据库——MySQL(一)(数据库常用命令、数据类型、创建表与修改表结构、约束、约束修改添加)

    MySQL数据库的概述: MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库信息增.删.查.改管理 - ...

  6. oracle 建表字段设置,Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句总结...

    关于Oracle创建表.删除表.修改表(添加字段.修改字段.删除字段)语句的简短总结. Oracle创建表: create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字 ...

  7. mysql 主从 索引_Mysql繁忙主从库在线修改表结构与添加索引问题

    本帖最后由 jan_1985 于 2014-1-15 13:28 编辑 Mysql繁忙主从库在线修改表结构与添加索引问题 一直以来,生产情况下都有修改索引和修改字段的需求,但是对锁表引起的访问不便是会 ...

  8. SQL外键约束多表查询级联删除子查询

    文章目录 一.外键 1.创建外键约束 2.删除外键约束 3.外键约束提示 二.级联删除 三.多表查询 1.笛卡尔积 2.内连接查询 1.隐式内连接 2.显示内连接 3.外连接查询 1.左外连接 2.右 ...

  9. Oracle删除表、修改表(添加字段、修改字段、删除字段)语句总结

    Oracle删除表.修改表(添加字段.修改字段.删除字段)语句总结 1.删除表: delete from 表名; delete删除数据是一条一条的删除数据,后面可以添加where条件,不删除表结构.注 ...

  10. mysql 表中添加唯一约束

    mysql表中添加唯一约束 在做权限系统中,有一张表叫用户角色关系表(user_role_relation),这张表中有user_id 和role_id(建表语句如下). CREATE TABLE u ...

最新文章

  1. JSON反序列的问题原因查找
  2. Linux Kernel中spinlock的设计与实现
  3. Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度
  4. 【含义解析】%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %m%n
  5. 【bzoj3033】太鼓达人 DFS欧拉图
  6. 【设计模式 03】装饰模式——俄罗斯套娃?
  7. 【正则表达式】JavaScript的exec()和search()方法
  8. 案例1_公司简介(修改)
  9. Scikit-Learn与回归树
  10. 错误因为数据库正在使用,所以无法获得对数据库的独占访问权的解决方案(转)...
  11. c语言流程图生成器免费软件,c语言流程图生成器
  12. Graph Anomaly Detection with Deep Learning——基于属性图的节点异常检测
  13. Linux gcc编译程序时,-I(大写 i )、-L (大写 L)、-I(小写 L )的作用与区别
  14. synchronized关键词保证线程安全
  15. windows下手动修改/修复启动项
  16. infopath2007-2013直接连接数据源(Access或Sqlserver)设计表单模板
  17. 机器学习4种调参自动优化方法,第二款是我的最爱!
  18. linux tao环境 安装_菜鸟Linux 编译TAO2.0a的问题,求高手指导
  19. [转载] js 下获取子元素的方法 -- 李富生
  20. 使用layui做二级菜单,选父级必选子级

热门文章

  1. 绕过tp路由器管理密码_TP-Link路由器登录密码怎么重置【详细介绍】
  2. 信捷PLC跟西门子700IE通信
  3. 设置div背景颜色透明度,内部元素不透明
  4. 测试自动化成本及投资回报率
  5. app软件怎么申请软件著作权?
  6. 利用selenium获取接口数据
  7. PS卸载不彻底,ADMUI3删除不掉怎么办
  8. 【studio】整理了下studio中make Project、clean Project、Rebuild Project的区别
  9. hudi系列-旧文件清理(clean)
  10. 3.C++函数调用过程