一.数据的存储方式
特定的文件 / 内存 / 第三方云服务器 / 数据库服务器
二.什么是数据库
数据库按照一定的形式来组织存储数据,目的是为了便于操作数据 —— 增删改查
三.数据库发展历史
网状数据库 -> 层次型数据库 -> 关系型数据库 -> 非关系型数据库(NoSQL)
关系型数据库逻辑结构
Server -> Database -> Table -> Row -> Column
数据库服务器 数据库 数据表 行 列
四.mysql数据库
oracle:MySQL
马丁:MariaDB
xampp 服务器套装,保护多款服务器端软件,包含mysql,.... |
1.mysql部署结构
(1)服务器端:负责存储、维护数据 —— 银行的数据库服务器
C:/xampp/mysql/bin/mysqld.exe 启动文件
占用端口3306
(2)客户端:负责连接服务器,对数据进行操作 —— 银行的ATM机
C:/xampp/mysql/bin/mysql.exe
2.使用客户端连接服务器端
mysql.exe -h127.0.0.1 -P3306 -uroot -p
-h 连接的服务器,IP地址/域名 127.0.0.1/localhost 自己电脑的IP地址和域名
-P mysql所占用的端口
-u 提供用户名,root是mysql的管理员账户
-p 提供root对应的密码,xampp下root密码为空
mysql -uroot 简写形式
连接命令结束不能加分号 |
3.常用的管理命令
quit; 退出服务器的连接
show databases; 显示所有的数据库
use 数据库名称; 进入指定的数据库
show tables; 显示所有的数据表
desc 数据表名称; 描述指定的数据表的表头有哪些项
五.SQL命令
结构化查询语言,用于操作关系型数据库服务器,主要对数据进行增删改查
1.SQL命令运行方式
(1)交互模式
客户端输入一行,点击回车,服务器就执行一行,适用于临时性的查看数据。
(2)脚本模式
把要执行的所有命令写在一个脚本文件中,一次性的提交给服务器执行,适用于批量的操作数据。
mysql -uroot<拖拽要提交的脚本文件 回车
2.SQL命令的语法规范
(1)一条SQL命令可以跨越多行,以英文的分号作为结束
(2)SQL命令不区分大小写,习惯上关键字大写,非关键字小写
(3)假设某一条SQL命令出现语法错误,则此条命令往后所有命令不再执行
(4)分为单行注释和多行注释
-- 单行注释
#单行注释
/* 多行注释 */
六.常见的SQL命令
1.设置客服端连接服务器端编码为utf8
set names utf8;
2.丢弃数据库,如果存在
drop database if exists 数据库名称;
3.创建一个新的数据库,设置存储字符的编码为utf8
create database hantang charset=utf8;
4.进入创建的数据库
use 数据库名称;
5.创建数据表
create table 数据表名称(
列名称 列类型,
...
);
七.数据操作
1.插入数据
insert into 数据表名称 values(...);
2.删除数据
delete from 数据表名称 where 条件;
3.修改数据
update 数据表名称 set 列名称=值, ... where 条件;
4.查询数据
select * from 数据表名称;
八.计算机存储字符
1.如何存储英文字符
ASCII:对所有的英文及其符号进行编码,总共有128个
Latin-1:对欧洲字符进行了编码,总共有256个,兼容ASCII;MySQL默认使用这种编码
2.如何存储中文字符
GB2312:对6000多汉字进行了编码,兼容ASCII
GBK:对2万多汉字进行了编码,兼容GB2312
Unicode:对世界上主流国家常用的语言进行了编码,具体有三种存储方案,utf-8,utf-16,utf-32
3.解决中文乱码
(1)确保脚本文件的编码是utf8
(2)设置客户端连接服务器端编码为utf8
set names utf8;
(3)设置服务器端创建数据库存储字符的编码为utf8
charset=utf8
4.针对于个别情况,还是出现乱码
退出交互模式 执行 chcp 65001 将命令行编码改为utf-8 重新进入交互模式查询数据 |
MySQL可视化操作
九.列类型
在创建数据表的时候,指定的列存储的数据类型
create table t1(
nid 列类型
);
1.数值型
tinyint 微整型,占1个字节,范围-128~127
smallint 小整型,占2个字节,范围-32768~32767
int 整型,占4个字节,范围-2147483648~2147483647
bigint 大整型,占8个字节,范围
float 单精度浮点型,占4个字节,存储的值越大精度越低
double 双精度浮点型,占8个字节,存储的值越大精度越低
decimal(M,D) 定点小数,占16个字节,M代表总的有效位数,D代表小数点后的位数
boolean 布尔型,只有两个值,分别是true和false,存储只有两个值的数据,例如:性别、是否为会员、是否为推荐商品...
true和false是关键字,不能加引号 布尔型在使用的时候会转为tinyint,true转为1,false转为0,也可以直接插入1或者0 |
2.日期时间型
date 日期型 格式 '2022-10-30'
time 时间型 格式 '14:55:30'
datetime 日期时间型 格式 '2022-10-30 14:55:30'
3.字符串型
varchar(M) 变长字符串,不会产生空间浪费,数据操作速度相对慢,常用于存储变化长度的数据,例如:姓名、文字标题、详情... M的最大值是65535
char(M) 定长字符串,可能会产生空间浪费,数据操作速度相对快,常用于存储固定长度的数据,例如:手机号码、身份证号码... M的最大值是255
text(M) 大型变长字符串,M的最大值4G
|
varchar(5) |
char(5) |
a |
a\0 |
a\0\0\0\0 |
ab |
ab\0 |
ab\0\0\0 |
一二三 |
一二三\0 |
一二三\0\0 |
选择合理列类型
create table t1(
id int,
title varchar(64),
birthday date,
age tinyint,
phone char(11),
sex boolean
);
数据库存储图片,存储的是图片的路径 img/1.jpg img/huawei.png |
十列约束
mysql可以对插入的值进行验证,例如:编号不能出现重复、性别只能是男或者女、一个人的成绩范围0~100之间... 只有符合条件才允许插入
create table t1(
pid int 列约束
);
1.主键约束 —— primary key
声明了主键约束的列上,不允许插入重复的值,一个表中只能有一个主键约束,通常加在编号列,会加快数据的查询速度
null 表示一个暂时无法确定的值,例如:暂时无法确定商品的价格、无法确定一个员工的手机、家庭住址... null是关键字,不能加引号 |
主键约束禁止插入null
2.非空约束 —— not null
声明了非空约束的列,禁止插入null
十一.列约束
3.唯一约束 —— unique
声明了唯一约束的列不允许插入重复的值,一个表中可以使用多次唯一约束
允许插入null,甚至多个null
一旦使用了唯一约束,可能会影响到数据的默认排序 |
4.检查约束 —— check
也称为自定义约束,可以自己指定约束条件
create table student(
score tinyint check(score>=0 && score<=100)
);
mysql不支持检查约束,极大影响数据插入速度。
5.默认值约束 —— default
(1)设置默认值
create table ht_event(
ctime date default '2022-8-31'
);
如果不设置默认值,则为null
(2)应用默认值
①在插入值的位置,使用default关键字,就会自动应用默认值
insert into ht_event values(3,'事件测试', default);
②给指定的列提供值,没有出现的列会自动应用默认值
insert into ht_event(eid, title) values(4,'事件测试');
6.外键约束
声明了外界约束的列插入的值必须在另一个表的主键列出现,目的确保两个表之间建立关联。
外键列要和对应的主键列的类型要保持一致
foreign key(外键列) references 另一个表(主键列)
十二.自增列
auto_increment:自动增长,声明了自增列,只需要赋值为null,就会获取最大值然后加1插入
注意事项:必须添加在整数型的主键列
十三.简单查询