MySQL学习之DDL操作

目录

数据库的操作

创建

查看

选择

删除

修改

数据类型

表的创建

表的修改

表的约束

主键 PRIMARY KEY

唯一性约束 UNIQUE

非空约束 NOT NULL

外键约束

约束小结

索引

索引分类

常规索引

主键索引

唯一索引

外键索引

优点

缺点

视图

创建

删除

修改

查看

优点

范式

第一范式

第二范式

第三范式

表与表的关系

1:1

1:N

N:N


数据库的操作

创建
create database 数据库名 charset utf8;
查看
show databases;
show create databases db;
select database();
选择
use 数据库名;
删除
drop database 数据库名;
修改
alter databases db1 charset utf8;

数据类型

image-20220505191209237

image-20220505191226792

表的创建

首先要对操作的数据有一个基础型的了解,

-- 学号 姓名 性别 出生日期 入学时间 专业 院系 创建时间 -- 学号 int

姓名 varchar

性别 char

出生日期 date

入学时间 date

专业 varchar

院系 varchar

创建时间 timestamp

create table t_student(
    sno int,
    sname varchar(40),
    gender char(1),
    birthday date,
    schooltime date,
    major varchar(255),
    department varchar(255),
    createtime timestamp
);

表的修改

-- 根据查询语句创建表
CREATE TABLE STU01 AS SELECT * FROM t_student;
-- 添加两列(一次alter table操作只能添加一列)
alter table t_student add loc timestamp default now();
alter table t_student add phone timestamp default now();
-- 删除一列
alter table t_student drop column phone;
-- 修改一列
alter table t_student modify major varchar(20);
-- 修改列名
alter table t_student change COLUMN  birthday birth DATE;
'''
如果数据类型不同,您需要相应地修改。
假设要将birthday列(原本是DATE类型)修改为VARCHAR(255)类型的birth列,修改的语句如下:
ALTER TABLE t_student CHANGE birthday birth VARCHAR(255);
在 MySQL 中,修改列名通常使用 CHANGE 关键字,而不是 RENAME 。
但需要注意的是,在某些数据库管理工具(如 Navicat 等)中,可能支持使用 RENAME COLUMN 来修改列名,但这并非是 MySQL 原生语法所支持的。
为了保证在纯 MySQL 环境中的兼容性和可移植性,建议使用 CHANGE 来修改列名。
'''
-- 修改表名
rename table t_student to t_s;
-- 删除一张表
drop table t_s;

表的约束

约束指的是我们创建的表,对数据的约束,而不是对创建人的约束

主键 PRIMARY KEY
  • 主键值必须唯一标识表中的每一行且不能为空NULL,即表中不可能存在有相同主键值的两行数据

  • 主键分为单字段主键和多字段联合主键

  • 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

    create table t_pk01(
        id int(11) primary key,
        name varchar(25),
        deptid int(11),
        salary float
    );
    ​
    create table t_pk02(
        tid int(11),
        cid int(11),
        salary float
    );
    ​
    -- ALTER TABLE 数据表名 ADD PRIMARY KEY(字段名);
    alter table t_pk02 add primary key(id);
    ​
    -- ALTER TABLE 数据表名 DROP PRIMARY KEY;
    alter table t_pk02 drop primary key;

唯一性约束 UNIQUE

列中的值可以为空但是不能相同

create table tb_unique01(
    id int(11) primary key,
    name varchar(22),
    phoneum varchar(11) unique,
    location varchar(50)
);
​
-- ALTER TABLE 数据表名 ADD CONSTRAINT 唯一约束名 UNIQUE(列名);
alter table tb_unique01 add
constraint t_unique01_unique_location
unique(location);
​
-- ALTER TABLE 表名 DROP INDEX 唯一约束名;
alter table tb_unique01 drop
index t_unique01_unique_location;

非空约束 NOT NULL

列中的值不能为null

CREATE TABLE tb_null01(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50)
);
​
-- ALTER TABLE 数据表名 CHANGE COLUMN 字段名 字段名 数据类型 NOT NULL;
-- 将 tb_null01 表中的 location 列的数据类型修改为 VARCHAR(50) ,并设置为不允许为空值。
ALTER TABLE tb_null01 
CHANGE COLUMN location location VARCHAR(50) NOT NULL;
​
-- ALTER TABLE 数据表名 CHANGE COLUMN 字段名 字段名 数据类型 NULL;
-- 再次修改 location 列,将其数据类型仍保持为 VARCHAR(50) ,但设置为允许为空值。
ALTER TABLE tb_null01 
CHANGE COLUMN location location VARCHAR(50) NULL;

外键约束

定义外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

  • 必须为主表定义主键。

  • 主键不能包含空值,但允许在外键中出现空值。即只要外键的每个非空值出现在指定的主表中,这个外键的内容就是正确的。

  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或唯一性键。

  • 外键中列的数目必须和主表的主键中列的数目相同。

  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

-- 1位老师对应N个学生 teacher表为主表,student表为外键表 tid为外键
create table t_teacher(
    tid int(10) PRIMARY KEY,
    tname VARCHAR(40)
);
CREATE table t_student(
    sid int(10) PRIMARY KEY,
    sname varchar(40),
    tid int(10),
    CONSTRAINT fk_teacher_student_tid FOREIGN KEY(tid) references t_teacher(tid) on delete cascade  
);
​
INSERT into t_teacher VALUES('001','唐老师');
INSERT into t_teacher VALUES("002",'杜老师');
INSERT into t_teacher VALUES('003','唐老师');
INSERT into t_student VALUES('111','图图','001');
INSERT into t_student VALUES('112','莉莉','002');
INSERT into t_student VALUES('113','小欧','003');
INSERT into t_student VALUES('114','麦吉','003');
INSERT into t_student VALUES('115','丁倩','003');
-- 错误数据,因为主表主键没有d
insert into student values('5','xiaohu','d');
​
-- 修改表
ALTER TABLE 数据表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名(列名);

索引

在MySQL中,索引(index)也叫做“键(key)”,它是存储引擎用于快速找到记录的一种数据结构。

索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对性能的影响就愈发重要。

索引优化应该是对查询性能优化最有效的手段。

-- CREATE INDEX indexName ON mytable(username); 
Create Index index_dept_dname on dept(dname); -- B-tree
Drop Index index_dept_dname on dept;
索引分类
常规索引

常规索引,也叫普通索引(index或key),它可以常规地提高查询效率。一张数据表中可以有多个常规索引。常规索引是使用最普遍的索引类型,如果没有明确指明索引的类型,我们所说的索引都是指常规索引。

主键索引

主键索引(Primary Key),也简称主键。它可以提高查询效率,并提供唯一性约束。一张表中只能有一个主键。被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:编号),主键的数据类型最好是数值。

唯一索引

唯一索引(Unique Key),可以提高查询效率,并提供唯一性约束。一张表中可以有多个唯一索引。

外键索引

外键索引(Foreign Key),简称外键,它可以提高查询效率,外键会自动和对应的其他表的主键关联。外键的主要作用是保证记录的一致性和完整性。

索引是数据库中一块独立的空间,专门存储索引值的一棵B-树,我们可以通过B-树快速的定位到要查找的数据

特别注意:尽量不要对重复数据的列添加索引,比如:性别

优点
  • 索引可以让MySQL快速地查找到我们所需要的数据,但这并不是索引的唯一作用。

  • 索引大大减少了MySQL服务器需要扫描的数据量。

  • 索引可以帮助服务器避免排序和临时表。

  • 索引可以将随机I/O变为顺序I/O。

缺点
  • 影响数据库的增删改速度

视图

MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。

行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图是动态生成的。

创建
-- CREATE VIEW <视图名> AS <SELECT语句>
-- <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
-- <SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。
CREATE VIEW v_swordsman AS
( SELECT tid, NAME FROM t_teacher ) UNION ALL
( SELECT sid, NAME FROM t_student );
删除
DROP VIEW IF EXISTS <视图名1> [ , <视图名2> …]
修改
ALTER VIEW <视图名> AS <SELECT语句>
-- <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
-- <SELECT 语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

查看
-- 查询视图的数据 
SELECT * 
FROM
v_swordsman
​
-- DESCRIBE 视图名;查看视图的列结构信息
DESCRIBE v_swordsman
​
-- SHOW CREATE VIEW 视图名;获取创建视图的具体定义语句
SHOW CREATE VIEW v_swordsman

优点

1) 定制用户数据,聚焦特定的数据

2) 简化数据操作

3) 提高数据的安全性

4) 共享所需数据

5) 更改数据格式

6) 重用 SQL 语句

范式

创建表需要遵循的规范

第一范式

【不可再分割原则】数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组

第二范式

【数据库中每一行数据必须依赖于主键】每一个行数据都要有主键,主键是一行数据的唯一性标识

第三范式

【非主键的列必须要全部依赖于主键】表中非主键的列要完全依赖于主键,不能出现部分属性依赖于其他属性,当出现传递依赖的时候要将非依赖于主键的列专门创建一张表进行管理

表与表的关系

为了维护两张表的关系,根据两张表的对应关系可以分为:

1:1

两张表中的数据 1条只和1条对应

关联方案:

让关联数据主键值相同

在一张表中存放另外一张表的主键

1:N

A表中的一条数据有可能对应B表中的多条记录。比如 1老师:N学生

关联方案

在N方的表中设计一个1方的主键列,也称之为外键关联

N:N

A表中的一条数据有可能对应B表中的多条记录,同时B表中的一条数据有可能对应A表中的多条记录

比如 1学生:N课程,1课程:N学生

关联方案

s学生表 c课程表

一般都会创建第三章表专门管理学生与课程的关系

sid,cid 作为联合主键管理信息

id ,sid ,cid 以ID作为这张表的单独主键

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

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

相关文章

四、网络层:数据平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

文章目录 零、导论0.1 网络层服务0.2 网络层的关键功能0.3 网络层&#xff1a;数据平面、控制平面0.4 传统方式&#xff1a;每一路由器&#xff08;Per-router&#xff09;控制平面0.5 传统方式&#xff1a;路由和转发的相互作用0.6 SDN方式&#xff1a;逻辑集中的控制平面0.7 …

Java每日一题(1)

给定n个数a1,a2,...an,求它们两两相乘再相加的和。 即&#xff1a;Sa1*a2a1*a3...a1*ana2*a3...an-2*an-1an-2*anan-1*an 第一行输入的包含一个整数n。 第二行输入包含n个整数a1,a2,...an。 样例输入 4 1 3 6 9 样例输出 117 答案 import java.util.Scanner; // 1:无…

(2024.12自用存档)Ubuntu20.04——DynSLAM运行命令

前面忘记记录了&#xff0c;大概记一下后面 看了很多大佬的文章&#xff08;感谢&#xff01;&#xff09;&#xff0c;包括但不限于以下参考文章&#xff1a; Ubuntu16.04编译dynslam总结-CSDN博客 ubuntu14.04 CUDA8.0 DynSLAM编译与运行-CSDN博客 【视觉SLAM十四讲】Pa…

【阅读笔记】Android AMS forcestop停止应用

根据这篇文章作的笔记 基于Android 12的force-stop流程分析_android forcestop-CSDN博客 在AMS中&#xff0c;停止指定的应用是一个常用的功能&#xff0c;在代码里可以看到 Override 6806 public void forceStopPackage(final String packageName, int userId) { 6807 …

uniapp连接蓝牙操作(蓝牙设备地锁)

介绍&#xff1a; 本文采用uni-app框架来创建一个简单的用户界面&#xff0c;用于搜索、连接和发送命令给蓝牙设备。 1.打开蓝牙适配器 function openBluetooth() {uni.openBluetoothAdapter({success() {uni.offBluetoothDeviceFound();// 监听新设备发现事件uni.onBlueto…

《拉依达的嵌入式\驱动面试宝典》—前言目录篇

《拉依达的嵌入式\驱动面试宝典》—前言&目录篇 你好&#xff0c;我是拉依达。 感谢所有阅读关注我的同学支持&#xff0c;目前博客累计阅读 27w&#xff0c;关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析&#xff08;持续更新&#xff09;-CSDN博客》已经是 Lin…

【博弈模型】古诺模型、stackelberg博弈模型、伯特兰德模型、价格领导模型

博弈模型 1、古诺模型&#xff08;cournot&#xff09;&#xff08;1&#xff09;假设&#xff08;2&#xff09;行为分析&#xff08;3&#xff09;经济后果&#xff08;4&#xff09;例题 2、stackelberg博弈模型&#xff08;产量领导模型&#xff09;&#xff08;1&#xff…

如何利用Python爬虫获得1688商品详情

在这个信息爆炸的时代&#xff0c;数据就像是一块块美味的奶酪&#xff0c;而爬虫就是我们手中的瑞士军刀。今天&#xff0c;我要带你一起潜入1688这个巨大的奶酪洞穴&#xff0c;用Python爬虫捞起那些香气四溢的商品详情。别担心&#xff0c;我们的工具箱里有各种各样的工具&a…

blender 制作莫比乌斯带

创建 Curve -> Cycle 在 Edit 模式下&#xff0c;选择&#xff1a; 选中两个点&#xff0c;按 delete 删除 Segment 如下选中&#xff1a; 选中最上面的点&#xff0c;然后按 E 将它拖到右边的点上。 按 R 旋转 90 度。 依次调整参数&#xff1a; 回到 Object 模式下&#x…

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制

从本节课程开始&#xff0c;我们将来介绍K8s安全框架&#xff0c;这是保障K8s集群安全比较关键的安全机制。接下来&#xff0c;让我们一起来探索K8s安全框架的运行机制。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; K8s安全框架&#xff1a;由认证、鉴权和准入控…

研华运动控制卡 (如PCI1245)单轴编辑路

问题描述: 单轴如何编辑路径&#xff1f; n 问题分析及处理办法– 步骤 在utility软件中&#xff0c;编辑路径和运行路径只能在多轴运动这个界面&#xff0c;而且&#xff0c;使用函数来加载路径Acm_GpLoadPath&#xff0c;也是需要多个轴 ​ 如果只运行一个轴&#xff0c;需…

LM芯片学习

1、LM7805稳压器 https://zhuanlan.zhihu.com/p/626577102?utm_campaignshareopn&utm_mediumsocial&utm_psn1852815231102873600&utm_sourcewechat_sessionhttps://zhuanlan.zhihu.com/p/626577102?utm_campaignshareopn&utm_mediumsocial&utm_psn18528…

ChromeOS 131 版本更新

ChromeOS 131 版本更新 1. ChromeOS Flex 自动注册 在 ChromeOS 131 中&#xff0c;ChromeOS Flex 的自动注册功能现已允许大规模部署 ChromeOS Flex 设备。与 ChromeOS 零接触注册类似&#xff0c;自动注册将通过组织管理员创建的注册令牌嵌入到 ChromeOS Flex 镜像中。这将…

electron打包linux环境

注意:新版的electron已经不支持在win上直接打包Linux的环境了,服务会卡住,会一直生成文件占用磁盘(我发现的时候占了我100G&#xff0c;而且文件夹很深&#xff0c;找了java代码while循环&#xff0c;好不容易删除的o(╥﹏╥)o) electron有一个专门打包的docker镜像&#xff0c…

【SAP FICO】物料分类账详述

系列文章目录 文章目录 系列文章目录前言一、必备基础1、标准价和移动平均价2、概念3、意义4、功能 二、工作原理三、差异的种类与来源1、采用S价可能产生的差异2、单层价格差异和多层价格差异 四、后台配置总结 前言 业务背景&#xff1a;中国会计准则规定&#xff0c;对存货…

电脑文档损坏:原因剖析和修复方法

在使用电脑的过程中&#xff0c;许多用户可能会遇到文档突然提示损坏、无法打开的情况。这种情况的发生往往让人感到困惑&#xff0c;特别是当并未进行任何明显错误操作时。以下是一些常见的原因以及应对方法。 一、文档损坏的常见原因 1、非人为的异常操作&#xff1a; 在编…

使用国内镜像网站在线下载安装Qt(解决官网慢的问题)——Qt

国内镜像网站 中国科学技术大学&#xff1a;http://mirrors.ustc.edu.cn/qtproject/清华大学&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/qt/北京理工大学&#xff1a;http://mirror.bit.edu.cn/qtproject/ 南京大学&#xff1a;https://mirror.nju.edu.cn/qt腾讯镜像&…

活动预告|云原生创新论坛:知乎携手 AutoMQ、OceanBase、快猫星云的实践分享

近年来&#xff0c;云原生技术迅猛发展&#xff0c;成为企业数字化转型的关键动力&#xff0c;云原生不仅极大地提升了系统的灵活性和可扩展性&#xff0c;还为企业带来了前所未有的创新机遇。 12 月 28 日 知乎携手 AutoMQ、OceanBase 和快猫星云推出“云原生创新论坛”主题的…

02-2.python入门语法一变量与数据类型2

四、Python 整数数据类型 &#xff08;一&#xff09;整数的表示方式 1. 十进制表示 十进制是我们在日常生活中最常用的数字表示形式&#xff0c;由 0 到 9 这十个数字排列组合而成。 2. 二进制表示 二进制数由 0 和 1 这两个数字组成&#xff0c;在 Python 中&#xff0c;…

如果在 Swift 数组中寻找最大相邻差值的线性时间算法

文章目录 摘要问题描述解决方案Swift 代码实现代码解析测试用例及结果时间复杂度空间复杂度总结 摘要 本文探讨如何在未排序的数组中&#xff0c;通过线性时间算法找到排序后相邻元素之间的最大差值。我们采用桶排序的思想&#xff0c;给出一个高效的 Swift 实现&#xff0c;并…