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、外键字段类型必须与父表的主键类型一致
7、mysql中的表结构操作相关推荐
- mysql导出oracle_如何将mysql中的表结构导出放入oracle中
展开全部 将mysql中的表结构导出放入oracle中的方法: 1.导出mysql的表结构sql脚本,然后修改mysql中的数据类型为oracle中的数据类型: MySql与Oracle数据类型的62 ...
- MySQL中修改表结构的关键字_下列SQL语句中,修改表结构的关键字是
[单选题]对<将进酒>全诗分析不正确的是 [单选题]下列划线词语的解释有误的一项是 [多选题]下列食品属于不完全蛋白质的是 ( ) . [单选题]下列聚合函数中属性列必须是数值型的是 [单 ...
- mysql中查找表结构用什么_MySQL查询表结构命令
参考网址:https://www.cnblogs.com/zhangyuhang3/p/6873895.html 一.简单描述表结构,字段类型 desc tabl_name; desc tabl_na ...
- 在mysql中删除表正确的是什么_在MySQL中删除表的操作教程
丢弃现有MySQL的表是很容易的.但是需要非常小心,删除任何现有的一个表后将无法恢复,因为数据丢失. 语法: 下面是通用的SQL语法丢弃(删除)MySQL表: DROP TABLE table_nam ...
- mysql中修改表结构语法_MySQL表结构修改详解
MySQL修改表的语法 ========================= 增加列[add 列名] ========================= ①alter table 表名 add 列名 列 ...
- mysql 中查看表结构的命令
一 desc命令 缺点是: 确实能够看到order表中的字段名称.字段类型.字段长度.是否允许为空,是否主键.默认值等信息,但看不到该表的索引信息. 二 命令 show create table ...
- mysql 修改表结构方案_MySQL中修改表结构时需要注意的一些地方
MySql 在修改表结构的时候可能会中断产品的正常运行影响用户体验,甚至更坏的结果,丢失数据.不是所有的数据库管理员.程序员.系统管理员都非常了解Mysql能避免这种情况.DBA会经常碰到这种生产中断 ...
- 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型
一.数据库操作 1.创建数据库 2.查询数据库 3.修改数据库 4.使用数据库 二.表结构操作 1.创建表 2.查询表 3.修改表 4.删除表 三.表数 ...
- mysql word_mysql导出word的表结构操作
mysql导出word的表结构操作 1.首先准备好mysql的相关插件mysql-connector-odbc和DBExportDoc 百度网盘地址: 2安装驱动 打开DBExportDoc V1.0 ...
最新文章
- 卷积学习与图像识别的技术发展
- 因为在此系统中禁止执行脚本解决
- python课题设计职工信息管理系统_用Python实现职工信息管理系统
- 使用DataTable作为存储过程的参数
- LeetCode 1838. 最高频元素的频数(二分查找)
- LeetCode 653. Two Sum IV - Input is a BST
- ACM学习历程—HDU 2112 HDU Today(map spfa 优先队列)
- Redis info信息(转载)
- 掉价最快的手机排行榜_如何看待2020第一季度手机销量数据。
- 【优化调度】基于matlab粒子群算法求解燃机冷热电优化联供问题【含Matlab源码 330期】
- 推荐一些学习SEO的优秀书籍附pdf电子书下载地址
- WARN: Establishing SSL connection without server‘s identity verification is not recommended 的解决方法
- 还在做手搓党和模拟器党?手机投屏电脑玩吃鸡你值得拥有
- 2022 IDEA全家桶使用最新主题(免申请)
- 雷军的本命年:轮回中的挫败、幸运和逆袭
- ELK高级搜索四之Mapping映射和分词器
- python爬虫论文参考文献格式_Python爬虫进阶必备 | XX文学加密分析实例
- java不同时区时间转换,Java在不同时区转换时间
- Dapp开发实战:去中心化NFT交易平台
- 计算机系统基础知识——循环冗余校验码(CRC)
热门文章
- java实用教程——组件及事件处理——对话框(dialog)
- php 4位数字不足补零,php实现数字不足补0的方法
- 禁用笔记本键盘_如何禁用/启用笔记本内置键盘?
- [Spring5]IOC容器_Bean管理XML方式_p名称空间注入
- [SpringBoot2]@MatrixVariableUrlPathHelper
- [蓝桥杯2015决赛]机器人数目-枚举
- 拦截器如何获取@requestbody_分布式系统中如何优雅地追踪日志(原理篇)
- cg word List 1
- Java基础知识——Java数组详解
- 小 Q 与树(dsu on tree + segment tree)牛客练习赛 81 D