初始MySQL

news2025/2/23 12:57:41

目录 

一、什么是数据库

二、SQL分类

三、库的操作

四、表的操作

五、数据类型

六、表的约束


什么是数据库

存储数据用文件就可以了,为什么还要有数据库?

文件保存数据有以下几个缺点:

文件的安全性问题
文件不利于数据查询和管理
文件不利于存储海量数据
文件在程序中控制不方便
理解数据库
软件角度
有了数据库,用户或用户程序能更方便的数据管理!
数据库也是用文件的方式进行数据保存的
数据库中直接和文件打交道的,是数据库的存储引擎!

文件角度

如下图,本来我们如果要对文件中的数据进行增删改查,就得自己去找文件并增加或修改数据的,

有了数据库之后,就可以交给它来做,我们只需要对数据库做一些处理即可!

我们下载的数据库就是图中的mysql和mysqld,即客户端与服务器,mysql是CS模式,在本地访

问时:mysql 127.0.0.1 3306,3306是端口号,127.0.0.1是本地IP地址

mysql或者数据库属于应用层,需要我们自己安装,底层一定是直接或间接访问OS的文件接口

数据库中的库+表全部都会在该路径下!

服务器、数据库、表之间的关系

所谓的创建数据库,本质就是在Linux下创建一个目录

所谓的创建数据库表,本质就是在特定目录下创建特定的文件!

数据的逻辑存储

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、
Windows、Mac和Solaris!
SQL分类
DDL:数据定义语言,用来维护存储数据的结构代表指令: create, drop, alter
DML:数据操纵语言,用来对数据进行操作代表指令: insert, delete,update,DML中又单独
分了一个DQL,数据查询语言,代表指令: select
DCL:数据控制语言,主要负责权限管理和事务代表指令: grant,revoke,commit
为什么会有不同的SQL分类?
因为使用SQL的人,它的需求是不一样的!
MySQL的核心就是插件式存储引擎,支持多种存储引擎!
库的操作
创建数据库
create database db_name;
创建一个utf8字符集的数据库
create database db2_name charset=utf8;
创建一个使用utf字符集,并带校对规则的数据库
create database db_name charset=utf8 collate utf8_general_ci;
校对规则:比如当我们取数据的时候,以什么样的方式取结果是不一样的,而校对规则就类似于这
样!!!
如下图,两种不同的校对规则,查询的结果不一样

显示创建数据库的详情

数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字

注意:下图中的/*...*/不是注释,表示当前mysql版本大于4.01版本,就执行这句话!

修改数据库

alter database db_name 新的字符集或校对规则;

对数据库的修改主要指的是修改数据库的字符集,校验规则,数据库名也能改,最好别改!

如下图,修改了字符集

删除数据库

drop database db_name;

查看连接情况 

show processlist;

表的操作

创建表,如下图,红色框中的可不带!fifield 表示列名,datatype 表示列的类型

注意:不同的存储引擎,创建表的文件不一样,如下图,users.frm:表结构,users.MYD:表数

据,users.MYI:表索引

查看表结构,desc table_name

修改表结构

建议:表结构最好不要修改!!!

添加某一列

ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...);
如下图,在id列之后添加sno列
注意:没有before!!!

修改某一列

ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column datatype]...);

删除某一列

ALTER TABLE tablename DROP (column);

修改表名

alter table users rename to employee;
注意:to可以省略!!!
修改列名
alter table employee change name xingming varchar(60);
删除表
drop table table_name;
数据类型
数据类型的分类
数值类型:BIT(M),TINYINT [UNSIGNED],INT [UNSIGNED],FLOAT[(M,D)]  [UNSIGNED],
DECIMAL(M,D) [UNSIGNED]
文本、二进制类型:CHAR(SIZE),VARCHAR(SIZE),TEXT
时间日期:DATE/DATETIME/TIMESTAMP
String类型:ENUM,SET
当我们进行插入的时候,如果数据越界(插入了不符合对应数据类型范围的)数据,此时sql直接终
止,即数据类型本质其实是一种约束!!!
数值类型
TINYINT
有符号的范围是-128~127,默认有符号,如下图,当越界时直接报错了!
无符号的范围是0-255,如下图
注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下!
BIT
bit[(M)] :位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1
如下图,在插入10的时候,a列未显示,在插入65的时候,却显示了,这是因为bit字段在显示时,
是按照ASCII码对应的值显示,而ASCll码表的有些符号是不可打印的!
INT
有符号的范围是-2^31~2^31-1,无符号的范围是2^32-1
FLOAT
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
如下图,float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入
float(4,2) unsigned,范围是0~99.99
decimal 
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
decimal整数最大位数m为65,支持小数最大位数d是30,如果d被省略,默认为0,如果m被省
略, 默认是10,最好不要使用默认的!
decimal和float差不多,无论是有符号的,还是无符号的。而区别在于表示的精度不一样,
decimal 更精确
建议:如果希望小数的精度高,推荐使用decimal
字符串类型
CHAR
char(L):固定长度字符串,L是可以存储的长度,单位为 字符 ,最大长度值可以为255

如下图,char(3),表明可以存储三个字符,可以是字母或者是汉字,但不能超过3个

VARCHAR

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

varchar括号内的len有多大,与编码密切相关!

varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效
节数是65532
utf8时,是65532/3=21844,一个字符占用3个字节;gbk时,是65532/2=32766,一个字符占用2
个字节!
CHAR与VARCHAR的区别
类似于string与char str[64],一个定长的,确定了空间,string则是你需要多少,就给你多少空间
如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去
定长的磁盘空间比较浪费,但是效率高;变长的磁盘空间比较节省,但是效率低
定长的意义是,直接开辟好对应的空间;变长的意义是,在不超过自定义范围的情况下,用多少,
开辟多少

日期和时间类型

date :日期 'yyyy-mm-dd' ,占用三字节
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime完全一致,占用
字节
如下图,时间戳没有填,它显示的是插入数据的时间

 如下图,在更新日期后,时间戳也跟着变了,只有时间日期不变!

如下图,我们填的不完整时,在一定程度上能够补齐;也有可能会报错!

enum 

枚举,“单选”类型,enum('选项1','选项2','选项3',...);

实际存储的其实是数字,1,2,3,....最多65535个,所以可以插入数字,来达到我们想要的效果,但

不建议这么做,最好还是插入男、女等直观上的字

set

set:集合,“多选”类型,set('选项值1','选项值2','选项值3', ...);
也可以通过数字来插入,只不过和枚举不一样的是,它是按bit位来的,类似于位图,比如插入3,
3的二进制是0011,第一个和第二个bit位为1,就会把网球和篮球都插入进去
如下图,在查找时,=号是严格查找的,而如果我们要的是包含某一个事物的全部拥有者,就要用
到find_ in_ set函数

 

如下图,就把全部喜欢网球的都找出来了!

表的约束

mysql是和数据打交道的,mysql一定要尽量保证数据不要出现"偏差",所以mysql为了让自己的

结构里面的数据完整性一致性非常强,mysql是要给我们提供强约束的!!!

空属性

null(默认的)和not null(不为空),实际开发时,尽可能保证字段不为空,因为数据为空没办法参
与运算!
在MySQL中,null和0是不一样的,null表示不存在!
例如:如果班级没有名字,你不知道你在哪个班级,如果教室名字可以为空,就不知道在哪上课,
这样就要求我们在创建表时,班级和教室名,不能为null,必须插入数据
默认值
某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户
可以选择性的使用默认值
如下图,在not nll和default同时存在,且不给该列插入数据时,会使用default,忽略not null,
最好不要同时有not null和default!
comment
没有实际含义,只是对列进行说明,有点类似于C语言的注释
如下图,desc查看表结构,是无法看到comment写的说明的,需要show查看创建表的详情
zerofill
我们前面创建int类型的列时,查看表结构会是int(11),就显得很奇怪,其实没有zerofifill这个属
性,括号内的数字是毫无意义的!
如下图,在添加了zerofill后,如果数字的宽度不够int括号内的值,它会自动补齐
如下图,在MySQL中实际存储的还是原来插入的值!
主键
数据库存入数据不是唯一目的,也要方便提取!一般而言,要求数据库表中的记录,有一个特定的
唯一标识,标志唯一性!
主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能
有一个主键;主键所在的列通常是整数类型
如下图,设置主键后,该列会自动设为不能为空!
删除主键
alter table 表名 drop primary key;
添加主键
alter table 表名 add primary key(属性列)
如下图,如果你要在某一列添加主键时,即给整个表添加主键,那该列就一定不能有重复值,否则
不能添加
复合主键
如果有多个字段作为主键,可以使用复合主键!
如下图,id与course一起才算作主键!
如下图,只有当插入的数据与表中的数据id与course同时相同时才会报错,无法插入!
自增长
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的
大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键
自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长
如下图,最大值+1增长!
如下图,某一列要设为自增长,就必须是具有唯一性属性列!
唯一键
唯一键所在的列可以为null!!!
如下图,在给id设为unique后,就不能插入重复的id值了!设为unique的属性列可以为NULL,这
也是与主键最大的区别,而 下图可以重复插入NULL,则是因为NULL表示不存在,而不存在就没
有比较,也就谈不上重复了!!!
如下图,在给设为唯一键的属性列设为不能为null后,就直接变为了主键了!
主键与唯一键
主键和唯一键并不冲突!在一张表中可以有一个主键,也可以同时具有唯一键!
表其实就是MySQL级别的"类or结构体对象"的集合,表中保存的其实就是某些场景下的属性字
段!
主键不是设置了主键属性,你才成为主键的,而是对应的属性被选择成为主键!而没有成为主键属
性,但是依旧需要唯一性的列属性,所以就有了unique键,这是因为数据库本身是一个对数据约
束非常严格的技术!!!
需要具有唯一属性的列:比如身份证号 码,电话号码,QQ号等等,不需要具有唯一性的列有姓
名,年龄等等
外键
如下图有两张表,这两张表通过class_id关联起来,class_id在语义上,叫做外键,class_id为主
键属性列的表被称为主表,另一个则被称为从表,如下图中的班级表为主表,学生表为从表!
如果我们要在学生表中插入一个学生,信息为id:102,name:王五,class_id:30,但是显然
是不能插入的,因为班级表中没有这个班级;如果我们要删除20班,java大神班,也无法删掉,因
为该班级还有学生!!!

通过外键产生关系的表,除了在逻辑上要有关联,被称为外键;mysql在操作上也要维护这种逻辑

关系的正确性,也被称为外键约束!

如下图,必须先创建主表,再创建从表,顺序不能颠倒! 

如下图,得Class表中有班级,才能插入这些班级的学生;同样,得Stu中没有某一班级的学生

了,才能在Class表中删除该班级!

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

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

相关文章

电脑视频怎么录制?好用的电脑录屏方法

在日常使用电脑的时候,很多小伙伴经常会遇到需要录制电脑视频的时候。但网上各种眼花缭乱的电脑录屏方法,很多小伙伴看了表示自己根本没有学会。今天就给大家分享2个简单好用的电脑录屏方法,看完后轻松掌握电脑录屏。 一.使用Wind…

主成分分析法在图像压缩和重建中的应用研究-含Matlab代码

目录一、引言二、主成分分析法概念及性质2.1 概念2.2 性质三、计算步骤3.1 计算相关系数矩阵3.2 计算特征值与特征向量3.3 计算主成分贡献率及累计贡献率3.4 计算主成分载荷3.5 各主成分的得分四、图像压缩与重建实验分析五、参考文献六、Matlab代码获取一、引言 主成分分析法…

【附源码】Python计算机毕业设计网上购物平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

最火后台管理系统 RuoYi 项目探秘,之二

上篇中,我们初步观察了 RuoYi 的项目结构,并在最后实际运行起了项目。我们也发现了作者不好的代码习惯,作为反例,我们应该要养成良好的编码习惯。本篇开始,我们会按照 Web 界面逐一对具体子项目的实现的功能进行探秘。…

Qt使用7z压缩和解压示例(支持文件夹递归、多文件不同位置)

1,简介 Qt自带的压缩处理类功能不太完善,也不支持中文路径。 这是我封装好的一个Qt调用7z处理压缩解压的工具类 ZipAPI,提供了几个简单易用的接口。 写压缩解压代码从此非常方便快捷! 支持中文路径,支持常规的压缩解…

Cell:水平基因转移在昆虫中广泛存在,增强鳞翅目雄性昆虫求偶行为

期刊:Cell 影响因子:66.85 发表时间:2022年8月 一、研究背景 昆虫起源于约4.8亿年前,是地球上最繁盛的动物类群,已被描述种超过100万,占所有动物物种50%以上。这个古老的动物类群在…

插画、插图网站,免费(商用)

本期分享5个高质量插画网站,免费可商用,设计必备,建议收藏!1、Undraw https://undraw.co/illustrationsUndraw是一个扁平风格插画图库,里面有大量的插画,可以支持在线更改配色,网站提供免费下载…

【JavaSE】类和对象(下)(访问限定符 包的概念 导入包中的类 自定义包 包的访问权限控制举例 常见的包 实例内部类 静态内部类 局部内部类 对象的打印)

文章目录六、 封装6.1 封装的概念6.2 访问限定符6.3 封装扩展之包6.3.1 包的概念6.3.2 导入包中的类6.3.3 自定义包6.3.4 包的访问权限控制举例6.3.5 常见的包七、内部类7.1 内部类7.1.1 实例内部类7.1.2 静态内部类7.2 局部内部类7.3 匿名内部类八、对象的打印六、 封装 6.1 …

人工智能-线性回归2--房价预测、欠拟合过拟合、正则化、模型保存加载

7,案例:波士顿房价预测 回归性能评估MSE from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression,SGDRegressor from sklearn.meyrics import mean_squa…

详解PHP解决swoole守护进程Redis假死 ,mysql断线重连问题

详解PHP解决swoole守护进程Redis假死 ,mysql断线重连问题最近公司有个项目,要举办一个线上活动,我这边负责提供接口记录用户访问记录,与操作记录,由于活动参与人数可能比较多,为了不影响正常业务运行&#…

安全性归约(游戏)

文章目录基于游戏的安全性定义归约中的概率关系某事件发生某事件不发生互斥事件基于游戏的安全性定义 在将攻击 Γ\GammaΓ 的算法 A′AA′ 归约到攻击 Π\PiΠ 的算法 AAA 时, 让 A′AA′ 根据 ChΓCh_\GammaChΓ​ 提供的信息,为 AAA 模拟出同分布的 …

股票自动下单接口够接入多种股票数据源吗?

很多的股票交易接口在原先只能接入行情的CTP程序,那么股票自动下单接口现在可以通过openctp提供的CTPAPI,可以接入到多种多样的股票数据源!但是目前由于大多的股票交易接口是受到监管限制的就很难接入实盘,那么股票自动下单接口通…

知心世界姐王瑞平:谷传民与大衣哥朱之文是沟通问题不是人品问题

大衣哥和谷传民的官司走到现在,互联网上面也出现了两大阵营对垒,一方面是大衣哥的粉丝,旗帜鲜明地支持自己的偶像,另一大阵营的人,则一心一意支持谷传民。虽然每个阵营都有自己的道理,但是毕竟都太过极端&a…

Virtual Data Augmentation: 虚拟数据扩增技术

听说过数据扩增(Data Augmentation),也听说过虚拟对抗训练(Virtual Adversarial Traning),但是我没想到会有人将其结合,谓之虚拟数据扩增(Virtual Data Augmentation)。这…

CANoe诊断测试

诊断协议那些事儿 本文为诊断协议那些事儿专栏文章,当我们在开发工程中越来越多的需要使用到总线测试工具,其中包括BUSMASTER、周立功、PCAN、CANOE等,本文将使用德国Vector公司的CANoe介绍诊断测试的基本环境。 文章目录诊断协议那些事儿一…

Python编程从入门到实践 第五章:if语句 练习答案记录

Python编程从入门到实践 第五章:if语句 练习答案记录 练习题导航Python编程从入门到实践 第五章:if语句 练习答案记录5.1 一个简单示例5.2 条件测试5.2.1 检查是否相等5.2.2 检查是否相等时忽略大小写5.2.3 检查是否不相等5.2.4 数值比较5.2.5 检查多个文…

运行yolov5 v6遇到的问题

1. Arial.ttf无法在运行时下载的问题 可以选择用浏览器下载,然后拷贝到docker或者ubuntu下,创建服务器的http访问方式。 具体为: 1.1 下载文件 Arial.ttf 并拷贝到docker或者ubuntu下 1.2 在ubuntu下创建http访问方式: # 安装…

有限元仿真分析误差来源之边界条件,约束和point mass

导读:前不久,我在这里分享了一篇《有限元仿真分析误差来源之材料参数设置,小心为妙》的文章,引发了同行们的关注和讨论。在此感谢仿真秀平台讲师们的批评和指正,一起认真交流技术和进步。今天我将继续带来关于边界条件…

spring data jpa在mysql分页中的实例(一次访问同时获取数据和总数)

一、原生sql语句 mysql中语句如下 select SQL_CALC_FOUND_ROWS sn,max(count) as active_count from sn_state_changed where sn_year zz group by sn limit 0,10; select FOUND_ROWS() as total; 解释: SQL_CALC_FOUND_ROWS 供后面的查询总数sql语句使…

(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(1)

上一篇: (STM32)从零开始的RT-Thread之旅--GPIO 我使用的开发板是WeAct的H743板子,板子带一个0.96的SPI驱动的LCD,给的有现成的测试用例,看源码应该是ST的工程师写的ST7735的驱动,打算把这个驱动直接拿到RTT工程里面使…