MySQL学习(二)

MySQL学习(二)


昨日回顾

![]( https://gimg2.baidu.com/image_search/src=http%3A%2F%2Finews.gtimg.com%2Fnewsapp_match%2F0%2F10613881549%2F0&refer=http%3A%2F%2Finews.gtimg.com&app=2002&size=f9999 ,10000&q=a80&n=0&g=0n&fmt=auto?sec=1654259181&t=2265905d206ca6c592eea1c5015af637)


存取演变史

普通文本-->软件开发目录规范-->数据库应用


应用发展史

本地服务-->网络服务


数据库本质

数据库指代正在运行处理数据的程序,数据库软件指代操作该进程的软件

数据库软件的本质就是基于CS架构的软件


数据库分类

1.关系型数据库

​ MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server

2.非关系型数据库

​ Redis、MongoDB、Memcache


SQL与NoSQL

SQL指代的就是操作关系型数据库的语句

NoSQL指代的就是操作非关系型数据库的语句


系统服务制作

1.环境变量添加

cd /usr/local/mysql/bin

2.启动服务

./mysql -uroot -p


修改密码

mysqladmin -u用户名 -p原密码 password 新密码


基本SQL语句

SQL语句的结束符是分号

针对库

	show databases; # 查看所有的库名称
  show create database db1;  # 指定查看某个库的信息
  create database db1;  # 增加库
  alter database db1 charset='gbk'; # 修改字符编码
  drop database db1;  # 删除库

针对表

	select database();  # 查看当前在哪个库下
  use db1;  # 切换到指定库下
  show tables;  # 查看当前库下所有的表名称
  show create table t1;  # 指定查看某个表的信息
  desc t1;  # 指定查看表的字段信息 
  create table t1(id int,name varchar(32));  # 增加表
  alter table t1 rename ttt;  # 修改表名 
  drop table t1;  # 删除表名

针对记录

	select * from 表名;  # 查看表里面所有的数据
  select id,name from 库名; # 查看库里面所有的数据
  select * from mysql.user\G;  # 逐行显示表字段
  select Host,User from mysql.user;  # 查看指定字段
  insert into t1 values(1,'值'); # 增加单条数据
  insert into t1 values(),(),();  # 增加多条数据
  update t1 set name='值' where id=1;  # 将id为1的name字段修改
  delete from t1 where name='值'; # 删除掉所有name为值的

今日学习内容


字符编码与配置文件


查看MySQL默认字符编码

\s
  如果是5.X系列 显示的编码有多种
  	latin1
  	gbk
  如果是8.X系列 显示的统一是utf8mb4
 	utf8mb4是utf8优化版本 支持存储表情

统一字符编码

  步骤1:拷贝一份该配置文件并修改名称为my.ini
  步骤2:清空my.ini文件内的内容
  步骤3:添加固定的配置信息即可
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
  步骤4:保存并重启服务端即可生效
    net stop mysql
    net start mysql

存储引擎

# 什么是存储引擎
	存储引擎可以理解为处理数据的不同方式
# 查看存储引擎
	show engines;

MyISAM:5.1之前版本MySQL默认的存储引擎

特点:存取数据的速度快 但是功能很少 安全性较低

InnoDB:5.1之后版本MySQL默认的存储引擎

特点:有诸多功能 安全性较高 存取速度没有MyISAM快

BlackHole

特点:任何写入的数据都会立刻消失(类似于垃圾回收处理站)

Memory
特点:以内存作为数据存取地 速度快但是断电立刻丢失

# 自定义选择存储引擎
	create table t1(id int)engine=myisam;
  create table t2(id int)engine=innodb;
  create table t3(id int)engine=blackhole;
  create table t4(id int)engine=memory;

创建表的完整语法

create table 表名(
	字段名1 字段类型(数字) 约束条件,
	字段名2 字段类型(数字) 约束条件,
  字段名3 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件可以写多个 空格隔开即可(后面详细讲解)
	字段名1 字段类型(数字) 约束条件1 约束条件2 约束条件3
4.最后一行字段结尾不能加逗号

![]( https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimgq1.q578.com%2Fdd%2F0524%2F47f2456015b12560.jpg&refer=http%3A%2F%2Fimgq1.q578.com&app=2002&size=f9999 ,10000&q=a80&n=0&g=0n&fmt=auto?sec=1654259598&t=8f085a42b7c7ecc0b97b932b4f92d256)

字段类型之整型


整型

整形类型 整型大小
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes

  上述整型的区别在于从上往下能够存储的数字范围越来越大
  注意事项
  	1.需要考虑正负数的问题 如果需要存储负数 则需要占据一个比特位
    2.注意手机号如果使用整型来存储 需要使用bigint才可以
"""
工作小技巧:有时候看似需要使用数字类型存储的数据其实可能使用的是字符串
	因为字符串可以解决不同语言对数字不精确的缺陷!!!
"""
	create table t5(id tinyint);
  insert into t5 values(-129),(256);
  # 如果是在5.6版本不会报错 会自动处理成最大范围(没有意义)
  	步骤1:set global sql_mode = 'STRICT_TRANS_TABLES';
    步骤2:退出客户端 重新登录即可
  # 如果是在5.7及以上版本 则会直接报错(更加合理)
  验证(结论)发现所有的整型都默认带有正负号 如何修改不带正负号(约束条件)
  create table t6(id tinyint unsigned);

字段类型之浮点型

浮点型类型 浮点型位数
float (255,30) 总共255位 小数位占30位
double (255,30) 总共255位 小数位占30位
decimal (65,30) 总共65位 小数位占30位

精确度:decimal>double>float

正常业务使用float即可,高精度可使用decimal


字段类型之字符类型


字符类型分两种,char和varchar,定长和变长

定长:设定好最大存储限额,不足使用空格填充,超过就报错

变长:设置好最大存储限额,有几个存几个,超过的依旧报错

如果是5.6版本并且没有修改严格模式 则会自动截取四个字符(不合理也不实用)
    # 临时修改 
    步骤1:set global sql_mode = 'STRICT_TRANS_TABLES';
    步骤2:退出客户端 重新登录即可
    # 永久修改
    修改my.ini配置文件
    sql_mode = 'STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY'
    重启服务端之后永久生效

varchar在存数据的时候会生成一个1bytes的报头 记录数据长度
varchar在取数据的时候先会读取1bytes的报头 从中获取真实数据长度

类型 优点 缺点 使用场景
char 速度快 空间浪费 规模较小,数据量相对固定的字典
varchar 节省空间 速度较慢 规模较大,数据交杂的数据

数字的含义

字段类型括号内的数字大部分情况下是用来限制存储的长度
但是在整型中并不是用来限制长度 而是用来控制展示长度
create table t12(id int(3));
insert into t12 values(1111);  # 超过位数依旧不会报错

create table t13(id int(3) zerofill); 
insert into t13 values(1);  # 001,位数不够用0填充
insert into t13 values(1111);  # 有几位就展示几位
以后涉及到整型字段 都无需自己定义长度 直接使用自带的即可
而针对其他类型的字段 则需要自己添加数字

字段类型之枚举与集合

# 枚举
	多选一
  create table t14(
  	id int,
    name varchar(32),
    gender enum('male','female','others')
  );
  '''插入数据的时候 针对gender只能填写提前定义好的数值'''

# 集合
	多选多(也可以多选一)
  create table t15(
  	id int,
    name varchar(32),
    hobby set('数据1','数据2')
  );  

字段类型之日期类型

date							年月日
datetime					年月日时分秒
time							时分秒
year							年

create table t16(
	id int,
  name varchar(32),
  reg_time datetime,
  birth date,
  study_time time,
  join_time year
);
# 针对时间数据一般都是通过代码自动获取并添加

约束条件


约束条件是基于字段类型之上的额外限制

id int unsigned  
# 字段类型int规定了id字段只能存整数,约束条件unsigned指的是整数基础之上还必须是正数
  1. 无需正负号:unsigned

  2. 零填充:zerofill

  3. 非空:not null

    create table t18(id int,name varchar(32) not null);
    insert into t18(id) values(2); # 报错
    insert into t18(id,name) values(2,null); # 报错
    insert into t18(id,name) values(2,''); # 不报错

  4. 默认值:default

    create table t19(id int,name varchar(32) default '默认值');

  5. 唯一值:unique

    '单列唯一:某个字段下对应的数据不能重复 是唯一的'
    create table t20(id int,name varchar(32) unique );
    '多列唯一:多个字段下对应的数据组合到一起的结果不能重复 是唯一的'
    create table t21(id int,host varchar(32),port int,unique(host,port));

  6. 主键:primary key

    主键 外键 索引
    定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值
    作用: 用来保证数据完整性 用来和其他表建立联系用的 是提高查询排序的速度
    个数: 主键只能有一个 一个表可以有多个外键 一个表可以有多个惟一索引
  7. 自增:auto_increment

    配合主键一起使用, 用户以后在添加数据的时候就不需要自己记忆主键值

    主键字段的编写:id int primary key auto_increment

今日小结

![]( https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwww.zenmepai.com%2Fres%2F20170519%2F5b5f31509c58f8562e567e9fecfbf5f2.gif&refer=http%3A%2F%2Fwww.zenmepai.com&app=2002&size=f9999 ,10000&q=a80&n=0&g=0n&fmt=auto?sec=1654259601&t=cb92c475195f99b45e8678d74d2cd94b)

今日学习笔记就到这里了

posted @ 2022-05-04 20:36  Eason辰  阅读(48)  评论(0)    收藏  举报