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 哪取页面配置信息,前端通过配置信息动态渲染查询表单,导出、表格ÿ…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...