目录
①、首先我们需要来看一下mysql默认数据库里面的四张表(user、db、tables_priv、columns_priv)
①、你对于这个数据库的引擎有所了解没有?我们唯一所接受的就两个,一个是innoDB和MyISAM

第一步:解压
第二步:解压完了之后我们要配置我们的my.ini里面的安装目录及存放目录也要对应你安装的位置
第三步:执行mysqld-install命令
第四步:在去初始化它的服务
第五步:最终我们启动本地Windows服务,MySQL服务
第六步:在去登录我的mysql
第七步:然后用它的默认密码去登录
第八步:在连接做测试
8.0的版本和5.7的版本有些许不一样,就是修改密码的地方
【mysql 8.0版本】
1.解压MySQL 2.修改my.ini文件 3.mysqld install 4.mysqld --initialize --console 5.net start mysql 6.mysql -P 3306 -u root -p 7.ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; 8.Navicat链接测试 如果MySQL已经安装过,那么执行mysqld remove【mysql 5.7版本】
1.解压MySQL 2.修改my.ini文件 3.mysqld install 4.mysqld --initialize --console 5.net start mysql 6.mysql -P 3306 -u root -p 7.SET PASSWORD = PASSWORD("123456"); 8.Navicat链接测试 如果MySQL已经安装过,那么执行mysqld remove
数据库而言:crud、Create、drop、一般来说项目经理会具备所以权限
数据库而言:crud
数据库而言:select
线网、生产环境:系统开发完毕,客户使用的那个环境 linux
测试环境:公司内部模拟客户现场,搭建而成的环境 linux
开发环境:本地电脑 Windows
用户表层权限、数据库层权限、表层的权限表、字段层权限


新增用户:
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了
- 创建用户
- create user ls;
- 查询密码
- select host,user,authentication_string from user;
- 设置密码
- ALTER USER 'ls'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 赋予权限给用户 grant to
- #语法:grant privileges on databasename.tablename to username@'host';
- grant select,delete on mybatis_ssm.t_vue_user to ls@'%'


那么对应王五就跟上面的一样的,把上面的那些代码在执行一下改为ww然后后面的权限只有查询功能即可。
查询权限:
- #命令:show grants for 用户名;
- show grants for 'zs'@'%';

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

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

创建数据库
- 语法:create database 数据库名;
- 或者
- create database if not exists 数据库名 default charset utf8 collate utf8_general_ci;
但我们这样创建数据库是没有设置编码集的,
第一个:就会导致我们去导脚本的时候就会失败
第二个:可能会乱码,包括你去导网络上的脚本,如果出现了乱码或者说导失败了,自己就要有一个意识,数据库版本对不对。
select version();
![]()
注意:在网络上的脚本导入失败了,你的版本号跟数据库版本是否一致
你的数据库的编码集是否正确,你的排序规则是否一样
查询所以的数据库:
语法:show databases;

innoDB:它是作为一个默认的存储引擎,支持事务
MyISAM:
| 功 能 | MYISAM | Memory | InnoDB | Archive |
|---|---|---|---|---|
| 存储限制 | 256TB | RAM | 64TB | None |
| 支持事物 | No | No | Yes | No |
| 支持全文索引 | Yes | No | No | No |
| 支持数索引 | Yes | Yes | Yes | No |
| 支持哈希索引 | No | Yes | No | No |
| 支持数据缓存 | No | N/A | Yes | No |
| 支持外键 | No | No | Yes | No |
decimal:多个小数点
decimal---->货币类型(精度、小数)对应的是double
建表:跟我们oracle没什么区别的
- create table user02(
- id int primary key,
- name varchar(20) not null,
- sex char default '男',
- birthday datetime,
- code varchar(18) unique
- )
查询表:
desc user02;

设计表的时候,一般会设置拓展字段
- create table user03(
- id int primary key,
- name varchar(20) not null,
- sex char default '男',
- birthday datetime,
- code varchar(18) unique
- extra1 varchar(10),
- extra1 varchar(20),
- extra1 varchar(20),
- extra1 varchar(50),
- extra1 varchar(50),
- extra1 varchar(100),
- extra1 varchar(100),
- extra1 varchar(150),
- )
我们为什么这么设置表:我们在企业做开发的时候
第一个问题:你能够预想到所以的业务逻辑的流程嘛?,不能,就算你经验很丰富,你全部都设置好了,客户有可能要改流程,大概率会改流程,那么改流程的话,你这个表的设计是不是也要改,客户就在跟你谈流程觉得当时谈的时候少了一个流程,第二天就找到你,然后说回去想了一下,这个需求不够完善,就是功能有些没考虑到,然后就把那些缺失的交给你,然后你做的那些功能都弄好了,也能跑起来,然后突然又加了一个字段,这就不一定能跑起来了,我这八个字段和十个字段就派上用场了,大概率会派上用场。
核心业务表:就会创建10个或者20个字段,不是所有的表都能加拓展字段的,它会占用内存和空间的。万物都有利有弊。这个在企业里面用的多,但不是所有的表的加拓展字段,只有核心业务表才加。
- #1.仅仅复制表的结构
- CREATE TABLE copy LIKE author;
-
- #2.复制表的结构+数据
- CREATE TABLE copy2
- SELECT * FROM author;
-
- #只复制部分数据
- CREATE TABLE copy3
- SELECT id,au_name
- FROM author
- WHERE nation='中国';
-
-
- #仅仅复制某些字段
- CREATE TABLE copy4
- SELECT id,au_name
- FROM author
- WHERE 0;
主键约束,外键约束,非空约束,唯一约束,检查约束,默认约束
NOT NULL:非空,用于保证该字段的值不能为空
比如姓名、学号等
DEFAULT:默认,用于保证该字段有默认值
比如性别
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
比如学号、员工编号等
UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
比如座位号
CHECK:检查约束【mysql中不支持】
比如年龄、性别
FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值
比如学生表的专业编号,员工表的部门编号,员工表的工种编号
USE students; DROP TABLE stuinfo; CREATE TABLE stuinfo( id INT PRIMARY KEY,#主键 stuName VARCHAR(20) NOT NULL UNIQUE,#非空 gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查 seat INT UNIQUE,#唯一 age INT DEFAULT 18,#默认约束 majorId INT REFERENCES major(id)#外键 );
在这个所有列段定义完了之后去添加约束的
- CREATE TABLE stuinfo(
- id INT,
- stuname VARCHAR(20),
- gender CHAR(1),
- seat INT,
- age INT,
- majorid INT,
-
- CONSTRAINT pk PRIMARY KEY(id),#主键
- CONSTRAINT uq UNIQUE(seat),#唯一键
- CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#检查
- CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
-
- );
总结:
第一个:在企业里怎么用权限的.我们这个用户管理是怎么用的,在企业是怎么用的,对应什么场景
第二个:纯属引擎的面试题,它存储引擎的区别:上面的还不够全面,只是容易让我们记的
第三个:在设计表的时候,仅有可能去设置备用的字段
第四个:这是一道面试题 数据库三大范式:反范式设计,遵循三大设计