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 哪取页面配置信息,前端通过配置信息动态渲染查询表单,导出、表格ÿ…...
Linux下 C/C++ NTP网络时间协议详解
NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议。它是通过网络在计算机系统之间进行时钟同步的网络协议。NTP 在公共互联网上通常能够保持时间延迟在几十毫秒以内的精度,并在理想条件下,它能…...
Pytest自动化框架-权威教程02-Pytest 使用及调用方法
Pytest 使用及调用方法使用python -m pytest调用pytest2.0版本新增你可以在命令行中通过Python编译器来调用Pytest执行测试:Copypython -m pytest [...]通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。可能出现的执行退出cod…...
大数据技术——概述
根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一次重大变革三次信息化浪潮1.存储设备容量不断增加2.CPU处理能力大幅提升3.网络带宽不断增加运营式系统阶段数据库的出现使得数据管理的复杂度大大降低,数据往往伴随着一定的运营活动而产生并记录在数据库…...
java-代理模式
背景 代理模式指的是提供一个代理对象用于访问目标对象,可以很方便的在不修改目标对象的情况下,提供额外的功能,扩展目标对象。 case1:静态代理 约束:代理对象和目标对象要实现相同的接口 优点:不修改目标对象的情况下扩展功能 缺点:必须实现相同的接口,如果接口发生变…...
路由网络的构建与配置
Part.1 ⑴ 需求分析 在构建的局域网中,通过路由器间配置静态路由,实现PC1和PC2主机直接连通,主机网段不能与路由器直接互联网段通信。 ⑵ 环境要求 配置虚拟网卡的计算机,安装华为eNSP模拟软件。 规划拓扑 Part.2 ⑴ 拓扑描述…...
软件测试-接口测试-数据库管理
文章目录 1.数据库介绍2.数据库基本操作2.1安装2.2 操作流程2.3数据准备2.4数据的基本操作2.4.1 连接数据库并查询数据库版本2.4.2 连接数据库执行数据库查询操作2.4.3 连接数据库执行数据库插入操作2.4.4 连接数据库执行数据库更新操作3.数据库事务操作3.1 案例:数据不一致性…...
【华为OD机试 】天然蓄水库(C++ Java JavaScript Python)
文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 公元2919年,人类终于发现了一颗宜居星球——X星。 现想在X星一片连绵起伏的山脉间建一个天热蓄水库,如何选取水库边界,使蓄水量最大? 要求: 山脉用正整数数组s表示,每个元素代表山脉…...
普元EOS中导出excl页面下载
起因 需要做一个筛选功能的导出表格 解决办法 这个垃圾eos我是真受不了,sb玩意的缺点三天三夜也说不完 后边就没法整response的这些个东西,可真是够愁人的 在网上搜了搜 在普元的帮助文档里也看了看 普元提供的像是老太太的裹脚布一般又臭又长 参照这个可以看一下...
内存的管理
取指令——译码——执行——返存 计组课我们学过cpu真正读指令并非是从内存中读入,而是从cache读和存,再由cache进行取指或返存,因为cpu指令周期比内存周期速度快很多,cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一…...
OpenFeign 切换HttpClient遇到的问题
背景 OpenFeign支持三种Http请求方式,默认情况下通过jdk中的HttpURLConnection向下游服务发起http请求(详见下图,源码详见feign.Client.Default), 默认的Client 采用 HttpURLConnection, 这种是无法复用的…...
怎么做一个网站送给女朋友/怎么注册自己的网址
见字如面,我是军哥!昨天逛知乎,看到一个帖子,还是挺有趣的!中青校媒的一份调查结果:67.65% 的大学生认为自己 10 年内年薪可达百万!帖子下面很多人留言挖苦,说这些年轻人怕是没受过什…...
中山专业做网站公司/推广网页怎么做的
参考文献: Tomcat之the jre_home environment variable is not defined correctly this environment variable is need 第一种: 双击tomcat的bin目录下的startup.bat时一闪而过时, 可以右键startup.bat找一个文本编辑器打开,然…...
一念天堂免费观看/郴州seo
可能这样的面试场景比较常见:面试官:ConcurrentHashMap是怎么实现的呢?程序猿小僧:ConcurrentHashMap是线程安全的HashMap,基于分段锁实现,面试官:分段锁又是怎么实现的呢?程序员小僧…...
珠宝网站建设要以商为本/怎样在网上推广自己的产品
像HTML/CSS中的style一样,android也可以使用自定义的style样式 一般是在value 文件夹下面建一个styles.xml文件 样式是用于描述一个View或是一个窗口的显示属性的集合,样式可以指定如高度,填充,字体颜色,字体大小,背景…...
学校网站模板下载/兰蔻搜索引擎营销案例
转自:https://blog.csdn.net/xzmeasy/article/details/75103431 为什么要用jspf文件 写jsp页面时,是不是:css和js引用特别多,而且有些页面头部信息包括css、js引用都一样,这时候聪明的程序猿肯定会想到把这一部分抽取出…...
机关网站机制建设情况/seo优化包括
寄生组合式继承 定义:所谓寄生组合式继承,即通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。其背后的基本思路是:不必为了指定子类型的原型而调用超类型的构造函数,我们所需要的无非就是超类型原型的一…...