7、mysql中的表结构操作

之前已经介绍了字段以及修饰字段的一些属性,根据特定的对象可以将字段进行组合,这就有了表的概念,接下来介绍一下如何操

作数据表结构。对数据表结构的操作有添加表、修改表、删除表、查看表结构。

添加表

格式:create table [if not exist] 表名( 字段名字1 数据类型 ,字段名字1 数据类型 )[表选项];

介绍一下每个部分的意思:

create table固定格式,创建表的意思,必填
if not exist表示如果表明不存在,创建,否则不创建,选填
表名表的名字,必填
括号中的部分声明的字段,格式为:字段名 数据类型,当有多个字段时,使用逗号隔开,必填
表选项(选填)charset字符集,声明格式:CHARSET=utf8
engine存储引擎,格式:ENGINE=InnoDB
auto_increment自增开始值,设置:auto_increment=100
..........

实例,创建一个user表

CREATE TABLE USER (id bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',age int(4) DEFAULT NULL COMMENT '年龄',name varchar(30) NOT NULL UNIQUE COMMENT '名称',money decimal(12,2) DEFAULT NULL COMMENT '存款'
) ENGINE=InnoDB AUTO_INCREMENT=3 CHARSET=utf8;

修改表

对于表的修改,用户可自定义修改表的名称、表选项、表中字段名、字段的类型、添加和删除字段等

实例如下:

# 将表student更名为teacher
rename table 旧名 to 新名;
rename table student to teacher;# 修改表的字符集
alter table teacher charset = gbk;# 增加一个字段
alter table user add user_score double(5,2) not null default 0.00;# 修改一个字段
alter table user modify score varchar(30) default '';# 修改字段名
alter table user change 旧字段名 新字段名 类型;
alter table user change score score_ssss varchar(30);# 删除字段
alter table user drop score_ssss;# 删除字段上的约束
-- 先查看对应的约束有什么
show create table user;
-- 删除对应的索引
alter table user drop index name;# ..........

删除表

# 删除表
drop table [表名1],[表名2],[表名。。。]
drop table user;

注意:此操作一般不要使用,使用也要保证万无一失

查看表结构

# 查看当前数据库下所有表
show tables;# 按着表名关键字查询表
show tables like ‘%关键字’;# 查看表创建语句
show create table user\g; 
show create table user\G ;# 查看表中字段信息
desc/describle user;
show columns from user;

在这里说一下表之间的关系,因为表是根据具体的业务需求创建的,所以表之间有各种关系,一般可归为三类

一对一表A中的一条数据和B中一条数据相关,表B中的一条数据和A中一条数据相关
一对多表A中的一条数据和B中多条数据相关,表B中的一条数据只与表A中一条数据相关
多对多表A中的一条数据和B中多条数据相关,表B中一条数据与表A中多条数据相关

在mysql中有外键这一概念,使用外键可以保持表之间的各种关系,但是在实际开发中,一般不使用外键,因为使用外键之后,开发人员对数据的可控性会降低,数据的操作更多的依赖于外键,更有甚者导致系统崩溃,所以实际开发中一般使用事务来保持关联表中数据的一致性,所以这里只是简单的介绍一下外键的使用,而不详细介绍

外键

A表中一个字段(非主键)指向B表的主键,那么这个字段称为外键,A表叫做B表的子表,B表叫做A表的父表。外键要求本身必须是一个索引(普通索引),如果字段本身没有索引,声明外键时数据库会先创建一个索引,然后才会创建外键本身,一张表中可以有多个外键,但是名字不可相同

外键的新增和删除

# 创建表时就给字段添加外键
create table card (id bigint(20) primary key auto_increment not null, uid bigint(20) not null ,card_number varchar(255) not null,-- 添加外键,外键名为f_uid,外键是uid字段,连接user表的id字段constraint f_uid foreign key(uid) references user(id) );# 创建表之后再添加外键
-- 先创建card表
create table card (id bigint(20) primary key auto_increment not null, uid bigint(20) not null ,card_number varchar(255) not null
);-- 将uid作为外键
alter table card add constraint f_uid foreign key(uid) references user(id);# 外键不可以修改,所以需要先删除,后修改
# 删除外键 f_uid,分两步:删外键 ---> 删索引(因为创建外键时,系统自动创建了索引)
alter table card drop foreign key f_uid;
alter table card drop index f_uid;

外键的作用就是用来约束具有联系的表之间的数据,保证数据一致性,其约束模式有四种,如下:

no action默认模式
restrict严格模式,父表不能删除或更新一个已经被子表数据应用的记录,一般不使用
cascade级联模式,父表的操作,子表关联数据跟着操作,例如:主表数据修改,子表对应数据也级联修改,一般修改操作使用
set null置空模式,父表操作之后,子表对应的数据(外键字段)被置空,一般删除操作使用

下边写一个实例,来介绍一下约束模式的使用,在声明主键时,在后边加上对应的操作和对应的约束模式即可,如下:

# 创建外键fk_uid 并且设置约束模式,修改时是cascade,删除时是set null
alter table card add constraint fk_uid 
foreign key(uid) references user(id) on delete set null on update cascade;

使用过程中,注意几个地方:

1、当设置约束模式时,外键字段不要设置为空约束

2、外键名不能重复

3、删除外键时,要注意将创建外键时系统创建的索引也删除,一般和外键名同名

4、必须保证表的存储引擎是Innodb,如果不是,外键可以创建成功,但是没有约束作用

5、外键字段类型必须与父表的主键类型一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P3698-[CQOI2017]小Q的棋盘【树形dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3698 题目大意 nnn个点的树,求从111出发走kkk步最多能到多少个节点。(重复走不算) 解题思路 做法与树形背包类似,但是需要注意的是最后不需要返回原点。 fi,j,0/1f_{i,j,0/1}fi,j,0/1​表示第iii个点…

傲娇码农的自我修养

一个热爱自己职业的人一定会对自己的工作充满自豪感,同样,也应该对自己的工作充满热情和自信。对自己的专业能力骄傲而不自满。身为一个码农,如果你热爱自己的工作,我想,你很有可能也是一位傲娇码农。在我的眼里&#…

8、mysql数据表中数据的增删改

已经介绍了数据表的创建、修改和删除,接下来介绍一下如何往数据表中添加数据、修改数据、删除数据 添加数据 # 默认给表中所有字段添加数据,要保证添加的数据列和字段列一致 insert into user values(5,12,wangwu);# 为表中指定的字段添加数据 insert …

P4071-[SDOI2016]排列计数【组合计数,错排】

正题 题目链接:https://www.luogu.com.cn/problem/P4071 题目大意 每次询问n,mn,mn,m。求有多少个nnn的排列使得aiia_iiai​i的数量恰好为mmm个。 解题思路 首先nnn个之中选择mmm个aiia_iiai​i,选择的方案数为CnmC_{n}^mCnm​。剩下的错排就好了 错排推导di(i−…

中国到底有多少个.NET 程序员?都在哪个城市写代码?

中国到底多少个.NET 程序员,对于这个问题,似乎没有一个准确的答案,而且最近很多使用.NET 开发技术的老板在抱怨找不到.NET 开发人员,所以我想基于我的公众号粉丝数据给大家分享下中国的.NET程序员到底有多少,他们也都是…

9、mysql数据表中数据的查询(1)

使用数据库最终要的莫过于查询数据,所以这里将会详细的介绍mysql数据库中查询语句的使用 普通查询 使用基本的select关键字进行查询,其语法及使用如下 # 格式 select [select选项] 字段 [as 别名] from 数据表;# 查询出所有字段的值,不建议…

P4092-[HEOI2016/TJOI2016]树【线段树,倍增】

正题 题目链接:https://www.luogu.com.cn/problem/P4092 题目大意 nnn个点的树要求支持以下操作 给一个点打上标记求一个节点最近的打上了标记的祖先 解题思路 就是求深度最大的打上了标记的祖先,先跑一遍dfsdfsdfs序,然后对于修改操作就在线段树上整…

微软西雅图总部DevOps交流总结

本文转自Study4台湾社区。Study4台湾社区,成立于2011/9/25,希望藉由社群推广的力量,让台下的朋友听到来自不同县市的大师讲课,也让台上年轻一辈的技术传教士能不断的琢磨并且追上大师这是一个社群,社区希望透过分享&am…

12、数据库的设计范式

设计的数据表一般都是根据实际业务实体模型进行创建,为了提高存储的效率,设计数据表时一般按着几个标准进行设计 第一范式每个字段的数据具有原子性,使用字段的数据时不用再解析,可直接使用第二范式表的每一个字段都必须依赖主键…

C# 快速高效率复制对象另一种方式 表达式树

一、需求在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍。比如:public class Student{public int Id { get; set; }public string Name { get; set; } public int Age { get; set; } }public class StudentSecond{public int Id { …

jzoj3783-[NOIP2014模拟8.19]签到题【结论题】

正题 题目链接:https://jzoj.net/senior/#main/show/3783 题目大意 nnn个数,求这个序列中一个非空子集的和是nnn的倍数。 解题思路 可以知道一定有一种解法是一段连续的序列。 证明:设sxs_xsx​表示(∑i1xai)%n(\sum_{i1}^xa_i)\%n(∑i1x​ai​)%n,那么…

13、mysql中视图的应用

是什么 视图是一种有结构没结果的虚拟表,其结构是从基表中产生的,视图主要用于查询数据。在sql层面上来看,视图就是对select查 询语句的封装,我们看到的虚拟表(也就是视图)就是select语句查询出的结果组成…

P4768-[NOI2018]归程【kruskal重构树,最短路】

正题 题目链接:https://www.luogu.com.cn/problem/P4768 题目大意 nnn个点mmm条边的无向图,然后每条边有水位和长度。 每次询问一个(v,w)(v,w)(v,w)表示从vvv点出发走高度超过www的路径到达一个点xxx使得x∼1x\sim1x∼1的最短路最短。 解题思路 先用DijDijDij跑出…

用C# (.NET Core) 实现抽象工厂设计模式

本文的概念性内容来自深入浅出设计模式一书.上一篇文章讲了简单工厂和工厂方法设计模式 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂.披萨店的需求变更现在披萨店在各地授权了很多连锁分店, 但是有的分店偷工减料, 使用劣质原料代替标准原料.披萨店老板现…

14、mysql中事务的应用

是什么 事务是一种保护连续操作同时满足(实现)的一种机制,用来保护数据的完整性,只适用于数据操作,不适用于结构操作,只有 innodb引擎的表具有事务安全的机制。就是说,在一个事务中做一系列的…

P3193-[HNOI2008]GT考试【KMP,dp,矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P3193 题目大意 求有多少个长度为nnn的字符串不包含子串sss。 解题思路 考虑dpdpdp,用fi,jf_{i,j}fi,j​表示第iii个已经匹配到jjj时的方案数。 显然这与正常匹配十分相似,我们分为两种情况 ansi1sj…

Summer Training day4 欧拉降幂

Input2 Output2Hint 1. For N 2, S(1) S(2) 1.2. The input file consists of multiple test cases. Sample Input2 Sample Output2这道题的公式非常简单,就是求2^(N-1) %1e97 由于N实在是太大了,不能直接求快速幂,考虑到2^x % MOD是有循…

Project Honolulu 正式版发布为 Windows Admin Center

微软今天正式发布了 Project Honolulu 的正式版,其正式的名称为 Windows Admin Center,gOxiA 之前一直在这个 TAP 中,从 1711 到 1804 可以看出微软现在的开发速度之快,从测试情况看 WAC 质量非常高。正如之前日志说讲 Windows Ad…

15、sql编程基本语法介绍

使用sql也可以像java一样进行程序编写,说到编程,就离不开变量和流程控制,接下来介绍一下 变量 sql中的变量可分为系统变量和自定义变量 系统变量用于控制服务器表现的变量查看所有系统变量show global variables [like %关键字%]; -- 查看…

使用C# (.NET Core) 实现命令设计模式 (Command Pattern)

本文的概念内容来自深入浅出设计模式一书.项目需求有这样一个可编程的新型遥控器, 它有7个可编程插槽, 每个插槽可连接不同的家用电器设备. 每个插槽对应两个按钮: 开, 关(ON, OFF). 此外还有一个全局的取消按钮(UNDO).现在客户想使用这个遥控器来控制不同厂家的家用电器, 例如…