MySQL入门(alter语法 与 外键)

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语法来查看:

原文地址:https://www.cnblogs.com/Du704/p/11614372.html

时间: 2024-10-07 02:04:28

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

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

1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show databases' -uroot -p123456 mysqlshow -uroot -p123456 # 不常用,记住上面那个就行了 3.创建数据库语法 create database 数据库名; 例如: create database `HA-test`; 4. 切换数据库 use HA-te

mysql的父子表,外键约束

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束.外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持):2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立: 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好处:可以使得两张表关联,保证数据的一

mysql学习之路_外键

回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两张表有连接条件匹配(不匹配自动忽略) 外连接:left/right join 主表的一条记录一定会存在匹配保留副表数据,否则置空 自然连接:natural join 自动匹配(相同字段名) PHP操作:mysql Php充当客户端,开启mysql扩展 连接认证:mysql_connect;执行sql

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

今日重点:外键 一对多 多对多      一对一 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.引言: 我们在同一数据库创建的表时候,很多时候会出现相同数据的冗余问题,也就是说几个id

(MYSQL)给数据库设置外键

设置外键有两种方式,一种是在创建表的时候关联外键,另一种是给已经存在的表添加外键.具体操作如下: 1.在创建表时的操作 班级表(主表): create table tb1( id INT PRIMARY KEY AUTO_INCREMENT, classname VARCHAR(20) NOT NULL ); 用户表(子表): create table tb2( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, c

Mysql 截断表时由于外键约束无法完成时的处理方法

而在MySQL?5.5中,存在外键约束的InnoDB表,在任何情况下都不允许进行Truncate操作,并报错(Error 1701),如果朋友你实在是有点强迫症,那么可以用下面的方式拐着弯解决: 导出数据库数据位.sql文件. 随便用个文本编辑器打开文件. 手动编辑一下.sql文件,怎样编辑相信你看了下面这个图就知道了 4.再将编辑好的.sql文件重新导入就OK了.

MySQL导入数据库--开启/关闭外键约束

今天从服务器上面以SQL文件导出数据库时,发现导入失败,提示insert 语句执行错误, 插入数据时内容有外键关联,无法插入数据. 可以通过设置MySQL的外键约束的方法来进行设置. mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS) 禁用外键约束: SET FOREIGN_KEY_CHECKS=0; 启用外键约束: SET FOREIGN_KEY_CHECKS=1; 查看当前外键约束的值: SELECT @@FOREIGN_KEY_CHECKS; 用SQLyog导出数据

mysql(视图 事务 索引 外键)

视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,students.* from students inner join classes on students.cls_id=classes.id; 查看视图 select * from v_students; 删除视图 drop view v_students; 事务 事务具有ACID特性: 原子性(A,atom

MySQL表rename导致的外键问题

背景:由于zabbix监控的问题图形展示很慢,对zabbix 库的events表进行了清理,清理过程采用了原表rename成bak表,重建events表后,将备份表部分数据导入到新表中. 后发现zabbix平台无法报警,无法恢复报警,日志类似报错: 2315:20190301:104933.609 [Z3005] query failed: [1452] Cannot add or update a child row: a foreign key constraint fails (`zabb