数据库(表的基本操作)

目录

1.1 表的基本操作

1.1.1 创建表

1.1.2 表物理存储结构

1.1.3 数据类型

文本类型:

数字类型:

时间/日期类型:

常用的数据类型:

1.1.4 查看表

SHOW 命令

查看表结构:

1.1.5 删除表

查看表结构:

删除表:

1.1.6 修改表

修改列类型:

添加列:

删除列:

改列名:

改表名:

1.1.7 复制表的结构(考虑到数据问题)

复制表的结构手段如下:

1.1.8 数据库字典

1.1.9 表的约束

加入约束的三种时机:

创建约束是时机:

定义约束的语法:

约束名的取名规则:

表的约束示例

        1、非空约束(NOT NULL)

        2、唯一约束

        3、主键约束

        4、外键约束

        5、检查约束

        6、自动增长

        7、默认值


1.1 表的基本操作

1.1.1 创建表

语法如下:

        标准的建表(table)语法(列定义之间以英文逗号 , 隔开):

        数据表的每行称为一条记录(record),每一列称为一个字段(field):

        主键(字段)列:唯一标识某一行的列:

CREATE TABLE 表名(列名(字段名) 类型,列名(字段名) 类型,列名(字段名) 类型,列名(字段名) 类型,列名(字段名) 类型,
) ENGINE = 存储结构;

        表名采用大驼峰命名如 >>> Students        Subject        StudentResult

        表名采用小驼峰命名如 >>> studentName        subjectName        resultDate

1.1.2 表物理存储结构

MyISAM    ||    InnoDB(默认)

         存储列相关信息,描述表结构文件,字段长度等

        如果采用共存储模式的,数据信息和索引信息都存储在 ibdata1 中

        如果采用分区存储,还会有一个 t.par 文件(用来存储分区信息)

1.1.3 数据类型

在MySQL中,常用的数据类型有三种

        文本类型、数字类型、日期/时间类型

文本类型:

数据类型描述
CHAR(size)

保存固定长度的字符串(可以包含字母、数字以及特殊字符),在括号中指定字符串的长度。最多 255 个字符

VARCHAR(size)保存可变长度的字符串(可以包含字母、数字以及特殊字符),在括号中指定字符串的最大长度,最多 255 个字符。如果是  size > 255  则类型会自动转换为 TEXT 类型
TEXT存放最大长度为 65,535个字符的字符串
TINYTEXT存放最大长度为 255 个字符的字符串
MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串
LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串
BLOB用于 BLOBs(Binary Large Objects) 存放最多 65,535 字节的数据
MEDIUMBLOB用于 BLOBs(Binary Large Objects) 存放最多 16,777,215 字节的数据
LONGBLOB

用于 BLOBs(Binary Large Objects) 存放最多 4,294,967,294 字节的数据

ENUM枚举类型

数字类型:

数据类型描述
TINYINT(size)-128 到 127 常规, 0 到 255 无符号 *  在括号中规定最大位数
SMALLINT(size)-32768 到 32767 常规, 0 到 65535 无符号 *  在括号中规定最大位数
MEDIUMINT(size)-8388608 到 8388607 普通, 0 到 16777215 无符号 *  在括号中规定最大位数
INT(size)-2147483648 到 2147483647 常规,0到 4294967295 无 符号*。在括号中规定最大位数
BIGINT(size)-9223372036854775808 到 9223372036854775807 常规
FLOAT(size,d)带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数
DOUBLE(size,d)带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数

DECIMAL(size,d)

作为字符串存储的 DOUBLE 类型,允许固定的小数点

时间/日期类型:

数据类型描述
DATE()日期。格式:YYYY-MM-DD 取值范围 '1000-01-01' <<<>>> '9999-12-31'
DATETIME()

日期和时间的组合。格式: YYYY-MM-DD HH:MM:SS

注释:支持的范围是'1000-01-01 00:00:00' <<<>>> '9999-12- 31 23:59:59'

TIMESTAMP()

时间戳。 TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式: YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

TIME()

时间。格式: HH:MM:SS

注释:支持的范围是从 '-838:59:59' 到 '838:59:59'

YEAR()

2 位或 4 位格式的年。

注释: 4 位格式所允许的值: 1901 到 2155。 2 位格式所允许 的值: 70 到69,表示从 1970 到 2069

常用的数据类型:

1.1.4 查看表

SHOW 命令

语法如下:SHOW TABLES [FROM 数据库名] [LIKE wild];

查看表结构:

SHOW COLUMNS FROM 表名

1.1.5 删除表

语法如下:DROP TABLE [IF EXISTS] 表名

示例如下:

#创建学生表
CREATE TABLE Students(studentNo INT(5),studentName VARCHAR(50),studentBirth DATE,studentAddress VARCHAR(100),studentTel VARCHAR(11),studentEmail VARCHAR(50),
) ENGINE = InnoDB;

查看表结构:

SHOW COLUMNS FROM Students;

删除表:

DROP TABLE [IF EXISTS] Student;

1.1.6 修改表

修改列类型:

ALTER TABLE 表名 MODIFY 列名 列类型;
示例:ALTER TABLE Students MODIFY studentEmail TEXT;   

添加列:

ALTER TABLE 表名 ADD 列名 列类型;
示例:ALTER TABLE Students ADD studentGender CHAR(2);

删除列:

ALTER TABLE 表名 DROP 列名;
示例:ALTER TABLE Students DROP studentGender;
注意:在删除时,应该注意数据的完整性

改列名:

ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;
示例:ALTER TABLE Students CHANGE studentEmail studentEma VARCHAR(50);

改表名:

ALTER TABLE 表名 RENAME 新表名;ALTER TABEL 表名 TO 新表名;

1.1.7 复制表的结构(考虑到数据问题)

复制表的结构手段如下:

        方式一:

在 CREATE TABLE 语句的末尾加入 LIKE 源表;
示例:CREATE TABLE Students1 LIKE Students;

        方式二:

在 CREATE TABLE 语句末尾添加 SELECT 关键字;
示例:CREATE TABLE Students2 SELECT * FROM Students;

        方式三:

如果已经有了一张表(结构一定要和源表一样)
语法:INSERT INTO 表名 SELECT * FROM 源表;

1.1.8 数据库字典

information_schema  数据库负责维护

tables存放数据库里所有的数据表、以及每个表所在数据库
schemata存放数据库里所有的数据库信息
views

存放数据库里所有的视图信息

columns存放数据库里所有的列信息
triggers存放数据库里所有的触发器
routines存放数据库里所有存储过程和函数
key_column_usage存放数据库所有的主外键
table_constraints存放数据库全部约束
statistics存放了数据表的索引

1.1.9 表的约束

是在表上强制执行的数据校验规则,约束主要用于保护数据库的完整性。当表中的数据有相互依赖性时,可以保护相关的数据不被删除

大部分数据库支持以下完整性约束:

非空约束NOT NULL
唯一性约束

UNIQUE KEY

主键约束(非空 + 唯一)PRIMARY KEY
外键约束FOREIGN KEY
检查约束CHECK 检查语法
默认值约束DEFAULT
............

加入约束的三种时机:

        1、建表时期加入,直接符在声明的列后

        2、建表时期加入,所有列声明完成后,单独去重新声明列的约束性

        3、建表后加入,语法参考修改列类型语法完成约束的添加

约束作为数据库对象,存放在系统表中,也有自己的名字

创建约束是时机:

        1、在建表的同时创建

        2、建表后创建(修改表)

可定义列级或表级约束

有单列约束和多列约束

定义约束的语法:

方式一

列级约束:在定义列的同时定义约束

语法:

        列定义 约束类型

方式二

表级约束:在定义了所有列之后定义的约束

语法:

        列定义

        [CONSTRAINT 约束名] 约束类型(列名)

约束名的取名规则:

推荐采用:表名_列名_约束类型简介

方式三

约束可以在创建表时就定义,也可以在创建完成后再添加

语法:

        ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型(要约束的列名)

表的约束示例

        1、非空约束(NOT NULL)

                列级约束,只能使用列级约束语法定义

                确保字段值不允许为空

                只能在字段级定义

CREATE TABLE Students(studentNo INT PRIMARY KEY AUTO_INCREMENT,studentName VARCHAR(50) NOT NULL
);
        2、唯一约束

                唯一性约束条件确保所在的字段或者字段组合不出现重复值
                唯一性约束条件的字段允许出现多个NULL
                同一张表内可建多个唯一约束
                唯一约束可由多列组合而成
                建唯一约束时MySQL会为之建立对应的索引。
                如果不给唯一约束起名,该唯一约束默认与列名相同

CREATE TABLE Students(studentNo INT PRIMARY KEY AUTO_INCREMENT,studentName VARCHAR(18) UNIQUE NOT NULL
);
        3、主键约束

                主键从功能上看相当于非空且唯一
                一个表中只允许一个主键
                主键是表中唯一确定一行数据的字段
                删除表的约束
                自动增长和默认值
                存储引擎
                主键字段可以是单字段或者是多字段的组合
                当建立主键约束时,MySQL为主键创建对应的索引
                主键约束名总为PRIMARY

CREATE TABLE tb_student(studentNo INT PRIMARY KEY AUTO_INCREMENT,studentName VARCHAR(18)
);
        4、外键约束

                外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
                外键确保了相关的两个字段的两个关系:
                子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
                当主表的记录被子表参照时,主表记录不允许被删除。
                外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录

格式:FOREIGN KEY (外键列名)REFERENCES 主表(参照列)
        5、检查约束

                检查约束在8.0之前,MySQL默认但不会强制的遵循check约束(写不报错,但是不生效,需要通触发器完成)

                8之后就开始正式支持这个约束了

create table t3(id int, age int check(age > 18),gender char(1) check(gender in ('M','F'))
);
        6、自动增长
auto_increment :自动增长

                为新的行产生唯一的标识
                一个表只能有一个 auto_increment,且该属性必须为主键的一部分。auto_increment的属性可以是任何整数类型

        7、默认值
default : 默认值
# 默认值
可以使用default关键字设置每一个字段的默认值。
-- 创建一张user表
CREATE TABLE User(  id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',name VARCHAR(225) COMMENT '姓名',sex TINYINT(1) DEFAULT 1 COMMENT '性别 1男 0女',PRIMARY KEY (id)
) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[网络编程]UDP协议,基于UDP协议的回显服务器

目录 1.UDP协议介绍 2.UDP协议在Java中的类 2.1DatagramSocket类 2.2DatagramPacket 3.回显服务器 3.1Sever端 3.2Client端 1.UDP协议介绍 UDP协议是一种网络协议&#xff0c;它是无连接的&#xff0c;全双工&#xff0c;并且是面向数据报&#xff0c;不可靠的一种协议…

【UE Niagara】制作传送门_Part2

在上一篇&#xff08;【UE Niagara】制作传送门_Part1&#xff09;基础上继续完成传送门的外层轮廓效果 效果 步骤 1. 打开材质“M_BasicDot_Tans”&#xff0c;添加一个“DepthFade”节点 2. 对材质“M_SubUVMaster_Additive”创建材质实例&#xff0c;这里命名为“M_Portal…

文件传输中的MD5校验技术

1. 文件的MD5校验简介 文件的MD5校验是一种常用的文件完整性验证方法。MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种广泛应用的哈希算法&#xff0c;它能够将任意长度的数据转换为固定长度的哈希值。在文件校验中&#xff0c;MD5算法通过计算文件的哈希值&…

常见的嵌入式面试问题解答!

1.关键字static的作用是什么&#xff1f;为什么static变量只初始化一次&#xff1f; ​1&#xff09;修饰局部变量&#xff1a;使得变量变成静态变量&#xff0c;存储在静态区&#xff0c;存储在静态区的数据周期和程序相同&#xff0c; 在main函数开始前初始化&#xff0c;在…

最新版的Tuxera NTFS 2024 支持macOS 12系统

备受期待的Tuxera NTFS 2024 Mac中文版终于上线了&#xff0c;小编第一时间为您带来&#xff01;Tuxera NTFS 2024 中文版是一款非常好用的NTFS读写工具&#xff0c;可以让您完整的读写兼容NTFS格式驱动器&#xff0c;对磁盘进行访问、编辑、存储和传输文件等。同时还包括开源磁…

C# wpf利用Clip属性实现截屏框

wpf截屏系列 第一章 使用GDI实现截屏 第二章 制作截屏框&#xff08;本章&#xff09; ______第一节 使用DockPanel制作截屏框 ______第二节 利用Clip属性实现截屏框(本节) 第三章 实现截屏框热键截屏 第四章 实现截屏框实时截屏 第五章 使用ffmpeg命令行实现录屏 文章目录 wp…

JavaScript基础之JavaScript引入方式

JavaScript引入方式 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;一般以下方式: 外部方式内部方式JavaScript元素事件通过JavaScript伪URL引…

网络数据传输过程

先验知识&#xff1a;OSI模型 OSI网络模型实际上是参考模型&#xff0c;在实际中并不使用&#xff0c;在网络出现问题的时候&#xff0c;可以从一个宏观的整体去分析和解决问题&#xff0c;而且搭建网络的时候并不需要划分为7层&#xff0c;当今互联网广泛使用的是TCP/IP网络模…

最短代码实现随机打乱数组各个元素的顺序

//最短代码实现随机打乱数组各个元素的顺序 randomSortArr(arr []) {return [...Array(arr.length)].map((v, i) > arr.splice(Math.round(Math.random() * (arr.length - 1)), 1)[0]); },

Unity 建造者模式(实例详解)

文章目录 说明实例1&#xff1a;构建游戏角色实例2&#xff1a;构建游戏场景实例3&#xff1a;构建UI界面 说明 在Unity中&#xff0c;建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过分离对象构建过程的复杂性&#xff0c;允许您以…

MySQL索引优化:深入理解索引下推原理与实践

随着MySQL的不断发展和升级&#xff0c;每个版本都为数据库性能和查询优化带来了新的特性。在MySQL 5.6中&#xff0c;引入了一个重要的优化特性——索引下推&#xff08;Index Condition Pushdown&#xff0c;简称ICP&#xff09;。ICP能够在某些查询场景下显著提高查询性能&a…

小程序学习-20

建议每次构建npm之前都先删除miniprogram_npm

Windows11家庭版上安装Hyper-V并导入虚拟机的方法

大纲 安装启用Hyper-V下载并安装启用 导入虚拟机代码地址 一般我们新买的电脑默认自带的是Windows家庭版。这个版本是没有Hyper-V的。如果安装自带Hyper-V的版本&#xff0c;则需要另外购买。但是我们还是有办法在Windows11的家庭版上安装和启用Hyper-V的。 安装启用Hyper-V …

前端模板字符串的使用

目录 1.说明 2.示例 3.总结 1.说明 模板字符串是用反引号&#xff08;&#xff09;分隔的字面量&#xff0c;允许多行字符串&#xff0c;带有嵌入表达式的字符串插值和一种带标签的模板的特殊结构。 是增强版的字符串&#xff0c;在进行字符串拼接时&#xff0c;可以拼接固…

11 python快速上手

函数进阶 函数进阶1.参数的补充1.1 参数内存地址相关【面试题】1.2 函数的返回值是内存地址1.3 参数的默认值【面试题】1.4 动态参数 2. 函数和函数名2.1 函数做元素2.2 函数名赋值2.3 函数名做参数和返回值 3.返回值和print4. 作用域4.1 函数为作用域4.2 全局和局部4.3 global…

在CentOS 7 中配置NFS服务器

目录 1、克隆两个虚拟机 2、安装 NFS 服务 3、NFS 服务使用 1、克隆两个虚拟机 nfs-servernfs-client&#xff08;修改ip地址&#xff09;[rootxnode1 ~]# cd /etc/sysconfig/network-scripts/[rootxnode1 network-scripts]# vi ifcfg-eno16777736 #修改内容如下 BOOTPROT…

【QT+QGIS跨平台编译】之二:【zlib+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、zlib介绍二、文件下载三、文件分析四、pro文件五、编译实践 一、zlib介绍 zlib是一套通用的解压缩开源库&#xff0c;提供了内存&#xff08;in-memory&#xff09;压缩和解压函数。zlib是一套通用的解压缩开源库&#xff0c;提供了内存&#xff08;in-memory&am…

【小沐学GIS】基于C#绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

三、内存分配

1. JVM 简化架构概览 1.1 运行时数据区&#xff08;即内存区域&#xff0c;又称 JVM 内存结构&#xff09; 如上面的 JVM 简化架构图所示&#xff0c;内存区域分为如下五个部分&#xff08;这五个部分统称为运行时数据区&#xff09;&#xff1a; PC 寄存器&#xff08;又称程…

Python-setup进阶打包命令

一、setup.py文件的书写 这个资料有很多&#xff0c;不多赘述&#xff0c;setup 函数常用的参数如下&#xff1a; 基础描述信息&#xff1a; name 包名称&#xff08;起一个响亮的名字&#xff09;version (-V) 包版本author 程序的作者author_email 程序的作者的邮箱地址mai…