• J2EE基础:MySQL01


    目录

                                                  思维导图

    一.MySQL

    1.MySQL它是数据管理系统,专门管理数据用的

    2.mysql安装步骤:

    二.MySQL的账户管理

    项目经理         zs

    项目组长        ls

    开发人员        ww

    权限的划分,针对的是生产环境

    对与系统开发而言:三个环境

    ①、首先我们需要来看一下mysql默认数据库里面的四张表(user、db、tables_priv、columns_priv)

     面试题:四大引擎

    ①、你对于这个数据库的引擎有所了解没有?我们唯一所接受的就两个,一个是innoDB和MyISAM

    ②.你任何做一个mysql优化的?一部分答案就是存储引擎这里答:MyISAM它是不支持事务,它的查询效率较高,因为事务它管的不仅是自己的数据了它还管关联表的数据,那么你管的东西多,那么就肯定会印象性能,有句话就是:时间换空间,还有一个空间换时间,上一个空间越多就会越慢,上一个时间越少就运行的越快,那么这个MyISAM它不支持事务,那也就导致了它就更快。

    六大约束:

    主键约束,外键约束,非空约束,唯一约束,检查约束,默认约束


                                                  思维导图

    一.MySQL

    1.MySQL它是数据管理系统,专门管理数据用的

    2.mysql安装步骤:

    第一步:解压

    第二步:解压完了之后我们要配置我们的my.ini里面的安装目录及存放目录也要对应你安装的位置
    第三步:执行mysqld-install命令
    第四步:在去初始化它的服务
    第五步:最终我们启动本地Windows服务,MySQL服务
    第六步:在去登录我的mysql
    第七步:然后用它的默认密码去登录
    第八步:在连接做测试
    8.0的版本和5.7的版本有些许不一样,就是修改密码的地方
    【mysql        8.0版本】

    1. 1.解压MySQL
    2. 2.修改my.ini文件
    3. 3.mysqld install
    4. 4.mysqld --initialize --console
    5. 5.net start mysql
    6. 6.mysql -P 3306 -u root -p
    7. 7.ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    8. 8.Navicat链接测试
    9. 如果MySQL已经安装过,那么执行mysqld remove

    【mysql        5.7版本】

    1. 1.解压MySQL
    2. 2.修改my.ini文件
    3. 3.mysqld install
    4. 4.mysqld --initialize --console
    5. 5.net start mysql
    6. 6.mysql -P 3306 -u root -p
    7. 7.SET PASSWORD = PASSWORD("123456");
    8. 8.Navicat链接测试
    9. 如果MySQL已经安装过,那么执行mysqld remove

    二.MySQL的账户管理

    项目经理         zs

            数据库而言:crud、Create、drop、一般来说项目经理会具备所以权限

    项目组长        ls

            数据库而言:crud

    开发人员        ww

            数据库而言:select

    权限的划分,针对的是生产环境

    对与系统开发而言:三个环境

            线网生产环境:系统开发完毕,客户使用的那个环境 linux

            测试环境:公司内部模拟客户现场,搭建而成的环境 linux

            开发环境:本地电脑 Windows

    ①、首先我们需要来看一下mysql默认数据库里面的四张表(user、db、tables_priv、columns_priv)

    用户表层权限、数据库层权限、表层的权限表、字段层权限

     

     新增用户:

    create user zs;

     为什么我们来查询一下zs的登录的密码:

    select host,user,authentication_string from user;
    

    所以我们新增用户之后一定要给它设置密码 ,要看好版本 现在是8.0版本的设置密码

    ALTER USER 'zs'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

     此时zs用户是没有任何数据库的权限,当然它带了一个。我们去连接测试一下。

     zs是连接同一个数据库,但是至于zs而言它没有root这个权限,当时我们上面写到了zs是项目经理,它本应该具备所以的权限,那我们该怎么赋值?赋予权限语法:

    #语法:grant privileges on databasename.tablename to username@'host';

    我们现在要给zs赋予mysql所以表的权限:

    【假设我有这些数据】

    #给 zs用户 赋予 数据库mybatis_ssm中的表t_vue_user 查询权限
    grant select,delete on mybatis_ssm.t_vue_user to ls@'%'
    #给 zs用户 赋予 数据库mybatis_ssm中的表t_vue_user 修改权限
    grant UPDATE onmybatis_ssm.t_vue_user to zs@'%';
    #给 zs用户 赋予 数据库mybatis_ssm中所有表 查询权限
    grant SELECT on mybatis_ssm.* to zs@'%';
    #给 zs用户 赋予 数据库mybatis_ssm中所有表 所有权限
    grant ALL on mybatis_ssm.* to zs@'%';

    这是对应项目经理zs具备所以表的权限 

    对于zs的权限是全部都可以用的,我就测试两个

     对于项目组长:我们就只写查询和删除的权限,就不写所以的crud了

    1. 创建用户
    2. create user ls;
    3. 查询密码
    4. select host,user,authentication_string from user;
    5. 设置密码
    6. ALTER USER 'ls'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    7. 赋予权限给用户 grant to
    8. #语法:grant privileges on databasename.tablename to username@'host';
    9. grant select,delete on mybatis_ssm.t_vue_user to ls@'%'

     那么对应王五就跟上面的一样的,把上面的那些代码在执行一下改为ww然后后面的权限只有查询功能即可。

     查询权限:

    1. #命令:show grants for 用户名;
    2. show grants for 'zs'@'%';

    当我要收取权限删除的时候,你要一次性把所以的权限收取回来然后在给他赋值权限 

     对于所有的还是可以的

    我们一般创库是这样的会设置编码集: 

    创建数据库

    1. 语法:create database 数据库名;
    2. 或者
    3. create database if not exists 数据库名 default charset utf8 collate utf8_general_ci;

    但我们这样创建数据库是没有设置编码集的,

    第一个:就会导致我们去导脚本的时候就会失败

    第二个:可能会乱码,包括你去导网络上的脚本,如果出现了乱码或者说导失败了,自己就要有一个意识,数据库版本对不对

    select version();

      

     注意:在网络上的脚本导入失败了,你的版本号跟数据库版本是否一致

            你的数据库的编码集是否正确,你的排序规则是否一样

    查询所以的数据库:

    语法:show databases;

     面试题:四大引擎

    ①、你对于这个数据库的引擎有所了解没有?我们唯一所接受的就两个,一个是innoDB和MyISAM

    innoDB:它是作为一个默认的存储引擎,支持事务

    MyISAM:

    ②.你任何做一个mysql优化的?一部分答案就是存储引擎这里答:MyISAM它是不支持事务,它的查询效率较高,因为事务它管的不仅是自己的数据了它还管关联表的数据,那么你管的东西多,那么就肯定会印象性能,有句话就是:时间换空间,还有一个空间换时间,上一个空间越多就会越慢,上一个时间越少就运行的越快,那么这个MyISAM它不支持事务,那也就导致了它就更快。

    功 能MYISAMMemoryInnoDBArchive
    存储限制256TBRAM64TBNone
    支持事物NoNoYesNo
    支持全文索引YesNoNoNo
    支持数索引YesYesYesNo
    支持哈希索引NoYesNoNo
    支持数据缓存NoN/AYesNo
    支持外键NoNoYesNo

    decimal:多个小数点

    decimal---->货币类型(精度、小数)对应的是double

    建表:跟我们oracle没什么区别的

    1. create table user02(
    2. id int primary key,
    3. name varchar(20) not null,
    4. sex char default '男',
    5. birthday datetime,
    6. code varchar(18) unique
    7. )

    查询表:

    desc user02;

    设计表的时候,一般会设置拓展字段 

    1. create table user03(
    2. id int primary key,
    3. name varchar(20) not null,
    4. sex char default '男',
    5. birthday datetime,
    6. code varchar(18) unique
    7. extra1 varchar(10),
    8. extra1 varchar(20),
    9. extra1 varchar(20),
    10. extra1 varchar(50),
    11. extra1 varchar(50),
    12. extra1 varchar(100),
    13. extra1 varchar(100),
    14. extra1 varchar(150),
    15. )

     我们为什么这么设置表:我们在企业做开发的时候

            第一个问题你能够预想到所以的业务逻辑的流程嘛?,不能,就算你经验很丰富,你全部都设置好了,客户有可能要改流程,大概率会改流程,那么改流程的话,你这个表的设计是不是也要改,客户就在跟你谈流程觉得当时谈的时候少了一个流程,第二天就找到你,然后说回去想了一下,这个需求不够完善,就是功能有些没考虑到,然后就把那些缺失的交给你,然后你做的那些功能都弄好了,也能跑起来,然后突然又加了一个字段,这就不一定能跑起来了,我这八个字段和十个字段就派上用场了,大概率会派上用场。

    核心业务表:就会创建10个或者20个字段,不是所有的表都能加拓展字段的,它会占用内存和空间的。万物都有利有弊。这个在企业里面用的多,但不是所有的表的加拓展字段,只有核心业务表才加。

    1. #1.仅仅复制表的结构
    2. CREATE TABLE copy LIKE author;
    3. #2.复制表的结构+数据
    4. CREATE TABLE copy2
    5. SELECT * FROM author;
    6. #只复制部分数据
    7. CREATE TABLE copy3
    8. SELECT id,au_name
    9. FROM author
    10. WHERE nation='中国';
    11. #仅仅复制某些字段
    12. CREATE TABLE copy4
    13. SELECT id,au_name
    14. FROM author
    15. WHERE 0;

    六大约束:

    主键约束,外键约束,非空约束,唯一约束,检查约束,默认约束

    NOT NULL:非空,用于保证该字段的值不能为空
    比如姓名、学号等
    DEFAULT:默认,用于保证该字段有默认值
    比如性别
    PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
    比如学号、员工编号等
    UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
    比如座位号
    CHECK:检查约束【mysql中不支持】
    比如年龄、性别
    FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
    在从表添加外键约束,用于引用主表中某列的值
    比如学生表的专业编号,员工表的部门编号,员工表的工种编号

    1. USE students;
    2. DROP TABLE stuinfo;
    3. CREATE TABLE stuinfo(
    4. id INT PRIMARY KEY,#主键
    5. stuName VARCHAR(20) NOT NULL UNIQUE,#非空
    6. gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查
    7. seat INT UNIQUE,#唯一
    8. age INT DEFAULT 18,#默认约束
    9. majorId INT REFERENCES major(id)#外键
    10. );

    在这个所有列段定义完了之后去添加约束的

    1. CREATE TABLE stuinfo(
    2. id INT,
    3. stuname VARCHAR(20),
    4. gender CHAR(1),
    5. seat INT,
    6. age INT,
    7. majorid INT,
    8. CONSTRAINT pk PRIMARY KEY(id),#主键
    9. CONSTRAINT uq UNIQUE(seat),#唯一键
    10. CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#检查
    11. CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
    12. );

    总结:

    第一个:在企业里怎么用权限的.我们这个用户管理是怎么用的,在企业是怎么用的,对应什么场景

    第二个:纯属引擎的面试题,它存储引擎的区别:上面的还不够全面,只是容易让我们记的

    第三个:在设计表的时候,仅有可能去设置备用的字段

    第四个:这是一道面试题    数据库三大范式:反范式设计,遵循三大设计

  • 相关阅读:
    在基于乐鑫芯片的用户定制开发板上开发 UI
    如何把MapGIS的区文件转为ArcGIS的SHAPE面文件
    龙迅LT2611UX—LVDS至HDMI2.0转换器概述资料分享
    ROS机器人小车建模仿真与SLAM
    C++ 坑人小程序(全集)
    2.0SpringMVC中文件上传、拦截器和异常处理器
    音频学习笔记之音频播放
    二十种实战调优MySQL性能优化的经验
    Python之glob
    Qt中的枚举变量,Q_ENUM,Q_FLAG以及Qt中自定义结构体、枚举型做信号参数传递
  • 原文地址:https://blog.csdn.net/weixin_67465673/article/details/125528195