当前位置: 首页 > news >正文

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.外键

外键是某张表中的一列,其被包含在另外一张表中,且是另外一张表的主键;外键也是索引的一种,是通过一张表中的一列指向另一张表中的主键,来对两张表进行关联;一张表可以有一个外键,也可以存在多个外键,与多张表进行关联;

外键的主要作用是保证数据的一致性和完整性,并且减少数据冗余。主要体现在以下两个方面:

  1. 阻止执行

    • 从表插入新行,其外键值不是主表的主键值便阻止插入;
    • 从表修改外键值,新值不是主表的主键值便阻止修改;
    • 主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
    • 主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行);
  2. 级联执行

    • 主表删除行,连带从表的相关行一起删除;
    • 主表修改主键值,连带从表相关行的外键值一起修改;

并且由于外键是关联外部表的,所以一般为了避免创建外键时所关联的表及字段不存在,一般在创建完成表之后使用修改表的语句增加外键,在修改表的语句中使用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>&…...

智能家居控制系统

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【项目经验】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站…...

Linux 进程:fork()与vfork()的对比

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

环境搭建02-Ubuntu16.04 安装CUDA和CUDNN、CUDA多版本替换

1、CUDA安装 &#xff08;1&#xff09;下载需要的CUDA版本 https://developer.nvidia.com/cuda-toolkit-archive &#xff08;2&#xff09;安装 sudo sh cuda_8.0.61_375.26_linux.run&#xff08;3&#xff09;添加环境 gedit ~/.bashrc在文件末尾添加&#xff1a; ex…...

HOT100--(3)无重复字符的最长子串

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

vue keep-alive多层级路由支持

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

从源码角度看React-Hydrate原理

React 渲染过程&#xff0c;即ReactDOM.render执行过程分为两个大的阶段&#xff1a;render 阶段以及 commit 阶段。React.hydrate渲染过程和ReactDOM.render差不多&#xff0c;两者之间最大的区别就是&#xff0c;ReactDOM.hydrate 在 render 阶段&#xff0c;会尝试复用(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 生产者消费者问题&#x1f4cc; 线程通信应用的场景可以简单地描述为生产者和消费者问题假设仓库中只能存放一件产品&#xff0c;生产者将生产出来的产品放入仓库&#xff0c;消费者将仓库中产品取走消费&#xff1b;如果仓库中没有产品&#xff0c;则生产者将产品放入仓库&a…...

哪些工具可以实现在线ps的需求

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

如何使用C2concealer生成随机化的C2 Malleable配置文件

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

网络基础之IP地址和子网掩码

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

G1D54-CRF

一、CRF的输入X是什么&#xff1f;是构造的特征吗&#xff1f; 如此&#xff0c;CRF的x只用于状态函数吗&#xff1f; CRF的例子解释调用代码 机器之心 知乎忆榛 此处线性链条件随机场的特征函数形式被统一了&#xff1f; BilstmCRF&#xff0c;强烈推荐&#xff01;&#x…...

vue3 使用defineAsyncComponent与component标签实现动态渲染组件

内容有些啰嗦&#xff0c;内容记载了当时遇到了bug以及解决问题的思路。 业务场景简述&#xff1a; 前端做配置化组件&#xff0c;通过url内的唯一标识&#xff0c;请求后端sql 哪取页面配置信息&#xff0c;前端通过配置信息动态渲染查询表单&#xff0c;导出、表格&#xff…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项&#xff0c;设置文件夹共享为总是启用&#xff0c;点击添加&#xff0c;可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download&#xff08;这是我共享的文件夹&#xff09;&…...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...