MySQL入门(三)

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

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

create table tf1(
id int primary key auto_increment,
x int,
y int
); # 修改
alter table tf1 modify x char(4) default '';
alter table tf1 change y m char(4) default ''; # 增加
mysql>: alter table 表名 add 字段名 类型[(长度) 约束]; # 末尾
eg>: alter table tf1 add z int unsigned; mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] first; # 首位
eg>: alter table tf1 add a int unsigned first; mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] after 旧字段名; # 某字段后
eg>: alter table tf1 add xx int unsigned after x; mysql>: alter table 表名 drop 字段名; # 删除字段
eg>: alter table tf1 drop a;

多表关系(外键)

外键基础知识

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

设置外键

# 建表语句
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB; CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
); # 升级版 product_order表具有其他两个表的外键。一个引用product的两个字段,一个引用customer的一列:
CREATE TABLE product (
category INT NOT NULL, id INT NOT NULL,
price DECIMAL,
PRIMARY KEY(category, id)
) ENGINE=INNODB; CREATE TABLE customer (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB; CREATE TABLE product_order (
no INT NOT NULL AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL,
customer_id INT NOT NULL, PRIMARY KEY(no),
INDEX (product_category, product_id),
INDEX (customer_id), FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
ON UPDATE CASCADE ON DELETE RESTRICT, FOREIGN KEY (customer_id)
REFERENCES customer(id)
) ENGINE=INNODB;

添加外键

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

ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name, ...)
REFERENCES tbl_name (col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

删除外键

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

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. jar 反编译工具

    luyten windows版本的 链接:https://pan.baidu.com/s/1hp6gyvJSj_4h60dk5AZejA 密码:c4u7 之所以推荐它,是因为它能避免普通的编译工具jd ...

  2. mysql域名解析引起的远程访问过慢?

    MYSQL远程连接速度慢的解决方法 PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是, 默认安装的MYSQL开启了DNS的反 ...

  3. python模拟网站登陆-滑动验证码

    普通滑动验证 以http://admin.emaotai.cn/login.aspx为例这类验证码只需要我们将滑块拖动指定位置,处理起来比较简单.拖动之前需要先将滚动条滚动到指定元素位置. impor ...

  4. Cookie 和 Session 关系详解

     什么是 Cookie 和 Session ? 什么是 Cookie HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在 ...

  5. Hexo快速构建个人小站-Hexo初始化和将项目托管在Github(一)

    背景交代 相信每个程序员都有自己做过个人网站,博客之类的项目了,但是现在还在维护吗?反正我前前后后做过2到3个了,维护一段时间后因为一些不可逆的原因(主要是懒)都没有维护了,购买的一些域名和服务器信息 ...

  6. ConcurrentHashMap源码解析-Java7

    目录 一.ConcurrentHashMap的模型图 二.源码分析-类定义 2.1 极简ConcurrentHashMap定义 2.2 Segment内部类 2.3 HashEntry内部类 2.4 ...

  7. mysql主从同步参数

    默认情况下,mysql的主从同步,会启用三个线程,两个IO线程和一个SQL线程.主从同步的主要文件就是binlog文件,从库从主库的binlog中读取数据,然后记录在从库自己的relaylog中,然后 ...

  8. java多线程并发执行demo,主线程阻塞

    其中有四个知识点我单独罗列了出来,属于多线程编程中需要知道的知识: 知识点1:X,T为泛型,为什么要用泛型,泛型和Object的区别请看:https://www.cnblogs.com/xiaoxio ...

  9. Python 简明教程 --- 13,Python 集合

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...

  10. Alink漫谈(八) : 二分类评估 AUC、K-S、PRC、Precision、Recall、LiftChart 如何实现

    Alink漫谈(八) : 二分类评估 AUC.K-S.PRC.Precision.Recall.LiftChart 如何实现 目录 Alink漫谈(八) : 二分类评估 AUC.K-S.PRC.Pre ...