3.1.2 创建表
文章目录
- 1.创建表
- 2.表创建基础
- 3.表的主键
- 4.使用null值
- 5.使用AUTO_INCREMENT
- 6.指定默认值
- 7. 字段备注
- 8.引擎类型
- 9.外键
1.创建表
表的创建一般有俩种方式,一种是使用交互式创建和管理表的工具,比如我们安装的MariaDB,另一种是使用MySQL 语句进行创建;
在日常工作中,涉及到表的新建或修改的语句,都需要提供SQL脚本,到生产环境进行批量的生效,所以MySQL 语句的创建方式才是更多人选择使用的一种方式,使用交互式创建和管理表的工具来进行创建是十分简单易学的,但是因为每个工具都有自己的设计分隔,所以这里不再进行介绍,大家自行研究即可;
2.表创建基础
创建表使用CREATE TABLE语句,创建时必须在CREATE TABLE语句后给出新表的名字,表列的名字和定义,用逗号分隔;
CREATE TABLE语句也可能包含其他关键字或选项,但至少要包含表的名字和列的细节;
语法: create table 表名(字段名称 字段类型(字段长度),字段2,字段3…)
如:
create table tb_door(id int(11) not null,door_name varchar(100) not null,tel varchar(20) null);
从上面的例子中可以看出,表名紧跟在create table 关键字之后,实际关于表的相关定义,被包裹在圆括号之中,各列之间使用逗号分隔;
在MySql语句中,其会忽略空格,语句可以在一个长行上输入,也可以分成许多行,一般我们便于查看,都会根据其字段将其分成多行进行使用;
表中每个字段的定义都以列名开始(列名在表中必须唯一),后跟列的数据类型,以及相关属性,最后一个字段切记不加逗号,否则MySql会认为你还有没有输入完成的下一列没有输入,导致命令报错;
在创建新表时,要求在当前数据库中此表名是唯一的,否则会报错,如果要防止意外覆盖已经存在的表,SQL要求首先手动删除该表,然后再重新建它,而不是简单的用创建语句覆盖。如果你只想在一个表不存在时创建它,那么应该在表名后给出 if not exists,这样做不会检查已经存在的表与你的表属性是否相同,只会检查表名是否存在,且在表明不存在时创建它;如下方语句对上述创建表语句的优化:
create table tb_door if not exists(id int(11) not null,door_name varchar(100) not null,tel varchar(20) null);
3.表的主键
接下来我们改造tb_door 表:
create table tb_door if not exists(id int(11) not null,door_name varchar(100) not null,tel varchar(20) null,PRIMARY KEY(id));
这张表中,表名为tb_door ,紧跟在CREATE TABLE 后面,实际的表定义都在括号内,各列之间用逗号分隔,列名在表中必须唯一,列名后跟着列的数据类型及是否为空属性;
表的主键可以在创建表时用PRIMARY KEY指定,也可以在指定字段后直接跟PRIMARY KEY来表明这个字段为主键,比如:
create table tb_door if not exists(id int(11) PRIMARY KEY not null,door_name varchar(100) not null,tel varchar(20) null);
这样也是可以的;
在表中,主键值必须唯一,即表中的每个行必须具有唯一的主键值与之关联,如果一张表中,有多个主键字段,那么多个字段的组合值,必须保证唯一,当然这种情况是比较少的;
为创建由多个列组成的主键,应该以逗号分隔的列表给出各列明,如:
create table tb_door if not exists(id int(11) not null,door_name varchar(100) not null,tel varchar(20) null,PRIMARY KEY(id,door_name));
4.使用null值
null值就是没有值或者缺值,允许null值的列也允许在插入行时不给出该列的值,比如tb_door 表中,除tel 外,其他列都是不允许为null值的,所以插入一个新的数据时,你必须插入id与door_name ,只有tel 可以不插入;
为not null的字段在插入数据时必须提供其对应的值,否则会插入失败,在实际开发中,要确认哪些字段是必须要有的,而哪些字段不是必须的,以此来控制插入数据的准确性;
5.使用AUTO_INCREMENT
每张表只允许有一个AUTO_INCREMENT列,其必须被索引(索引将在后续介绍,主键会自动加入索引);
在表中,我们每插入一行新的数据,都必要要有一个与其他行不相同的主键,我们可以使用AUTO_INCREMENT来实现,其表明每一个新的行,使用AUTO_INCREMENT的字段的值都在上一个此字段的基础上加1;
例如我们插入的第一行数据cust_id 为1,那么接下插入的第二行数据我们不必给定确定的值,使用null插入也可以,MySql会自动帮我们给定cust_id 值为2;
这样当我们每增加一行数据时,自动增量cust_id 的值,便可以保证我们在业务中的cust_id 值唯一,而不用担心上一个插入的值到底是多少,导致cust_id 值重复插入失败;
6.指定默认值
我们可以使用DEFAULT 来指定此字段的默认值;
如door_name 字段我们指定了默认值为“葫芦娃”,那么在插入数据时,我们可以不输入door_name 字段的值,MySql会自动帮我们给定door_name 的值为“葫芦娃”;
7. 字段备注
我们可以使用comment 来给字段添加备注信息;
复杂的表往往有几百个字段,要记住这么多字段的具体含义是比较困难的,我们可以在设计表时就给字段添加备注信息,来表明此字段的具体含义,这个备注信息只提供给开发人员查看,无任何其他作用,所以不必担心它会对你的表造成任何破坏,如:
CREATE TABLE customers( cust_id int PRIMARY KEY NOT NULL AUTO_INCREMENT comment "主键", cust_name char(50) NOT NULL comment "名字", cust_address char(50) NULL comment "地址", cust_city char(50) NULL comment "城市", cust_state char(5) NULL comment "省", cust_country char(50) NULL DEFAULT 'China' comment "国家", cust_contact char(50) NULL comment "联系方式", cust_email char(255) NULL comment "电子邮箱", ) ENGINE=InnoDB;
8.引擎类型
每一个Sql语言其内部都有一个管理和处理数据的内部引擎,MySql相比较其他sql语言有多个引擎,所以在创建表时,你可以指定使用哪个引擎,也可以不指定,当不指定时,就会使用默认的引擎来创建;
创建表语句结尾的ENGINE=InnoDB就指定这张表使用InnoDB引擎来管理和处理数据;
- InnoDB:一个可靠的事物处理引擎,不支持全文本搜索
- MEMORY:功能等同于MyISam,但是数据存储在磁盘中,所以速度很快,很适合创建临时表
- MyISam:一个性能极高的引擎,支持全文本搜索,但不支持事物处理;
在一个数据库中,引擎类型是可以混用的,比如表A你设置引擎类型为InnoDB,表B你设置引擎类型为MyISam,这是完全可以的;但也有例外情况,就是外键不能跨引擎;
外键用于强制实施引用完整性,所以不能跨引擎使用,也就是说使用InnoDB引擎的表,不能引用使用MyISam引擎表的外键;
9.外键
外键是某张表中的一列,其被包含在另外一张表中,且是另外一张表的主键;外键也是索引的一种,是通过一张表中的一列指向另一张表中的主键,来对两张表进行关联;一张表可以有一个外键,也可以存在多个外键,与多张表进行关联;
外键的主要作用是保证数据的一致性和完整性,并且减少数据冗余。主要体现在以下两个方面:
-
阻止执行
- 从表插入新行,其外键值不是主表的主键值便阻止插入;
- 从表修改外键值,新值不是主表的主键值便阻止修改;
- 主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
- 主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行);
-
级联执行
- 主表删除行,连带从表的相关行一起删除;
- 主表修改主键值,连带从表相关行的外键值一起修改;
并且由于外键是关联外部表的,所以一般为了避免创建外键时所关联的表及字段不存在,一般在创建完成表之后使用修改表的语句增加外键,在修改表的语句中使用foreign key 关键字来创建,如:
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名)
REFERENCES 外表表名(主键字段名)
其中外键名一般由字段名_表名_外表表名组成,例如要给 表A 的 id1 字段创建外键,关联 表B 的 id2 字段,那么外键名一般设置为 id1_A_B ;
相关文章:
3.1.2 创建表
文章目录1.创建表2.表创建基础3.表的主键4.使用null值5.使用AUTO_INCREMENT6.指定默认值7. 字段备注8.引擎类型9.外键1.创建表 表的创建一般有俩种方式,一种是使用交互式创建和管理表的工具,比如我们安装的MariaDB,另一种是使用MySQL 语句进…...

使用netlify实现自动化部署前端项目(无服务器版本)
介绍 本文以 github仓库进行介绍关联netlify的无服务前端自动化部署。用途:个人网站设计、小游戏等当然这只是让你入门~具体细节等待你自己去探索 实现 打开官方网站 如果没有注册过的账户,你需要使用 github 去进行登录。注册完成后会自动给你提示填…...
MATLAB点云数据处理(二十九):可视化点云之pcshow参数详解与快捷键操作
文章目录 1 pcshow简述2 最简单的pcshow3 带参数的pcshow3.1 点大小参数----MakerSize3.2 背景色参数----Background3.3 指定竖直轴参数----VerticalAxis3.4 指定垂直轴方向参数----VerticalAxisDir3.5 投影参数----Projection3.6 指定可视化平面参数----ViewPlane3.7 颜色渲染…...

顺序表——重置版
本期我们来实现数据结构的顺序表(这个之前写过一次,不过本期和之前可能会略有不同,但大体相同),大家可以看一下我们之前完成的顺序表 (6条消息) 顺序表及其多种接口的实现_顺序表类中实现接口方法_KLZUQ的博客-CSDN博客…...
PyQt5自然语言处理入门案例笔记
前言 最近想将自然语言处理的项目进行可视化,尽量还是使用回Python语言,因此打算用PyQt来实现相应的功能。 入门案例 一个简单的自然语言处理的demo,使用PyQt框架,该demo可以读取文本文件,对文件中的文本进行情感分…...
使用 CSS 替换表行颜色?
跳到主内容 我正在使用一个带有交替行颜色的表格。 tr.d0 td {background-color: #CC9999;color: black; } tr.d1 td {background-color: #9999CC;color: black; }<table><tr class"d0"><td>One</td><td>one</td></tr>&…...

智能家居控制系统
🥁作者: 华丞臧. 📕专栏:【项目经验】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站…...

Linux 进程:fork()与vfork()的对比
目录一、fork函数二、vfork函数1.函数的原理2.函数的隐患3.解决函数隐患的方法在Linux的进程学习中,常使用fork函数来创建子进程,但其实还有一个vfork函数也可以创建子进程。但是这两个函数的实现机制不同,fork函数使用了写实拷贝技术&#x…...

环境搭建02-Ubuntu16.04 安装CUDA和CUDNN、CUDA多版本替换
1、CUDA安装 (1)下载需要的CUDA版本 https://developer.nvidia.com/cuda-toolkit-archive (2)安装 sudo sh cuda_8.0.61_375.26_linux.run(3)添加环境 gedit ~/.bashrc在文件末尾添加: ex…...

HOT100--(3)无重复字符的最长子串
点击查看题目详情 大思路: 创建哈希表,元素类型为<char, int>,分别是字符与其对应下标 用哈希表来存储未重复的子串,若有重复则记录下当前子串最大值maxhashsize 并且开始以相同方法记录下一子串 遍历完成以后,…...

vue keep-alive多层级路由支持
keep-alive使用 属性值 1.include - 字符串或正则表达式。只有名称匹配的组件会被缓存。 2.exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。 3.max - 数字。最多可以缓存多少组件实例。 注:匹配首先检查组件自身的 name 选项,如果 nam…...

从源码角度看React-Hydrate原理
React 渲染过程,即ReactDOM.render执行过程分为两个大的阶段:render 阶段以及 commit 阶段。React.hydrate渲染过程和ReactDOM.render差不多,两者之间最大的区别就是,ReactDOM.hydrate 在 render 阶段,会尝试复用(hydr…...
ARM基础 -- 2
文章目录一、可编程器件的编程原理1.1 电子器件的发展方向1.2 可编程器件的特点1.3 整个编程及运行过程二、指令集对CPU的意义2.1 汇编语言与C等高级语言的差异2.2 汇编语言的本质2.2.1 编程语言的发展过程2.2.2 汇编语言的特点和用途三、RISC和CISC的区别3.1 复杂指令集CPU --…...
Java 类型转换
Java 类型转换 int转Integer int int0 1; Integer integer1 int0; // 自动装箱 Integer integer2 new Integer(int0); Integer integer3 Integer.valueOf(int0);Integer转int Integer integer0 2; int int1 integer0; // 自动拆箱 int int2 integer0.intValue(); // …...

【Java开发】JUC基础 05:线程通信/协作
1 生产者消费者问题📌 线程通信应用的场景可以简单地描述为生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费;如果仓库中没有产品,则生产者将产品放入仓库&a…...

哪些工具可以实现在线ps的需求
在线Photoshop有哪些工具可以选择?在 Adobe 的官网上就能够实现,很惊讶吧,其实 Adobe 官方推出了在线版本的 Photoshop 的,尽管目前还是 Beta版本,但其实也开放了蛮久了。编辑切换为居中添加图片注释,不超过…...

如何使用C2concealer生成随机化的C2 Malleable配置文件
关于C2concealer C2concealer是一款功能强大的命令行工具,在该工具的帮助下,广大研究人员可以轻松生成随机化的C2 Malleable配置文件,以便在Cobalt Strike中使用。 工具运行机制 开发人员对Cobalt Strike文档进行了详细的研究,…...

网络基础之IP地址和子网掩码
一、IP地址IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0 一直到255.255.255.255。互联网上的…...

G1D54-CRF
一、CRF的输入X是什么?是构造的特征吗? 如此,CRF的x只用于状态函数吗? CRF的例子解释调用代码 机器之心 知乎忆榛 此处线性链条件随机场的特征函数形式被统一了? BilstmCRF,强烈推荐!&#x…...
vue3 使用defineAsyncComponent与component标签实现动态渲染组件
内容有些啰嗦,内容记载了当时遇到了bug以及解决问题的思路。 业务场景简述: 前端做配置化组件,通过url内的唯一标识,请求后端sql 哪取页面配置信息,前端通过配置信息动态渲染查询表单,导出、表格ÿ…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...