数据库(表的基本操作)

目录

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.mfbz.cn/a/338889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP服务器的演变过程:C++使用libevent库开发服务器程序

C使用libevent库开发服务器程序 一、引言二、libevent简介三、Libevent库的封装层级3.1、reactor对象封装struct event_base3.2、事件对象struct event3.3、struct bufferevent对象3.4、evconnlistener对象3.5、事件循环3.6、事件处理 四、完整示例代码小结 一、引言 手把手教…

论文精读--ResNet

ResNet论文 撑起计算机视觉半边天的ResNet【论文精读】_哔哩哔哩_bilibili Abstract Deeper neural networks are more difficult to train. We present a residual learning framework to ease the training of networks that are substantially deeper than those used pre…

E/E架构升级是汽车智能化发展关键

E/E架构升级是汽车智能化发展的关键。传统汽车采用的分布式E/E架构因计算能力不足、通讯带宽不足、不便于软件升级等瓶颈&#xff0c;无法满足现阶段汽车发展的需求&#xff0c;E/E架构升级将助力智能汽车实现跨越式革新。汽车E/E架构升级主要体现在硬件架构升级、软件架构升级…

docker:Web迁移

系列文章目录 docker&#xff1a;环境安装 docker:Web迁移 文章目录 系列文章目录前言一、Mariadb1.拉取镜像2.创建容器3.数据同步4.数据分离 二、PHP项目1.拉取镜像2.创建容器3.容器互通 三、Flask项目1.拉取镜像2.创建镜像3.自定义镜像1.安装apache2.安装python33.意外退出 …

【Qt Quick 项目(第一集Qt Quick UI 项目项目创建)】

# Qt Quick 项目 到底什么是Qt Qml、什么是Qt Quick、QtQuick应用程序与Qt Widget程序有何区别,为了让读者在学习QML之前有一个整体认识,这里先介绍几个Quick项目。 01 Qt Quick UI 项目

SCTP, TCP, UDP, IP, ICMP都在哪一层?(TCP/IP网络通信协议学习)

TCP/IP网络通信协议最早是由罗伯特卡恩&#xff08;Robert E. Kahn&#xff09;和文顿瑟夫&#xff08;Vinton G. Cerf&#xff09;于1972年提出的&#xff0c;它是一个实际的协议栈。 OSI七层网络通信协议最早是由国际标准化组织&#xff08;ISO&#xff09;于1977年提出的&am…

在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…

2024腾讯云服务器租用价格多少钱一年?1个月和1小时收费明细表

腾讯云服务器租用优惠价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年、GPU服…

第三篇【传奇开心果系列】Vant开发移动应用:财务管理应用

传奇开心果博文系列 系列博文目录Vant开发移动应用系列博文 博文目录一、项目目标二、编程思路三、初步实现示例代码四、扩展思路五、使用Firebase等后端服务来实现用户认证和数据存储示例代码六、用Vant组件库实现收入和支出分类管理的示例代码七、用Vant组件库实现收入和支出…

【Bugku-web】计算器

1.打开训练场景 2.按"F12"查看页面源代码&#xff0c;根据箭头指向可以看到这个空白框内的长度为1&#xff0c;也就是输完一个字就不能往后输了&#xff0c;根据这样就直接更改数据1改3&#xff0c; 3.改后&#xff1a;多写几个字不碍事&#xff0c;然后计算正确值是…

第04章_IDEA的安装与使用(下)(IDEA断点调试,IDEA常用插件)

文章目录 第04章_IDEA的安装与使用&#xff08;下&#xff09;8. 快捷键的使用8.1 常用快捷键8.2 查看快捷键1、已知快捷键操作名&#xff0c;未知快捷键2、已知快捷键&#xff0c;不知道对应的操作名 8.3 自定义快捷键8.4 使用其它平台快捷键 9. IDEA断点调试(Debug)9.1 为什么…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-7 datalist

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>datalist</title> </head><body> <input id"address" list"addressList"> <datalist id"addressList"…

Typora + PicGo + GitHub搭建图床

Typora PicGo GitHub搭建图床 1. Typora下载破解 这一步自行百度 2. PicGo下载 PicGo is Here | PicGo 自行下载安即可 3. GitHub仓库设置 gitHub注册略过&#xff0c;如果不能访问请科学上网 创建仓库 生成访问token 点击右上角头像 -> setting -> 点击左边最…

C语言从入门到入坟

前言 1.初识程序 有穷性 在有限的操作步骤内完成。有穷性是算法的重要特性&#xff0c;任何一个问题的解决不论其采取什么样的算法&#xff0c;其终归是要把问题解决好。如果一种算法的执行时间是无限的&#xff0c;或在期望的时间内没有完成&#xff0c;那么这种算法就是无用…

万界星空科技MES系统的生产管理流程

对于生产型工厂来说&#xff0c;车间生产流程无疑是最重要的管理环节&#xff0c;繁琐的生产细节让企业很难找到合理的生产管理方法&#xff0c;导致人工效率低、错误多、成本高。如果想要解决这些问题&#xff0c;工厂就必须要有一套自己的生产管理系统&#xff0c;这样才能提…

为什么单片机不能直接驱动继电器和电磁阀?

为什么单片机不能直接驱动继电器和电磁阀&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&…

HarmonyOS鸿蒙应用开发(三、轻量级配置存储dataPreferences)

在应用开发中存储一些配置是很常见的需求。在android中有SharedPreferences&#xff0c;一个轻量级的存储类&#xff0c;用来保存应用的一些常用配置。在HarmonyOS鸿蒙应用开发中&#xff0c;实现类似功能的也叫首选项&#xff0c;dataPreferences。 相关概念 ohos.data.prefe…

利用AI制作桌游卡牌的个人实践

一、引言&#xff1a; ChatGPT ChatGPT是由OpenAI开发的一款基于GPT&#xff08;生成式预训练变换器&#xff09;架构的人工智能语言模型。GPT-4&#xff0c;是ChatGPT中使用的最新版本&#xff0c;具有以下特点&#xff1a; 1. **语言理解与生成能力**&#xff1a;ChatGPT擅…

Window安装Python和开发Pycharm

准备&#xff1a; 1&#xff1a;安装Python环境 https://www.python.org/downloads/windows/ 2: 下载Pycharm https://www.jetbrains.com/pycharm/download/other.html

记录 | vscode launch.json和task.json的用途用法

Tasks.json 按编译逻辑来说&#xff0c;先讲tasks.json 先贴图&#xff1a; "label"&#xff1a; 对应launch.json中的 "preLaunchTask"&#xff1b;&#xff08;一定要一致&#xff0c;决定了launch.json之前先运行哪个配置&#xff0c;tasks是一个arra…
最新文章