第二章 表操作

news2024/12/23 17:25:26

一、数据表的设计理念

  1. 数据表是包括数据库所有数据的数据库对象,数据在表中的组织方式与在电子表格中相似,都是按行和列的格式组织的,其中每一行代表一条唯一的记录,每一列代表记录中的字段,表中的数据库对象包含列、索引和触发器
    • 列:也叫栏位,对于属性列,创建表时必须指定列的名字和数据类型
    • 索引:根据指定的数据库表列建立起来的顺序,提供了快速访问数据的途径,即可监督表的数据,使其索引指向的列中的数据重复
    • 触发器:用户定义的事务命令的集合,当对一个表中的数据进行插入、更新或删除操作时,这组命令就会自动执行,可以用来确保数据的完整性和安全性

1. 标准化和规范化

  1. 数据库的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项
  2. 要求实体的属性完全依赖主关键字,如果存在不完全依赖,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与元实体之间是一对多的关系
  3. 要求每一个关系中不包含已有其它关系中包含的非主关键字

2. 表和表之间的关系

数据库里表和表的关系有三种:一对一、一对多、多对多。

  1. 一对一,是说我们建立的主表和关联的表之间是意义对应的
  2. 一对多,比如新建一个班级表,而每个班级有多个学生每个学生则对应一个班级 ,班级对学生就是一对多的关系
  3. 多对多,比如新建一个选课表,可以有许多科目,每个科目有很多学生选,而每个学生可以选择多个科目

二、创建表

在MySQL数据库管理系统中,创建表通过SQL语句create table来实现,语法如下

create table 表名(
	属性名 数据类型 [完整性约束条件],
	属性名 数据类型 [完整性约束条件],
	属性名 数据类型 [完整性约束条件],
	....
	属性名 数据类型 [完整性约束条件]
)

表名不能为SQL语言的关键字,一个表中可以有一个或多个属性,在定义时,字母大小写均可,各个属性之间用逗号隔开,最后一个属性后面不需要加逗号

三、查看表结构

  1. 在MySQL中,describe语句可以查看表的基本定义,其中包括字段名、字段数据类型、是否为主键和默认值等,语法形式如下
    describe 表名;
    
    在这里插入图片描述
  2. 可以通过执行SQL语句show create table来实现查看表结构的详细定义,语法如下
    show create table 表名
    

四、 删除表

删除表是指删除数据库中已存在的表,在删除表时会删除表中所有的数据,因此在删除表时要特别注意。在MySQL中, 使用drop table 语句删除没有被关联的普通表,其基本语法如下:

drop table 表名
~~~

五、修改表

1. 修改表名

数据库系统通过表名来区分不同的表,表名在同一个数据库中唯一标识一张表,在MySQL中,修改表名是通过SQL语句alter table来实现的

alter table 修改表名 rename [to] 新表名

2. 增加字段——在表的最后一个位置增加

在创建表时,表中的字段就已经定义完成了,如果要增加新的字段,看了眼通过alter table语句来实现,语句如下

alter table 表名 add 字段名称 数据类型;

3. 增加字段——在表的第一个位置添加

可以使用first关键字使所增加的字段位于所有字段的第一个位置,具体SQL语句如下

alter table 表名 add 字段名称 数据类型 first

4. 增加字段——在表的指定字段之后添加

可以通过关键字after 在指定的字段之后添加字段,具体语句如下

alter table 表名 add 字段名称 数据类型 after 已经存在的字段

5. 删除字段

在MySQL数据库管理系统中,删除字段通过SQL语句alter table来实现,其语法形式如下:

alter table 表名 drop 字段名

6. 修改字段

在MySQL中,alter table语句也可以修改字段的名称,其基本语法如下

alter table 表名 charge 所修改字段 新字段名 数据类型

7. 修改字段的顺序

在MySQL中,alter table语句也可以同时修改字段的名称顺序,其基本语法如下

alter table 表名 modify pName1 proptype first|after pName2
  • pName1参数为所要调整顺序的字段
  • first参数表示将字段调整到表的第一个位置
  • after pName2参数表示将字段调整到pName2字段位置之后

六、表约束

完整性约束条件是对字段进行限制的 ,要求用户对该属性进行的操符合特定的要求,如果不满足完整性的约束条件,数据库系统将不再执行 用户的操作,MySQL中基本的完整性约束条件如表所示

约束条件说明
primary key主键约束,标识该属性为该表的主键
foreign key标识该属性为该表的外键,是与之联系的某表的主键
not null标识该属性不能为空
unique标识该属性是唯一的
auto_increment标识该属性的值自动增加
default为该属性设置默认值

1. 设置该属性的非空约束

当数据库表中的某个字段不喜欢设置为Null时,则可以使用非空约束进行设置,其语法形式如下

create table 表名(
字段名 字段类型 not null)
//键表后添加约束
alter table 表名称 modify 字段名 数据类型 not null;
//删除约束
alter table 表名称 modify 字段名 数据类型;#去掉not null,相当于修改某个非注解字段,该字段允许为空

2. 设置表字段的默认值

为字段设置默认值,当为数据库表中插入一条新纪录时,如果没有为某个字段赋值,那么数据库系统会自动为这个字段插入默认值,其语法形式如下

create table 表名(
字段名称 字段类型 default 默认值
)

3. 设置表字段唯一标识

当数据库表中某个字段的内容不允许重复时,可以使用唯一约束来进行设置,其语法形式如下

create table 表名(
	字段名称 字段类型 unique,
)

4. 设置表字段的主键约束

主键是表的一个特殊字段,该字段唯一的标识该表中的每条信息,主键满足的条件就是主键必须是唯一的且是非空,主键可以是单一的字段也可以是多个字段的组合

  1. 单个字段语法规则如下
    create table 表名(
    字段名称 字段类型 primary key
    )
    
  2. 多字段主键:主键是由多个属性组合而成,在属性定义之后统一设置主键,语法如下
    create table 表名(
    字段1,字段类型1,
    字段2 ,字段类型2....
    [constraint pk_name] primary key(字段1,字段2)
    ) 
    

5. 设置表字段值自动增加

auto_increment是MySQL唯一扩展的完整性约束,当为数据库表插入新纪录时,字段上的值会自动生成唯一的ID,在具体设置auto_increment约束时,一个数据库表中能有一个字段使用该约束,该约束的数据类型必须是整数类型,由于设置auto_increment约束后悔生成惟一的ID,因此该字段经常会同时设置成PK约束,其语法形式如下

create table 表名(
字段名 字段类型 auto_increment
)

6. 设置表字段的外键约束

  1. 外键(foreign key)是表的一个特殊字段,外键约束用于保证多个表(通常为两个表)之间的参照完整性,即构建与两个表的字段之间的参照关系
  2. 设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定,
  3. 在具体设置外键约束时,设置外键约束的字段必须依赖于数据库已经存父表的主键
  4. 其语法形式如下

  CREATE TABLE table_name(
                字段名 数据类型 ,
                字段名 数据类型 
                .......
               [CONSTRAINT <外键约束名>] FOREIGN KEY (从表字段),从表字段2 ,.....REFERENCES <主表表名> <主表字段 [ ,主表字段2......] >
 
    );

七、综合示例——创建一个学籍数据库和学生信息表

  1. 在数据库school中创建一个student表,student表的内容如下
字段名字段描述数据类型主键外键非空唯一自增
id编号int(4)
num学号int(10)
name姓名varchar(20)
gender性别varchar(4)
birthday出生日期datetime
address家庭住址varchar(50)
grade年级varchar(4)
class班级varchar(10)
  1. 将student表的name字段的数据类型改成varchar(25)
  2. 将字段address的位置改到字段gender之后
  3. 将字段num改名为stuid
  4. 在student表中增加名为nationality的字段,数据类型为varchar(10)
  5. 将表student的名称改为studentTab

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

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

相关文章

Godot4节点树右键菜单添加自定义选项

前言 查看godot的源码推荐使用在线版vscode直接从github上看。&#xff08;直接把网址的com改成dev即可&#xff09; 重点查看以下源码 scene_tree_dock.h scene_tree_dock.cpp 开始 tool extends EditorPluginvar window var scene_menustatic func find_child_by_class(no…

OneDrive同步角标消失 - 解决方案

问题 在电脑端使用OneDrive时&#xff0c;文件管理器OneDrive文件夹内的文件会在左下角显示同步状态&#xff0c;如下图。若没有显示同步角标&#xff0c;则此功能出现异常&#xff0c;下文介绍如何显示同步角标。 值得一提的是&#xff0c;同步角标只起到显示作用&#xff0…

secure CRT 颜色主题 系统间拷贝

文章目录 颜色主题如何切换 SecureCRT 颜色主题如何新建SecureCRT 颜色 主题如何拷贝我的颜色主题,主题名为pic VIM系统间拷贝vim中 ubuntu 拷贝 到 win1. 确保 ubuntu 上的 vim 支持 clipboard 特性2. 在 ~/.vim/vimrc 中添加设置3. vim中 win拷贝到ubuntu SecureCRT 关键字高…

STM32实现基于RS485的简单的Modbus协议

背景 我这里用STM32实现&#xff0c;其实可以搬移到其他MCU&#xff0c;之前有项目使用STM32实现Modbus协议 这个场景比较正常&#xff0c;很多时候都能碰到 这里主要是Modbus和变频器通信 最常见的是使用Modbus实现传感器数据的采集&#xff0c;我记得之前用过一些传感器都…

pg事务:隔离级别历史与SSI

事务隔离级别的历史 ANSI SQL-92定义的隔离级别和异常现象确实对数据库行业影响深远&#xff0c;甚至30年后的今天&#xff0c;绝大部分工程师对事务隔离级别的概念还停留在此&#xff0c;甚至很多真实的数据库隔离级别实现也停留在此。但后ANSI92时代对事物隔离有许多讨论甚至…

队列的实现(附含两道经典例题)

&#x1f349;文章主页&#xff1a;阿博历练记 &#x1f4d6;文章专栏&#xff1a;数据结构与算法 &#x1f68d;代码仓库&#xff1a;阿博编程日记 &#x1f365;欢迎关注&#xff1a;欢迎友友们点赞收藏关注哦&#x1f339; 文章目录 &#x1f33e;前言&#x1f3ac;队列&…

探索Windows CMD命令的经典应用:实用技巧大揭秘,值得收藏

文章目录 导语&#xff1a;第一部分&#xff1a;CMD命令基础1. ipconfig&#xff1a;获取网络配置信息2. ping&#xff1a;测试网络连接3. dir&#xff1a;查看目录内容4. telnet&#xff1a;远程登录和测试网络服务 第二部分&#xff1a;进程管理5. tasklist&#xff1a;查看正…

10-Docker发布微服务

文章目录 搭建SpringBoot项目发布微服务项目到Docker容器 搭建SpringBoot项目 搭建一个简单的SpringBoot项目&#xff1a; 创建maven工程&#xff0c;pom为&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://m…

【Java多线程案例】单例模式

本期讲解单例模式的饿汉模式与懒汉模式&#xff0c;以及如何解决懒汉模式造成线程的不安全问题。 目录 什么是单例模式&#xff1f; 1. 饿汉模式 2. 懒汉模式 2.1 懒汉模式单线程版 2.2 懒汉模式多线程版 3. 解决懒汉模式不安全问题 3.1 保证原子性 3.2 防止指令重排序…

MAC移动硬盘无法识别解决方案(超详细图文教程)

目录 步骤1&#xff1a;先找到外接移动硬盘&#xff0c;在 Mac “终端”执行命令 步骤2&#xff1a;加载移动硬盘&#xff0c;可以在终端执行以下两个命令之一 步骤3&#xff1a;终止后台自动执行的“磁盘修复进程” 步骤4&#xff1a;手动执行磁盘修复命令 步骤5&#xf…

lwIP更新记01:全局互斥锁替代消息机制

从 lwIP-2.0.0 开始&#xff0c;在 opt.h 中多了一个宏开关 LWIP_TCPIP_CORE_LOCKING&#xff0c;默认使能。这个宏用于启用 内核锁定 功能&#xff0c;使用 全局互斥锁 实现。在之前&#xff0c;lwIP 使用 消息机制 解决 lwIP 内核线程安全问题。消息机制易于实现&#xff0c;…

基于Linux安装Docker

Docker官网&#xff1a;Docker Docs: How to build, share, and run applications | Docker Documentation 学习任何技术&#xff0c;一定要参考相应的官网学习&#xff0c;一定要参考官网学习&#xff01;&#xff01;&#xff01; 目录 一、环境准备 1.1 配置源 1.1.1 下载…

Vue+uniapp桃源婚恋交友APP 安卓小程序 nodejs java python

小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 开发模式&#xff1a;混合开发本文先提出了开发基于小程序的桃源婚恋交友APP系统的背景意义&#xff0c;然后通过功能性和非功能性分析阐述本系统的需求&#xff0c;然后进行系统设计。技术实现部分选择Jav…

c++ 11标准模板(STL) std::set(九)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…

vue参照企业微信日程写一个小组件

今天公司要求做日程 这体的话 和企业微信的日程功能挺想的 也没有找到特别好的工具 就直接自己手敲了一个 先看效果 因为样式使用 sass 写的 所以 项目中要引入 sass 感兴趣的 可以把代码拿去二开一下 <template><section class "skeletonPositioning"…

Java线程概述 (一)线程介绍

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1fa85;什么是程序 、进程、线程&#xff1f;&#x1fa85;线程的生命周期&#x1fa85;多线程&#x1fa85;守护者线程&#x1fa85;线程并行与并发&#x1fa85;死锁&#x1f…

机器学习项目实战-能源利用率 Part-4(模型构建)

博主前期相关的博客可见下&#xff1a; 机器学习项目实战-能源利用率 Part-1&#xff08;数据清洗&#xff09; 机器学习项目实战-能源利用率 Part-2&#xff08;探索性数据分析&#xff09; 机器学习项目实战-能源利用率 Part-3&#xff08;特征工程与特征筛选&#xff09; 这…

AList挂载工具安装搭建使用教程,快速访问多个网盘的资源(保姆级图文)

目录 1. 下载AList2. 命令行启动快速启动小技巧 3. 用户登录4. 添加阿里云网盘帐号5. 添加百度云网盘资源总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 软件功能&#xff1a;将多个网盘的资源聚合在一起&…

本地部署 privateGPT

本地部署 privateGPT 1. 什么是 privateGPT2. Github 地址3. 创建虚拟环境4. 部署 privateGPT5. 配置 .env6. 下载模型7. 将文件放入 source_documents 目录中8. 摄取所有数据9. 向本地文档提问 1. 什么是 privateGPT 利用 GPT 的强大功能&#xff0c;私密地与您的文档交互&am…

Flutter 笔记 | Flutter 中的路由、包、资源、异常和调试

路由管理 Flutter中的路由通俗的讲就是页面跳转。在Flutter中通过Navigator组件管理路由导航。并提供了管理堆栈的方法。如&#xff1a;Navigator.push和Navigator.pop Flutter中给我们提供了两种配置路由跳转的方式&#xff1a;1、基本路由&#xff0c; 2、命名路由 普通路…