MySQL入门(三)

字段的修改、添加、与删除

修改表字段使用alter table语句,谨记!

  1. create table tf1(
  2. id int primary key auto_increment,
  3. x int,
  4. y int
  5. );
  6. # 修改
  7. alter table tf1 modify x char(4) default '';
  8. alter table tf1 change y m char(4) default '';
  9. # 增加
  10. mysql>: alter table 表名 add 字段名 类型[(长度) 约束]; # 末尾
  11. eg>: alter table tf1 add z int unsigned;
  12. mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] first; # 首位
  13. eg>: alter table tf1 add a int unsigned first;
  14. mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] after 旧字段名; # 某字段后
  15. eg>: alter table tf1 add xx int unsigned after x;
  16. mysql>: alter table 表名 drop 字段名; # 删除字段
  17. eg>: alter table tf1 drop a;

多表关系(外键)

外键基础知识

  1. """
  2. 多表关系主要如下:
  3. 一对一:外键在任何一方都可以,此时外键要设置 唯一键
  4. 一对多:外键必须放在多的一方,此时外键值不唯一
  5. 多对多:一定要创建第三张表(关系表),每一个外键值不唯一,看可以多个外键建立联合唯一
  6. """
  7. # 1、外键的 字段名 可以自定义(名字随意),通常命名规范(关联表_关联字段)
  8. # 2、外键要通过 foreign key 语法建立表与表之间的关联
  9. # 3、[constraint 外键名 ]foreign key(所在表的外键字段) references 关联表(关联字段)
  10. # eg:foreign key(detail_id) references author_detail(id)
  11. # 4、级联关系
  12. # 级联更新 on update cascade
  13. # 级联删除 on delete cascade
  14. # 重点:外键字段本身可以唯一或不唯一,但是外键关联的字段一定唯一
  15. """
  16. 非级联的两张关系表,若数据已经被从表引用,则主表的那条数据无法更新或删除,只有先删了从表的数据才能操作主表的数据;
  17. 有级联的两张关系表,主表的数据更新或删除,会同时影响从表,会跟着一起更新或删除。
  18. """
  19. """
  20. 了解内容:(除级联外的其他reference_option)
  21. set null:从父表中删除或更新该行,并将子表中的一个或多个外键列设置为NULL。ON DELETE SET NULLON UPDATE SET NULL。
  22. restrict:拒绝父表的删除或更新操作。指定 RESTRICT(或NO ACTION)与省略ON DELETEor ON UPDATE子句相同。
  23. no action :标准SQL中的关键字。在MySQL中等效于RESTRICT。
  24. set default:
  25. """

设置外键

  1. # 建表语句
  2. CREATE TABLE parent (
  3. id INT NOT NULL,
  4. PRIMARY KEY (id)
  5. ) ENGINE=INNODB;
  6. CREATE TABLE child (
  7. id INT,
  8. parent_id INT,
  9. INDEX par_ind (parent_id),
  10. FOREIGN KEY (parent_id)
  11. REFERENCES parent(id)
  12. ON DELETE CASCADE
  13. );
  14. # 升级版 product_order表具有其他两个表的外键。一个引用product的两个字段,一个引用customer的一列:
  15. CREATE TABLE product (
  16. category INT NOT NULL, id INT NOT NULL,
  17. price DECIMAL,
  18. PRIMARY KEY(category, id)
  19. ) ENGINE=INNODB;
  20. CREATE TABLE customer (
  21. id INT NOT NULL,
  22. PRIMARY KEY (id)
  23. ) ENGINE=INNODB;
  24. CREATE TABLE product_order (
  25. no INT NOT NULL AUTO_INCREMENT,
  26. product_category INT NOT NULL,
  27. product_id INT NOT NULL,
  28. customer_id INT NOT NULL,
  29. PRIMARY KEY(no),
  30. INDEX (product_category, product_id),
  31. INDEX (customer_id),
  32. FOREIGN KEY (product_category, product_id)
  33. REFERENCES product(category, id)
  34. ON UPDATE CASCADE ON DELETE RESTRICT,
  35. FOREIGN KEY (customer_id)
  36. REFERENCES customer(id)
  37. ) ENGINE=INNODB;

添加外键

如果我们忘记设置外键也可以后续添加(如果没有那个字段就需要先手动添加):

  1. ALTER TABLE tbl_name
  2. ADD [CONSTRAINT [symbol]] FOREIGN KEY
  3. [index_name] (col_name, ...)
  4. REFERENCES tbl_name (col_name,...)
  5. [ON DELETE reference_option]
  6. [ON UPDATE reference_option]

删除外键

我们可以使用alter table语法来删除外键:

  1. ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

若是不知道外键名称可以使用show create table语法来查看:

MySQL入门(alter语法 与 外键)的更多相关文章

  1. 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

    1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...

  2. MySQL删除所有表的外键约束、禁用外键约束

    转: MySQL删除所有表的外键约束.禁用外键约束 2017年10月27日 00:11:34 李阿飞 阅读数:4512   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  3. (转载)MySQL删除所有表的外键约束、禁用外键约束

    其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...

  4. mysql学习之路_外键

    回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两 ...

  5. MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表

    摘要: 外键 一对多 外键 多对多 外键 一对一 --------------------------------------------------------------------------- ...

  6. MySQL的数据类型,MySQL增删改--添加主外键、添加属性、删除主外键、改表名、获取系统当前时间等

    ls /etc/rc.d/init.d/mysql56service mysql56 start ps aux |grep "mysql"|grep "socket=&q ...

  7. MYSQL增删改查添加外键

    给商品表(从表)添加一个外键 ALTER TABLE product ADD CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES category(cid  从 ...

  8. mysql之浅谈主外键

    主键(PRIMARY KEY) 主键在一个数据表中只能有唯一的一个,约束当前字段的值不能重复,且非空保证数据的完整性,也可以当做当前数据表的标识符用来查询(当做索引,唯一性索引的一种) 创建带主键的表 ...

  9. mysql truncate带有被引用外键的表时报错解决方法

    清空具有外键约束的表时报ERROR 1701(42000)的解决   mysql> truncate table t_users;ERROR 1701 (42000): Cannot trunc ...

随机推荐

  1. 如何安装 Sublime text 编辑器相关的插件

    Sublime是一个伟大的编辑器,具有可靠的基础功能,使编写代码变得愉快.您可以安装一个包管理器,以便于安装插件和添加新功能. 为什么使用包管理器(package manager) 包管理器可以方便地 ...

  2. python+selenium识别图片验证码

    import timeimport pytesseractfrom PIL import Image, ImageEnhancefrom selenium import webdriver url = ...

  3. Docker学习 ,超全文档!

    我们的口号是:再小的帆也能远航,人生不设限!!        一.学习规划: Docker概述 Docker安装 Docker命令 Docker镜像 镜像命令 容器命令 操作命令 容器数据卷  Doc ...

  4. 超详细Maven技术应用指南

    该文章,GitHub已收录,欢迎老板们前来Star! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual 搜索关注微信公众号" ...

  5. xenomai内核解析之双核系统调用(一)

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 xenomai 内核系统调用 一.32位Lin ...

  6. HTTP参数污染学习

    HTTP参数污染 --- HPP 参考: 参数污染漏洞(HPP)挖掘技巧及实战案例全汇总 视频内容 HPP,简而言之,就是给参数赋上多个值. 比如: https://www.baidu.com/s?w ...

  7. MonoBehaviour.StartCoroutine开启协同程序

    StartCoroutine协同程序 StartCoroutine(IEnumerator) StartCoroutine(string methodName) StartCoroutine(stri ...

  8. TCP 粘包拆包

    一.什么是粘包拆包? 粘包拆包是TCP协议传输中一种现象概念.TCP是传输层协议,他传输的是“流”式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心.它只是根据缓冲区状况将数据进行包划分,然后 ...

  9. 斐讯N1搭建高性能博客

    前些日子我在网上淘到了一台斐讯n1,Amlogic S905D的板子让这个盒子平滑地用上了Armbian系统,有了linux的加持,让这个设备的玩法又上升了一个层次,网上大多都是把他作为旁路由用来富强 ...

  10. 8.eclipse 安装 lombook插件

    参考博客:https://www.liangzl.com/get-article-detail-129979.html