7.27学习日记
作者:互联网
昨天内容回顾
数据库分类
数据库的本质是一个C/S的架构软件,那就必须有服务端和客户端
1. 关系型数据库
固定的表结构, 可以建立表与表之间的关系
常见数据库:MySQL(开源的, 硬盘), Oracle(商业版), sqllie,db2, SQLserver,access
2. 非关系型数据库
没有固定的表结构,以k:v键值对的形式存储
常见非关系型数据库:redis(缓存, 内存), memcache, mongodb
热数据:经常被访问的
冷数据:不经常用
下载与安装
"""
1.官网下载安装包
2.解压zip文件
bin
mysql.exe 自带的客户端
mysqld.exe 服务端
一定要先启动服务端,客户端去连接
data
文件夹,一个文件夹代表一个库
一个数据表有几个文件?
文件的数量取决于存储引擎
3.加入环境变量
把bin目录的路径加入到环境变量中,
4. 制作系统服务
添加服务:mysqld --install
删除服务:mysqld --remove
启动服务:
进入服务的三种方式:
1. 在任务栏右键
2. windows + r => services.msc
3. 在我的电脑 => 右键 => 管理
1. 鼠标点点点
2. net start mysql
关闭服务:
net stop mysql
"""
重要概念
数据库的组成部分:
库 =》文件夹
表 => 文件
记录 =》 文件里的数据
字段 => 表头
配置文件
文件名:my-default.ini => my.ini
\s; 查看mysql的基本信息
强调:只要改变了配置文件,都要重启服务端
库的增删改查
注意: 每一个sql语句,都要以;结尾
1. 查看所有库:
show databases;
2. 创建库:
create database 库名 charset='utf-8';
3. 删库:
drop database 库名;
表的增删改查
1. 查看所有表:
show tables;
2. 先切库:
use 库名;
如果不use, 指定库名, mysql.user
3. 创建表:
create table t1 (id int, name varchar(4), age int);
4. 查看表结构
desc t1;
show create table t1;
5. 修改:
alter table t1 rename userinfo;
alter table t1 modify name varchar(16);
6. 删表:
drop table t1;
面试题:
如何给已经存有100w的数据,增加一个字段?
上线流程:
1. 准备你的sql语句
2. 把你的代码提交到git仓库中
3. 注意:上线之前一定要先上表,在上代码。
记录的增删改查
1. 查询数据
select * from t1;
select id, name, age from t1; (推荐)
2. 增加数据
insert into t1 (id, name, age) values (1, 'egon', 18);
insert into t1 (id, name, age) values (2, 'ly', 19), (3, 'jason', 20);
3.修改数据
update `t1` set `name`='ly' where id=1;
4. 删除数据
delete from t1 where id=1;
今日内容概要
-
存储引擎
-
数据类型
整型:
tinyint smallint int bigint
浮点型
float double decimal
字符串
char varchar
日期类型
datetime 年月日 时分秒
time 时分秒
date 年月日
year 年份
枚举和集合
enum set -
创建表的完整语句
-
约束条件
在已有条件的基础上在做限制
zerofill
unsigned
not null
primary key
auto_increment
foreign_key
unique
default存储引擎
# 就是存储数据的方式
# 如何查看存储引擎? 都有哪些存储引擎?
show engines;
MyISAM:
mysql5.5版本及之前的版本默认引擎
查询速度比InnoDB快, 安全性低
# 不支持事务
# 表级锁
InnoDB
mysql5.6及之后的版本默认引擎
查询速度比MyISAM慢, 安全性高
# 功能:
1. 支持事务
2. 行级锁
3. 外键
MEMORY => 内存
# 数据是在内存中
面试题:
MyISAM和InnoDB引擎的区别?
1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
3. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
5. Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;
# 特点
create table t2 (id int) engine='MyISAM';
create table t3 (id int) engine='InnoDB';
create table t4 (id int) engine='MEMORY';
MyISAM(三个文件)
.frm => 表结构
.MYD => 表数据
.MYI => 索引(目录)优点:查询速度快
InnoDB(两个文件)
.frm => 表结构
.ibd => 表数据和索引
MEMORY(一个文件)
.frm => 表结构数据类型之整型
tinyint 1字节 0~255 -128~127
smallint 2字节 0~65535 -32768~32767
int 4字节 0~4294967295 -2147483648~2147483647
bigint 8字节 0~18446744073709551615 -9223372036854775808~9223372036854775807
# 他们之间的区别就是存储数据的范围不一样
# 验证整型默认是否带符号
create table t6 (id tinyint);
insert into t5 values(-129), (256);
# 结论:所有的整型默认都是带符号的。
数据类型之浮点型
float
# float(8, 2) 最大999999.99 一共8位,小数2位
float(255,30)
最大总共255位,小数30位
精确7位
double
double(255,30)
最大总共255位,小数30位
精确15位
decimal
decimal(65,30)
最大总共65位,小数30位
精确22位
create table t6 (id float(255,30));
create table t7 (id double(255,30));
create table t8 (id decimal(60,30));
insert into t6 values(1.11111111111111111111111111);
insert into t7 values(1.11111111111111111111111111);
insert into t8 values(1.11111111111111111111111111);
# 精确度不一样
decimal(22) > double(15) > float(7)
设计表注意:
1、表结构中的数据类型
2、该表中上线之后可能会产生多少数据量?
数据类型之字符串
# 两种字符串括号中的数字必须写, 代表存储字符串的长度
char(4)
存储4位,不够的空格补齐4位,超过4位的报错
在存入的时候补齐空格,取出的时候自动去掉
# 优点
查询速度快, 整存整取
# 缺点
浪费空间
varchar(4)
存储4位,有几位存几位,超过的报错
# 优点:
节省空间
# 缺点
查询速度比char慢
char(4) varchar(4)
pack(2) => 1 pack(10) => 1
unpack(1) => 2 unpack(1) => 10
为了确保数据正确,添加报头
1bytes kevin 1bytes egon 1bytes jasonlytom
# 验证
create table t10 (id int, name char(4));
create table t9 (id int, name varchar(4));
insert into t9 values(1, 'kevin');
select id,char_length(name) from t9;
insert into t10 values(1, 'kevin');
select id,char_length(name) from t10;数据类型之日期类型
datetime 年-月-日 时-分-秒
date 年-月-日
time 时-分-秒
year 年
#
create table t12 (id int, r1_time datetime, r2_time date, r3_time time, r4_time year);
#
insert into t12 values (1, '2021-11-11 11:11:11','2021-11-11','11:11:11','2021');数据类型之枚举
# 枚举 多选一
# 必须写在选项中的
create table t13 (
id int,
gender enum('male', 'female', 'other')
)
#
insert into t13 values (1, 'egon'); # 错误
insert into t13 values (1, 'male');数据类型之集合类型
# 集合 多选多
create table t14 (
id int,
hobby set('read', 'music', 'football', 'lm') )
# 可以选一个,也可以选多个
insert into t14 values(1, 'egon'); # 错误
insert into t14 values(1, 'read');
insert into t14 values(1, 'read,music');
insert into t14 values(1, 'read,egon'); # 错误创建表的完整语句
create table 表名 (
字段名 数据类型(长度) 约束条件1 约束条件2 约束条件3,
字段名 数据类型(长度) 约束条件1 约束条件2 约束条件3,
字段名 数据类型(长度) 约束条件1 约束条件2 约束条件3,
字段名 数据类型(长度) 约束条件1 约束条件2 约束条件3
)
# 注意:
1. 表中字段名和数据类型是必填项, 约束条件是可选的
2. 约束条件可以有多个,依次往下写
3. SQL语句的最后一个不能加逗号(,)
-
标签:insert,7.27,日记,学习,into,values,id,table,create 来源: https://www.cnblogs.com/hao613/p/15067558.html