数据库概论

数据库是指长期存储在计算机内有组织可共享的数据集合。数据库中的数据以及数据之间的关系按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并在一定的范围内可以被多个用户共享
数据模型:层次模型、网状模型、关系模型,据说下一代是对象模型
关系型数据库是建立在关系数据模型基础上的数据库,借助集合代数的概念和方法处理数据库中的数据,同时也是一个被组织成具有描述的二维表格,表格的实质就是装载数据项的收集器,这些表格中的数据能以不同的方式被存取或者重新召集,而不需要更新组织数据库的表格。
目前常见RDBMS主要有Oracle收费【运行稳定、性能优异、大型企业级应用开发首选】、MySQL免费【开源免费、体积小、速度快、适用于中小型企业应用开发】、DB2收费【速度快、可靠性好、适用于海量数据存储,主要用于在使用IBM组件时】、SQLServer【主要在.net应用】、Sybase【电信行业历史原因使用】
DBMS数据库管理系统
是位于用户和操作系统之间的一层数据管理软件。科学地组织和存储数据,高效地获取和维护数据
基础功能:数据定义功能DDL、数据操纵功能DML、数据库的运行管理、数据库的建立和维护功能
数据库特点:
数据库中的数据尽可能不重复,以最优化的方式为多种应用服务
数据结构独立于应用
对数据的CRUD由统一软件进行管理和控制DBMS
数据模型
数据模型从应用开发的角度上来说可以分为2个不同的层次
概念模型或者逻辑模型,从用户的观点来对数据和信息进行建模,可以使用ER图进行描述
E实体(矩形),属性列采用椭圆表示,采用无定向线连接实体和属性
R关系(菱形框),数据和数据之间的关系有三种:1:1、1:n或者n:1、n:m
容易出现的错误:不能分析出主外键(主键是标识属性,不可能有外键)
物理模型。在概念模型的基础上考虑各种具体的技术实现因素,进行数据库体系结构设计。需要确定所有的表和列,定义主外键,基于用户需求考虑范式的问题
数据库选型—SQL语句
关系模式—带表头【元数据】的二维表格。具体存储位置对用户透明
关系模型的特点建立在严格的数学概念之上【唯一】
实体和各类联系都用关系表示
数据的操纵对象是关系,返回结果也是关系
关系模型的存取路径对用户透明,优点在于数据独立性、高安全性,简化编程
缺点:存储路径对用户透明导致查询效率不如非关系型数据库
SQL
SQL结构化查询语言是一种数据库操作的非过程式编程语言,用于存取数据以及查询、更新和管理关系型数据库系统,一般脚本文件后缀为.sql
经过ANSI和ISO标准化组织结构进行标准化,但是各个数据库管理系统都对标准SQL规范进行了编改和扩充,扩展部分各个数据库不通用,标准部分通用
SQL的特点:
统合统一、高度非过程化
面向集合的操作方式
以同一种语法结构提供两种使用方法,命令行方式交互和嵌入主语言
语法简单,其中只有94个英文单词,核心功能只有6个单词【insert update delete select】
NoSQL
NoSQL泛指非关系型数据库,主要用于针对超大规模和高并发的社交SNS类型网站的解决方案
常见的NoSQL数据库有4种类型:
key-value数据库,使用hash表存储数据。例如Redis
列存储数据库,主要针对分布式的海量数据,例如HBase
文档型数据库,主要存储版本化的文档信息,例如MongoDB
图形化数据库,主要用于计算数据之间的关系,例如Neo4j
NoSQL适用场景
数据模型比较简单
需要灵活性很强的IT系统中
对数据库性能要求较高
不需要高度数据一致性
SQL vs NoSQL
复杂查询SQL数据库比较擅长
SQL数据库不适合分层次的数据存储,NoSQL可以很好的实现数据的分层次存储,更适合大数据
对于要求数据严格一致性的应用中SQL非常使用,而且稳定,能够保证数据操作的原子性和一致性;而NoSQL对事务的处理能力有限,一般保证最终一致性
SQL厂商支持,而NoSQL是社区支持
性能对比中,NoSQL明显优于SQL数据库,一般NoSQL都充分的利用系统的内存资源
NoSQL数据库开发方便,不用考虑数据关系和格式
MySQL数据库
MySQL使用的是SQL语句,体积小、速度快、免费开源的关系型数据库
MySQL可以支持6万多张表,约50亿行的企业级数据库应用
每个表可以最多支持64个索引,每个所以可以由1-16个列构成,最大索引宽度为为1000字节
正常字符串的比较不区分大小写
MySQL数据库最大限制取决于操作系统对文件大小的限制,不是MySQL内部限制
使用MySQL8
MySQL8比MySQL5.7快2倍
MySQL体系结构概述
MySQL是由SQL接口、解析器、优化器、缓存、存储引擎
1、客户端向MySQL服务器发送一个SQL语句
2、服务器首先检查缓存,如果命中则立刻返回存储在缓存中的结果,否则下一步
3、服务器首先进行SQL语句解析、预处理,再由优化器生成对应的执行计划
4、MySQL服务器根据执行计划,调用存储引擎的API执行查询
5、最后将查询结果返回客户端,同时缓存查询结果
MySQL基本使用
windows
1、下载https://dev.mysql.com/downloads/mysql/
MySQL本来是完全免费的产品,被Oracle收购后,现在分为3个不同的版本:
MySQL企业版,收费或者试用
MySQL社区版,免费的
MySQL高级集群版,收费
MySQL经典版,老版本,免费
在线安装
需要网络支持
选择安装类型,这里选择使用
选择需要安装的产品和特征
开始执行环境配置

绿色安装
解压压缩文件mysql-8.0.15-winx64.zip,将解压得到的目录可以移动到任何位置
执行初始化操作,首先进入mysql的bin目录,在cmd窗口中执行命令
mysqld --initialize --console
注意:如果data目录已经存在,则需要删除data目录后再执行命令
在执行初始化操作过程中会显示一个临时生成的口令
使用 mysqld --install 将mysql添加到系统服务中,默认当机器启动时会自动启动mysql服务
使用net start mysql启动数据库服务
使用命令 mysql -uroot -p 打开客户端连接已经启动的数据库服务,这里需要输入上面生成的临时口令
修改口令 alter user ‘root’@‘localhost’ identified with mysql_native_password by ‘新口令’
关闭服务器 net stop mysql
删除mysql系统服务 mysqld --remove
常用命令
启动客户端:在bin目录下 mysql -uroot -p123456
命令格式为: mysql -u用户名 -p口令 -P端口号 -h主机名称 。在实际应用中,不建议直接使用-p口令的这种格式
如果正常启动,则可以看到命令提示符 mysql>
如果需要在任意目录都可以打开客户端,则需要将bin的绝对目录添加到path系统环境变量中
查看所有的数据库 show databases;
注意information_schema、mysql、sys、performance_schema都属于系统数据库,不要直接操作这些数据库
切换当前数据库 use 数据库名称;
查看当前数据库下的所有数据表 show tables;
查看某个数据表的结构定义 desc 数据表名称;
放弃正在输入的命令 \c
显示命令清单 \h
退出客户端 \q ,也可以使用 exit 或者 quit
查看服务器的状态信息 \s
退出客户端 quit
SQL语句
在MySQL中可以将SQL分为4大类
DDL数据定义语言,create创建、alter修改、drop删除、truncate截断
DML数据操纵语言,insert插入、update修改、delete删除
DQL数据查询语言,select查询
DCL数据控制语言,grant授权、revoke回收权限
DDL数据定义语言
用于定义数据库对象的操作语句
数据库操作
创建操作
注意:DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成
语法规则 create database 数据库名称 default character set utf8 ,一般默认编码字符集为latin1
如果数据库创建成功,则自动在数据文件夹data下新增一个test目录
删除操作
语法规则 drop database 数据库名称;
查看所有数据库 show databases;
mysql中允许同时打开多个数据库,不同的数据库管理系统不一样
切换当前数据库 use 数据库名称;
查看当前操作的数据库
查看数据库的创建语句
create database test default character set utf8; – 创建数据库,名称为test,默认编码
字符集为utf-8
– 如果数据库已经存在,则再次创建会报错
create database if not exists test default character set utf8; – 如果test已经存在
则不执行创建操作,同时不会报错
drop database test; – 删除指定数据库;如果数据库不存在则报错
drop database if exists test; – 如果存在则删除,如果不存在也不报错
use test; – 如果数据库存在则切换到指定的数据库test下进行操作;如果不存在则报错
select database();
show create datbase test;
注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上“数据库名.”。
更改数据库字符集
默认系统数据库
系统数据库就是供DBMS使用的数据库,如果损坏则会导致DBMS无法正常启动,所以一般不建议直接操作
information_schema记录所有数据库和数据库中表的信息
mysql记录时区、权限之类的配置信息
sys保存和锁、统计相关的信息
performance_schema用于实现对运行过程的资源的使用情况的统计
test非系统数据库,仅供测试样例
数据表的操作
创建数据表基本语法: create table 数据表的名称(数据列的名称 数据类型 约束规则,…)engine=存储引擎名称 default charset utf8;
数据表创建完成,则会发现在data/test目录下出现一个文件tb_student.ibd
一般使用的存储引擎engine常见的有innodb和myisam两种,如果使用myisam则会创建两个文件,
1、.myd数据信息文件,其中包含表的数据;2、.myi索引信息文件,是用于提高查询效率的索引数据
查看表中的列定义 desc tb_student;
查看具体的列定义 show create table tb_student;
ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbk、utf8等
create table tb_student( – 这里可以加入if not exists表示不存在时才进行创建。注意在一个数据库中的表名称不允许重复。按照阿里的规范,要求基表名称必须使用【tb_表】
id bigint primary key auto_increment,
name varchar(20) not null,
sex boolean default 1 – 在mysql数据库中有一些属性数据类型的别名
) engine=innodb default charset utf8; – 实际上从MySQL5.5开始默认存储引擎就是innodb,但是一般建议还是添加上存储引擎的设置
标识符命名
数据库涉及的字符规范,注意不是语法规则,属于建议性质的规则
采用a-z英文字母、数字0-9和下划线_组成,共63个字符,不能出现其他字符,除非是注释不区分大小写
使用中文字符实际上是不会有语法错误的,但是不建议
一般命名长度不要超过30个字符的系统限制,变量名称由于需要使用@标识符,所以长度限制为29
数据库对象、变量的命名都采用英文字符,禁止使用中文命名,绝对不允许在对象名称中间出现空格
如果在命名过程中破坏规则实际上引入反引号就好,注意不是单引号 create table t 1 (id int);
小心保留字,尽量保证命名中不采用保留字,避免容易产生冲突
注意开发中字段名称和类型名称的一致性
数据类型
定义数据类型就是定义列,数据类型决定数据的特性
数据类型主要分为字符串类型,浮点书类型和定点数类型,日期类型以及二进制类型
数据类型在不同的存储引擎上表现不同
根据所采用的数据类型,需求和数据特性选择数据类型

SQL注释

一般在编写sql脚本文件时需要添加合理的注释信息
单行注释 select 1; #说明信息
select 1; – 说明信息
多行注释 /*开头 */收尾
数据类型
存储数据是处理数据的第一步 。只有正确地把数据存储起来,才能进行有效的处理和分析。否则只能是一团乱麻,无从下手。那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在MySQL中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
要先创建一个数据库,而不是直接创建数据表呢?
create table if not exists tb_student(
id bigint primary key auto_increment, – 列名称 数据类型 列级约束
username varchar(20) not null
– primary key(id) 表级约束
)engine=innodb default charset utf8;
类型名称 说明
tinyint 1B,取值范围-128到127
smallint 2B,取值范围为-32768到32767
mediumint 3B,取值范围为-8388608到8388607
int或者Integer 4B,取值范围为2e9
bigint 8B,取值范围为9e18
float 4B,单精度浮点型,取值范围3.4e38
double 8B,双精度浮点型,取值范围1.7e308,总位数不超过15位
decimal和numeric 采用定点存放浮点数,具体字节数取决于定义时设置的参数
因为从系统架构的层次上看,MySQL数据库系统从大到小依次是【数据库服务器、数据库、数据表、数据表的行与列】。
数据类型主要给列上添加域完整性约束。开发者设置列的数据类型后,DBMS会对添加的数据进行合法
性验证,如果不合法则报错,拒绝添加
数值型
5种整型 tinyint、smallint、mediumint、int和bigint,主要区别就是取值范围不同,还可以在类型前添加一个限制词unsigned,不允许添加负数
3种浮点型:不能精确存放float和double,可以精确存放decimal和numeric
unsigned设置列为无符号型,只能存放大于等于0的数据,没有负数。当使用无符号类型时取值范围由于没有负数部分,从而导致上限扩大一倍
可以在类型名后添加括号,其中包含一个正整数,例如int(5),这里的含义并不是要求只能存放5位长度的整数;含义是当进行查询时自动使用空格填充到5个长,如果真实数据长度大于5,则按实际输出
create table t3(id int unsigned);
mysql> insert into t3 value(-10); – 不允许存储负数
ERROR 1264 (22003): Out of range value for column ‘id’ at row 1
mysql> insert into t3 value(255); – 存储数据的上线扩大一倍
Query OK, 1 row affected (0.01 sec)
mysql> create table t4(id int(2));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t4 values(99999);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t4 values(9);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t4;
decimal和numeric作为字符串存储浮点数,可以实现浮点数的精确存储,并不是float和double种使用二进制浮点数存储。使用方法numeric(总位宽,小数位数),小数位数必须小于等于总位宽;小数位数最大值30,总位宽最大值为65,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽,
int和numeric
int类型不能保存小数位,存储小数时会自动进行四舍五入
mysql> create table t6(id int);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t6 values(99.99);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t6;
| id |
| 100 |
1 row in set (0.00 sec)
mysql> create table t7(id numeric);
Query OK, 0 rows affected (0.03 sec)
mysql> desc t7;
| Field | Type | Null | Key | Default | Extra |
| id | decimal(10,0) | YES | | NULL | |
mysql> create table t8(id int auto_increment,name varchar(20));
ERROR 1075 (42000): Incorrect table definition; there can be only one auto
column and it must be defined as a key
mysql> create table t8(id int primary key auto_increment,name varchar(20));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t8 values(null,‘yan1’);-- 插入数据时不指定插入的值或者设置插入值
为null则会自动添加一个自增值
Query OK, 1 row affected (0.01 sec)
mysql> insert into t8 values(99,‘yan1’); – 如果插入数据时不指定对应的值,则自增长
max(id)+1;如果指定对应的值,则自增效果失效
Query OK, 1 row affected (0.01 sec)
mysql> insert into t8(name) values(‘yan1’);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t8;
| id | name |
在使用AUTO_INCREMENT时,应注意以下几点:
1、AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。
2、设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为
UNSIGNED,这样序列的编号个可增加一倍。
3、AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分)。
AUTO_INCREMENT数据列必须具备NOT NULL属性。
4、AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号
是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。
当auto_incement达到上限后,再次申请下一个id时,得到的值保持不变。主键值重复报错
5、当进行全表删除时,MySQL AUTO_INCREMENT会从1重新开始编号。这是因为进行全表操作时,MySQL实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然后重建数据表。
如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以抑制
MySQL的优化:delete from table_name where 1;
可用last_insert_id()获取刚刚自增过的值。
unsigned禁用负值
zerofill如果查询显示时,实际数据小于指定位宽,则自动添加0值
| 1 | yan1 |
| 99 | yan1 |
| 100 | yan1 |
3 rows in set (0.00 sec)
mysql> create table t9(id int(5) zerofill);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t9 values(12);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t9;
| id |
| 00012 |
1 row in set (0.00 sec)
mysql> insert into t9 values(123456);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t9;
| id |
| 00012 |
| 123456 |
2 rows in set (0.00 sec)
default用于设置默认值
null是什么意思
null的意思为未知的数据,它既不是空字符串,不是任何一个具体的值;不能把任何值与一个null
值进行比较。因为null的意思是不确定的值。真正的null值比较必须使用特殊的运算符is null或者is
not null
mysql> create table t10(id int default 0,name varchar(20));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t10 values(11,‘yan1’);-- 指定对应的数据,则default无效
Query OK, 1 row affected (0.01 sec)
mysql> insert into t10 values(null,‘yan1’); – 指定对应的数据,则default无效,即
使设置的值为null
Query OK, 1 row affected (0.01 sec)
mysql> insert into t10(name) values(‘yan1’); – 只有不针对这个列进行数据插入时
default才能生效
Query OK, 1 row affected (0.00 sec)
mysql> select * from t10;
| id | name |
| 11 | yan1 |
| NULL | yan1 |
| 0 | yan1 |
3 rows in set (0.00 sec)
mysql> select null=null; – =表示等值比较
| null=null |
| NULL |
1 row in set (0.00 sec)
mysql> select null!=null; – 比较不相等
| null!=null |
| NULL |
1 row in set (0.00 sec)
mysql> select null is null;
| null is null |
| 1 |
1 row in set (0.00 sec)
mysql> select null is not null;
字符串类型
char(n)定长字符串,n值用于表示所允许的最大长度,取值范围0-255
长度限制不区分中英文,表示是允许最多存储多少个字符
使用length函数获取的是字节数,不是字符数。在utf-8编码种一个汉字占用3个字节
varchar(n)可变长度的字符串,n值取值范围为0-65535
实际存储多少个字符就占多少个位置,每个列所占用的长度根据具体内容变化
char和varchar
char属于定长,varchar属于变长。选择最基本的依据就是定长使用char,变长使用varchar
char允许的最大长度为255,varchar允许的最大长度为65535
如果存储的字符串长度变化不大,推荐优先考虑使用char,例如针对口令进行md5加密,固定长度
的行不容易产生碎片;对于长度很短的列,char的性能优于varchar,是因为varchar需要引入额外
一个或者两个字节存储字符串长度
char在计算种会自动去除空格;varchar不会去掉空格,但是进行字符串比较时,会去除空格后进
行比较;在插入数据时系统会自动去除字符串默认多余的空格
大对象类型Lob
大对象类型可以分为2大类:文本类型和二进制类型
BLOB是一个二进制大对象,可以容纳可变长度的数据,其中分为tinyblob、blob、
mediumblob、longblob。一般用于存储二进制数据,例如声音、图像、视频等
Text是一个文本大对象,可以容纳可变长度的数据,其中分为tinytext、text、mediumtext、
longtext,一般用于存储文本类型数据,例如小说、商品简介
| null is not null |
| 0 |
1 row in set (0.00 sec)
mysql> create table c2(id char(5));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into c2 values(“yan”);
Query OK, 1 row affected (0.01 sec)
mysql> insert into c2 values(“中国人民好”);
Query OK, 1 row affected (0.01 sec)
mysql> insert into c2 values(“中国人民好1”);
ERROR 1406 (22001): Data too long for column ‘id’ at row 1
create table t1(id varchar(20));
mysql> create table c9(id text);
Query OK, 0 rows affected (0.02 sec)
类型名称 允许的最大长度 说明
tinytext 0-255 短文本字符串
text 0-65535 长文本字符串
mediumtext 16M 中等长度的长文本字符串
longtext 4G 极大文本数据
tinyblob 0-255 不超过255个长的二进制串
blob 0-65535 二进制类型的长文本字符串
mediumblob 16M 中等长度的二进制长文本字符串
longblob 4G 极大二进制数据
两者之间的区别:
blob是二进制类型,可以容纳可变长度的数据,区分大小写;text是一个不区分大小写的blob
日期时间类型
特殊的时间是时间戳类型
mysql> create table c8(id blob);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into c9 values(“Abc”);
Query OK, 1 row affected (0.01 sec)
mysql> insert into c8 values(“Abc”);
Query OK, 1 row affected (0.01 sec)
mysql> select * from c9 where id=‘abc’;
| id |
| Abc |
1 row in set (0.00 sec)
mysql> select * from c8 where id=‘abc’;
Empty set (0.00 sec)
create table dt1(id date);
insert into dt1 values(‘1989-2-3’);
类型名称 说明 格式
date 日期类型,有效范围为1000-9999年,不包含时分秒 3B,yyyy-MM-dd
time
时间类型,有效范围为-838到838小时范围内,一般用
于表示时间值或者持续时间。不包含年月日 3B,HH:mm:ss
year 年份类型,有效范围1901到2155年 1B,yyyy
datetime
日期时间类型,其中包含日期和时间,可以精确到秒,有效范围为1000到9999年。具体存储时和时区无关。从MySQL5.6.4之后可以包含秒后的小数部分,精度最高为微妙(6位)非小数部分5B+小数部分0-3B,如果有小数部分则会随着小数位数变化,yyyy-MMdd HH:mm:ss
timestamp
时间戳类型,可以精确到秒,有效分为是1970到2038年,同时支持自动存储修改的时间,存储有时区数据,实际存储毫秒数。在MySQL 5.6.4及之后版本,可以将时间戳类型数据最高精确微秒,timestamp(N)N取值范围为0-6非小数部分4B+小数部分0-3B,默认显示格式YYYY-MM-dd HH:mm:ss
时间戳字段定义主要影响两类操作:

  1. 插入记录时,时间戳字段包含DEFAULT CURRENT_TIMESTAMP,如插入记录时未指定具体时间数据则将该时间戳字段值设置为当前时间
  2. 更新记录时,时间戳字段包含ON UPDATE CURRENT_TIMESTAMP,如更新记录时未指定具体时间数据则将该时间戳字段值设置为当前时间
  3. 当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE
    CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间
    系统函数now()可以获取系统的当前时间
    类型说明
    create table dt2(id timestamp default current_timestamp,name varchar(20));
    mysql> insert into dt3(name) values(‘yan1’);
    Query OK, 1 row affected (0.01 sec)
    mysql> select * from dt3;
    | id | name |
    | 2022-04-17 15:07:33 | yan1 |
    1 row in set (0.00 sec)
    select now();
    集合和枚举类型
    set集合类型,可以设置多个集合成员,允许从多个集合成员种选择多个数据进行插入enum枚举类型,可以设置允许选用的多个值,列只能赋予某个枚举成员值位类型bit(1)表示可以存储一个二进制位,只能存储0或者1,其中n的最大上限值为64bit(8)表示可以存储8个二进制位的值,取值范围为0到255
    总结
    定义数据类型就是定义列,数据类型决定数据的特性【域完整性】
    数据类型主要分为字符串类型、定点数和浮点数类型、日期类型、大对象类型【慎用】
    数据类型在不同的存储引擎上表现不同
    数据所采用的数据类型是根据业务需求和对应的数据类型特征进行选择,不建议使用过于复杂的数
    据类型
    完整性约束
    DBMS为了保证存储的数据都是完整有效的,避免存放垃圾数据,所以提供针对插入的数据进行检查。
    开发人员指定对应的规则,由DBMS负责检查,如果试图插入不合法的数据,则会自动报错,拒绝
    插入实际有6种约束,可以分为3大类完整性约束。有些老外的书种提出的是4种【域完整性】实体完整性,由主键约束实现参照完整性,由外键约束实现
    用户自定义完整性,由其他4种约束实现
    实际开发中除了主键约束外,其它约束一概不添加。其他的数据检查一般依赖应用程序实现,为了
    代码测试方便
    1、非空约束,指定列值不允许为空
    2、默认约束default
    create table set1(id int,hobby set(‘抽烟’,‘喝酒’,‘烫头’));
    insert into set1 values(1,‘烫头,抽烟’); – 没问题
    insert into set1 values(1,‘烫头,抽烟,扣脚’); – 报错,因为其中一个值不在set定义种
    insert into set1 values(1,‘抽烟,抽烟’);-- 实际上只插入一个值,也就是会自动去除重复值
    create table enum1(id int,sex enum(‘男’,‘女’,‘不确定’));
    insert into enum1 values(1,‘男’);
    insert into enum1 values(2,‘男,女’); – 报错
    create table t1(id int not null); --不允许id列值为null
    create table t2(id int null); – 允许id列值为null
    create table 3(id int);-- 允许id列值为null
    一般默认约束经常和非空约束一起使用,当不插入数据时,默认值生效
    3、主键约束,又叫做实体完整性,不允许数据重复存储
    主键可以唯一标识一行数据
    主键约束含义是非空、唯一
    使用InnoDB存储引擎时,如果数据表没有设置主键,那么Innodb会给该表设置一个不可见,长度为6字节的默认主键 row_id。Innodb维护了一个全局的dict_sys.row_id值,这个值,被所有无主键的数据表共同使用,每个无主键的数据表,插入一行数据,都会是当前的dict_sys.row_id的值增加1实row_id的值在存储时,数据长度为8字节,只不过Innodb只使用后6个字节。那么row_id的值,写到数据表中时就有一下两个特点:
    1.row_id写入表中的值范围,是从0-2^48-1。
    2.当row_id的值为2^48时,再进行数据插入,那么row_id的后6个字节的值,就全部为0了。
    也就是说,当row_id的值到了2^48次方-1后,再次插入数据,下一个值就是0,然后开始循环。不过和
    自定义主键不同的是,row_id标识的主键,没有唯一性约束,当插入数据的row_id值,在表中已经存在的话,那么写入的数据会"悄无声息"覆盖已存在的数据。表尽可能都要设置主键,主键尽量使用bigint类型,21亿的上限还是有可能达到的,比如魔兽,虽然说row_id上限高达281万亿,但是覆盖数据显然是不可接受的。
    4、唯一约束 unique
    不允许添加唯一性约束的列出现重复值
    可以没有null值约束,而且也不能针对null进行唯一性判定
    5、外键约束,又叫做参照完整性
    6、检查约束
    DDL表操作
    create table t1(id int not null default 0);
    create table t1(id int primary key,…);
    create table t2(
    id int not null,…
    primary key(id) – 注意这里的主键约束允许使用复合主键,多个列构成的主键
    );
    create table t1(id int unique,name varchar(20));
    insert into t1 values(1,‘zhangsan’);
    insert into t1(name) values(‘zhao4’);-- id为null
    insert into t1(name) values(‘zhao4’);-- id为null,两次null并不会报错
    insert into t1 values(1,‘li4’); – 报错
    创建操作
    快速创建一个表和另外一个表的结构相同,只是克隆表结构,不会克隆数据修改表结构,语法规则为 alter table 表名称 add/drop/modify 列名称 [类型 约束]修改列的名称删除表 drop table 表名称查看当前数据库种的所有表查看表结构
    查看创建表的sql语句
    create table tb_student(
    id bigint primary key auto_increment,
    name varchar(10) not null comment ‘说明信息’,
    birth date,
    sex boolean default 1,
    salary numeric(8,2)
    )engine=innodb default charset utf8;
    create table 新表名称 like 已经存在的旧表名称;
    alter table tb_student add class_name varchar(20) default ‘软件19’; – 新增列
    alter table tb_student drop column salary; – 删除指定列
    alter table tb_student modify class_name int; – 修改列定义时,要求已经存在的数据必须
    符合规则,否则修改失败。modify一般用于修改列的数据类型和长度,但是如果有数据则必须和目标类型匹配,否则修改失败
    alter table 表名称 change 旧有列名称 新列名称 类型 约束;
    drop table tb_student;
    drop table if exists tb_student;
    show tables;
    desc 表名称;
    show create table tb_student;
    其它操作
    重命名表 RENAME TABLE emp TO myemp;
    ALTER table dept RENAME [TO] detail_dept;
    清空表
    TRUNCATE TABLE语句:删除表中所有的数据、释放表的存储空间
    TRUNCATE TABLE detail_dept; TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚

SQL注释
一般在编写sql脚本文件时需要添加合理的注释信息
单行注释 select 1; #说明信息
select 1; – 说明信息
多行注释 /*开头 */收尾
数据类型
存储数据是处理数据的第一步 。只有正确地把数据存储起来,才能进行有效的处理和分析。否则只能是一团乱麻,无从下手。那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在MySQL中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
要先创建一个数据库,而不是直接创建数据表呢?
create table if not exists tb_student(
id bigint primary key auto_increment, – 列名称 数据类型 列级约束
username varchar(20) not null
– primary key(id) 表级约束
)engine=innodb default charset utf8;
类型名称 说明
tinyint 1B,取值范围-128到127
smallint 2B,取值范围为-32768到32767
mediumint 3B,取值范围为-8388608到8388607
int或者Integer4B,取值范围为2e9
bigint 8B,取值范围为9e18
float(n,m) 4B,单精度浮点型,取值范围3.4e38,其中n为总位宽,m为小数位数。要求n>=m,如果不定义nm则默认提供7-8位的有效数据double 8B,双精度浮点型,取值范围1.7e308,总位数不超过15位
decimal和numeric采用定点存放浮点数,具体字节数取决于定义时设置的参数。如果不设置位宽,则默认(10,0),总位宽最大65,小数位数最大30
因为从系统架构的层次上看,MySQL数据库系统从大到小依次是【数据库服务器、数据库、数据表、数据表的行与列】。
数据类型主要给列上添加域完整性约束。开发者设置列的数据类型后,DBMS会对添加的数据进行合法性验证,如果不合法则报错,拒绝添加
数值型
5种整型 tinyint、smallint、mediumint、int和bigint,主要区别就是取值范围不同,还可以在类型前添加一个限制词unsigned,不允许添加负数
3种浮点型:不能精确存放float和double,可以精确存放decimal和numeric
unsigned设置列为无符号型,只能存放大于等于0的数据,没有负数。当使用无符号类型时取值范围由于没有负数部分,从而导致上限扩大一倍
可以在类型名后添加括号,其中包含一个正整数,例如int(5),这里的含义并不是要求只能存放5位长度的整数;含义是当进行查询时自动使用空格填充到5个长,如果真实数据长度大于5,则按实际输出
create table t3(id int unsigned);
mysql> insert into t3 value(-10); – 不允许存储负数
ERROR 1264 (22003): Out of range value for column ‘id’ at row 1
mysql> insert into t3 value(255); – 存储数据的上线扩大一倍
Query OK, 1 row affected (0.01 sec)
mysql> create table t4(id int(2));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t4 values(99999);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t4 values(9);
Query OK, 1 row affected (0.01 sec)
decimal和numeric作为字符串存储浮点数,可以实现浮点数的精确存储,并不是float和double种使用二进制浮点数存储。使用方法numeric(总位宽,小数位数),小数位数必须小于等于总位宽;小数位数最大值30,总位宽最大值为65,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽,
int和numeric
int类型不能保存小数位,存储小数时会自动进行四舍五入
mysql> select * from t4;
±------+
| id |
±------+
| 99999 |
| 9 |
±------+
2 rows in set (0.00 sec)

mysql> create table t5(id numeric(5,3));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t5 values(99.999);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t5 values(-99.999); – 位宽统计中符号位不算
Query OK, 1 row affected (0.01 sec)
mysql> insert into t5 values(100); – 整数超出范围报错
ERROR 1264 (22003): Out of range value for column ‘id’ at row 1
mysql> insert into t5 values(9.1235); – 小数位数多余则自动四舍五入
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into t5 values(9.1234);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> select * from t5;
±--------+
| id |
±--------+
| 99.999 |
| -99.999 |
| 9.124 |
| 9.123 |
±--------+
4 rows in set (0.00 sec)

numeric可以保存小数位,如果小数位数为0,可以模拟得到int类型的存储效果。采用的实际存储
方式为字符串。查询效率远低于int
数值列的扩展属性
auto_increment一般用于主键【非键列不能使用】,可以实现该列的自动生成连续整数值
mysql> create table t6(id int);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t6 values(99.99);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t6;
±-----+
| id |
±-----+
| 100 |
±-----+
1 row in set (0.00 sec)

mysql> create table t7(id numeric);
Query OK, 0 rows affected (0.03 sec)
mysql> desc t7;
±------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±--------------±-----±----±--------±------+
| id | decimal(10,0) | YES | | NULL | |
±------±--------------±-----±----±--------±------+
1 row in set (0.00 sec)

mysql> create table t8(id int auto_increment,name varchar(20));
ERROR 1075 (42000): Incorrect table definition; there can be only one
auto column and it must be defined as a key
mysql> create table t8(id int primary key auto_increment,name
varchar(20));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t8 values(null,‘yan1’);-- 插入数据时不指定插入的值或者设置
插入值为null则会自动添加一个自增值
Query OK, 1 row affected (0.01 sec)
mysql> insert into t8 values(99,‘yan1’); – 如果插入数据时不指定对应的值,则自增长max(id)+1;如果指定对应的值,则自增效果失效
Query OK, 1 row affected (0.01 sec)
mysql> insert into t8(name) values(‘yan1’);-- 如果不向指定列插入数据,则
auto_increment生效
Query OK, 1 row affected (0.01 sec)
mysql> select * from t8;

在使用AUTO_INCREMENT时,应注意以下几点:【重点】
1、AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。
2、设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。
3、AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分)。AUTO_INCREMENT数据列必须具备NOT NULL属性。
4、AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。
当auto_incement达到上限后,再次申请下一个id时,得到的值保持不变。主键值重复报错
如果已经删除了部分数据,auto_increment仍旧从上次的值开始计数
5、当进行全表删除时,MySQL AUTO_INCREMENT会从1重新开始编号。这是因为进行全表操作时,MySQL实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然后重建数据表。
delete from 表名称;会删除表中所有数据,但是auto_increment仍旧按照以前的计数继续生成数据
需要auto_increment从头开始进行计数则需要使用 truncate table 表名称 删除数据
如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以抑制
MySQL的优化:delete from table_name where 1;
可用last_insert_id()获取刚刚自增过的值。
unsigned禁用负值
zerofill如果查询显示时,实际数据小于指定位宽,则自动添加0值
| id | name |
±----±-----+
| 1 | yan1 |
| 99 | yan1 |
| 100 | yan1 |
±----±-----+
3 rows in set (0.00 sec)

1 id int unsigned primary key auto_increment
mysql> create table t9(id int(5) zerofill);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t9 values(12);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t9;
±------+
| id |
±------+
| 00012 |
±------+
1 row in set (0.00 sec)
mysql> insert into t9 values(123456);

default用于设置默认值
default只有在不插入数据时生效,如果插入数据,即使插入null值,仍旧不生效
null是什么意思
null的意思为未知的数据,它既不是空字符串,不是任何一个具体的值;不能把任何值与一个null值进行比较。因为null的意思是不确定的值。真正的null值比较必须使用特殊的运算符is null或者is not null
Query OK, 1 row affected (0.01 sec)
mysql> select * from t9;
±-------+
| id |
±-------+
| 00012 |
| 123456 |
±-------+
2 rows in set (0.00 sec)

mysql> create table t10(id int default 0,name varchar(20));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t10 values(11,‘yan1’);-- 指定对应的数据,则default无效
Query OK, 1 row affected (0.01 sec)
mysql> insert into t10 values(null,‘yan1’); – 指定对应的数据,则default无
效,即使设置的值为null
Query OK, 1 row affected (0.01 sec)
mysql> insert into t10(name) values(‘yan1’); – 只有不针对这个列进行数据插入时default才能生效
Query OK, 1 row affected (0.00 sec)
mysql> select * from t10;
±-----±-----+
| id | name |
±-----±-----+
| 11 | yan1 |
| NULL | yan1 |
| 0 | yan1 |
±-----±-----+
3 rows in set (0.00 sec)

mysql> select null=null; – =表示等值比较
±----------+
| null=null |
±----------+
| NULL |
±----------+
1 row in set (0.00 sec)
mysql> select null!=null; – 比较不相等
±-----------+
| null!=null |
±-----------+

字符串类型
char(n)定长字符串,n值用于表示所允许的最大长度,取值范围0-255,如果不指定长度,则默认1长度限制不区分中英文,表示是允许最多存储多少个字符
使用length函数获取的是字节数,不是字符数。在utf-8编码种一个汉字占用3个字节
varchar(n)可变长度的字符串,n值取值范围为0-65535,如果不设置n值则报错实际存储多少个字符就占多少个位置,每个列所占用的长度根据具体内容变化
| NULL |
±-----------+
1 row in set (0.00 sec)
mysql> select null is null;
±-------------+
| null is null |
±-------------+
| 1 |
±-------------+
1 row in set (0.00 sec)
mysql> select null is not null;
±-----------------+
| null is not null |
±-----------------+
| 0 |
±-----------------+
1 row in set (0.00 sec)

mysql> create table c2(id char(5));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into c2 values(“yan”);
Query OK, 1 row affected (0.01 sec)
mysql> insert into c2 values(“中国人民好”);
Query OK, 1 row affected (0.01 sec)
mysql> insert into c2 values(“中国人民好1”);
ERROR 1406 (22001): Data too long for column ‘id’ at row 1
create table t1(id varchar(20));
具体的n值上限和所使用的编码字符集相关
mysql> create table t24(id varchar(1000000));
ERROR 1074 (42000): Column length too big for column ‘id’ (max = 16383); use
BLOB or TEXT instead
mysql> create table t24(id varchar(1000000)) default charset utf8;
ERROR 1074 (42000): Column length too big for column ‘id’ (max = 21845); use
BLOB or TEXT instead
mysql> create table t24(id varchar(1000000)) default charset latin1;
ERROR 1074 (42000): Column length too big for column ‘id’ (max = 65535); use
BLOB or TEXT instead

char和varchar
char属于定长,varchar属于变长。选择最基本的依据就是定长使用char,变长使用varchar
char允许的最大长度为255,varchar允许的最大长度为65535
如果存储的字符串长度变化不大,推荐优先考虑使用char,例如针对口令进行md5加密,固定长度的行不容易产生碎片;对于长度很短的列,char的性能优于varchar,是因为varchar需要引入额外一个或者两个字节存储字符串长度
char在计算种会自动去除空格;varchar不会去掉空格,但是进行字符串比较时,会去除空格后进行比较;在插入数据时系统会自动去除字符串默认多余的空格
大对象类型Lob
大对象类型可以分为2大类:文本类型和二进制类型
BLOB是一个二进制大对象,可以容纳可变长度的数据,其中分为tinyblob、blob、mediumblob、longblob。一般用于存储二进制数据,例如声音、图像、视频等
Text是一个文本大对象,可以容纳可变长度的数据,其中分为tinytext、text、mediumtext、longtext,一般用于存储文本类型数据,例如小说、商品简介
两者之间的区别:
mysql> insert into t25 values('a ');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t25 where id='a ';
Empty set (0.00 sec)
mysql> create table c9(id text);
Query OK, 0 rows affected (0.02 sec)
mysql> create table c8(id blob);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into c9 values(“Abc”);
Query OK, 1 row affected (0.01 sec)
mysql> insert into c8 values(“Abc”);
Query OK, 1 row affected (0.01 sec)
mysql> select * from c9 where id=‘abc’;
±-----+
| id |
±-----+
| Abc |
±-----+
1 row in set (0.00 sec)
mysql> select * from c8 where id=‘abc’; – 由于二进制大对象实际上是采用二进制数据进行存储,所以比较时会出现区分大小写的效果
Empty set (0.00 sec)

类型名称 允许的最大长度 说明
tinytext 0-255 短文本字符串
text 0-65535 长文本字符串
mediumtext 16M 中等长度的长文本字符串
longtext 4G 极大文本数据
tinyblob 0-255 不超过255个长的二进制串
blob 0-65535 二进制类型的长文本字符串
mediumblob 16M 中等长度的二进制长文本字符串
longblob 4G 极大二进制数据
blob是二进制类型,可以容纳可变长度的数据,区分大小写;text是一个不区分大小写的blob
日期时间类型
特殊的时间是时间戳类型
时间戳字段定义主要影响两类操作:

  1. 插入记录时,时间戳字段包含DEFAULT CURRENT_TIMESTAMP,如插入记录时未指定具体时间数据则将该时间戳字段值设置为当前时间
  2. 更新记录时,时间戳字段包含ON UPDATE CURRENT_TIMESTAMP,如更新记录时未指定具体时间数据则将该时间戳字段值设置为当前时间
  3. 当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间
  4. 系统函数now()可以获取系统的当前时间
    create table dt1(id date);
    insert into dt1 values(‘1989-2-3’);
    create table dt2(id timestamp default current_timestamp,name varchar(20));
    mysql> insert into dt3(name) values(‘yan1’);
    Query OK, 1 row affected (0.01 sec)
    mysql> select * from dt3;
    ±--------------------±-----+
    | id | name |
    ±--------------------±-----+
    | 2022-04-17 15:07:33 | yan1 |
    ±--------------------±-----+
    1 row in set (0.00 sec)
    类型名称 说明 格式
    date 日期类型,有效范围为1000-9999年,不包含时分秒 3B,yyyy-MM-dd
    time时间类型,有效范围为-838到838小时范围内,一般用于表示时间值或者持续时间。不包含年月日 3B,HH:mm:ss
    year 年份类型,有效范围1901到2155年 1B,yyyy
    datetime日期时间类型,其中包含日期和时间,可以精确到秒,有效范围为1000到9999年。具体存储时和时区无关。从MySQL5.6.4之后可以包含秒后的小数部分,精度最高为微妙(6位)非小数部分5B+小数部分0-3B,如果有小小数部分则会随着小数位数变化,yyyy-MMdd HH:mm:ss
    timestamp时间戳类型,可以精确到秒,有效分为是1970到2038年,同时支持自动存储修改的时间,存储有时区数据,实际存储毫秒数。在MySQL 5.6.4及之后版本,可以将时间戳类型数据最高精确微秒,timestamp(N)N取值范围为0-6非小数部分4B+小数部分0-3B,默认显示格式YYYY-MM-dd
    HH:mm:ss
    类型说明
    集合和枚举类型
    set集合类型,可以设置多个集合成员,允许从多个集合成员种选择多个数据进行插入
    enum枚举类型,可以设置允许选用的多个值,列只能赋予某个枚举成员值
    select now();
    create table t8(id int, name varchar(32), bdate datetime default now());

create table set1(id int,hobby set(‘抽烟’,‘喝酒’,‘烫头’));
insert into set1 values(1,‘’); – 允许,同时允许插入null
insert into set1 values(1,‘烫头,抽烟’); – 没问题
insert into set1 values(1,‘烫头,喝酒’); – 没有问题,但是入库时会自动排序
insert into set1 values(1,‘烫头,抽烟,扣脚’); – 报错,因为其中一个值不在set定义种
insert into set1 values(1,‘抽烟,抽烟’);-- 实际上只插入一个值,也就是会自动去除重复值

create table enum1(id int,sex enum(‘男’,‘女’,‘不确定’));
insert into enum1 values(1,‘’); – 报错,但是允许插入null
insert into enum1 values(1,‘男’);
insert into enum1 values(2,‘男,女’); – 报错

位类型
如果直接使用bit则默认bit(1)
bit(1)表示可以存储一个二进制位,只能存储0或者1,其中n的最大上限值为64
bit(8)表示可以存储8个二进制位的值,取值范围为0到255
总结
定义数据类型就是定义列,数据类型决定数据的特性【域完整性】
数据类型主要分为字符串类型、定点数和浮点数类型、日期类型、大对象类型【慎用】
数据类型在不同的存储引擎上表现不同
数据所采用的数据类型是根据业务需求和对应的数据类型特征进行选择,不建议使用过于复杂的数据类型

数据库概述01(基本数据类型)相关推荐

  1. date类型_Chapter 01. 常见数据类型概述 Overview of Common Data Types

    课程:DataCamp_Skill Track_SQL fundamentals[笔记] Chapter 01. 常见数据类型概述 Overview of Common Data Types 了解常见 ...

  2. 【SQL数据库基础01】数据库和SQL概述

    文章目录 01 引入 1.1 数据库存储数据的特点 1.2 三个重要概念 1.2.1 DBMS 1.3 SQL的优点: 图例说明: 1.4 SQL语言四大类 1.4.1 数据查询语言DQL 1.4.1 ...

  3. 第01章_数据库概述

    第01章_数据库概述 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上 ...

  4. 【高级数据库】第一章 第01讲 数据库概述

    [高级数据库]第一章 DBMS系统概述   博主学院最近有关于高级数据库的课程,为了很好的记录高级数据库的相关知识点,开辟了以<数据库系统实现(第二版)>为基础,结合学院课程具体的内容,编 ...

  5. DB(一):数据库概述、SQL概述、Oracle数据类型

    文章目录 ORACLE SQL 一.数据库概述 1.DB和DBMS 2.Oracle数据库概述 3.DB2数据库概述 4.SQL Server数据库概述 5.MySQL数据库概述 二.SQL概述 1. ...

  6. 【宋红康 MySQL数据库】【01】数据库概述

    持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库][01]数据库概述 1. 为什么要使用数据库 2. 数据库与数据库管理系统 2.1 数据库的相关概念 2.2 数据库与数据 ...

  7. MySql基础篇---001 数据库概述与MySQL安装篇:概述,表和类对应关系,表关系、数据库卸载,下载,安装,配置,启动,登录,演示,图形化工具,目录结构,常见问题

    第01章_数据库概述 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储 ...

  8. 【一周入门MySQL—1】数据库概述、数据定义、数据操作

    数据库概述.数据定义.数据操作 一.数据库概述 数据库基础概念:按照一定的数据结构来组织.存储和管理数据的仓库. 企业数据存储面临的问题: 存储大量数据: 大量数据的检索和访问: 保证数据信息的一致性 ...

  9. 数据库概述(了解数据库,当前数据库介绍,mysql数据库介绍,安装mysql数据库)

    文章目录 数据库概述 什么是数据库(数据,表,数据库) 数据库有什么作用? 关系数据库详解 非关系数据库详解 数据库系统发展史 数据库管理系统(DBMS) 当今主流数据库介绍 MySQL数据库 MyS ...

最新文章

  1. 十年中文技术社区风雨之路 今晚4位老炮畅聊过去未来
  2. iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
  3. 教你怎么在vi和vim上查找字符串
  4. SDNU 1300.转圈游戏(快速幂)
  5. MyEclipse注册码
  6. docker镜像与容器的区别
  7. 洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分)
  8. 安装SQLserver时候报错:应用程序中发生了无法处理的异常。如果单击继续。。。。。
  9. 手机APP测试需要注意的问题
  10. 信息化建设规划_中小型企业信息化建设规划方案
  11. OSChina 周六乱弹 ——我的闺蜜是总统
  12. MyBatis - 使用@Param注解解决mybatis方法传入多参数时的报错问题
  13. IT行业都有哪些职位,初学者(0基础,新人)该如何选择,才能够快速进入这个行业?...
  14. ansys18安装以后打不开_ansys18.0安装过程及常见问题解决方案【图文】
  15. USB PD快充协议详解(待续)
  16. 服务器usb驱动安装系统安装失败怎么办,USB3.0驱动无法安装失败怎么办?USB驱动失败失败的解决方法...
  17. 图像分类经典卷积神经网络—SENet论文翻译(中英文对照版)—Squeeze-and-Excitation Networks(挤压和激励网络)
  18. 亚洲的音乐史料及其历史研究状况
  19. MyBatis的Dao层实现方式
  20. 关于一个学习计算机专业,迷茫的大一新生的看法和理解

热门文章

  1. win7怎么重置计算机,处理电脑系统怎么重置呢?教你恢复出厂设置
  2. html5交互式地铁线路图,HTML5 SVG城市地铁路线图动画演示
  3. 计算机与汽车的论文,汽车计算机网络技术论文
  4. Ubuntu自动更换壁纸
  5. 索尼携多种影像解决方案出席 InfoComm
  6. MySQL 中 CONCAT 函数使用
  7. java基于springboot的高校学报论文在线投稿系统
  8. JAVA中字符串倒序、判断名字中英文、判断手机号格式以及正则表达式应用
  9. 阿里巴巴集群跟踪数据 Cluster Data V2017翻译文档
  10. python之正弦图