1 mysql的安装:分为单实例和多实例
2 mysql的权限
常见的删库跑路是因为权限问题导致的,若是只赋予该账号一个某些权限,就可以避免;
grant SELECT on mall.* TO 'dev'@'192.168.244.%' IDENTIFIED BY '123' WITH GRANT OPTION;
再看一下权限是否赋予成功
show grants for 'dev'@'192.168.244.%'
3 mysql的用户标识
用户+ip
4 用户权限涉及到的表
mysql.user 一行数据代表一个用户,常见操作直接修改该表修改用户权限是不合法的
mysql.db 一行数据代表对数据库的权限
mysql.table_priv一行数据代表对表的权限
column_priv 一行记录代表对某一列的权限
5 mysql 权限颗粒可以作用到某一列
比如下面这张表,对于dev用户之允许看id,name字段
grant select(id,name) on mall.account to 'dev'@'192.168.244.%';
插入数据后数据表如下
需求是:只允许dev用户查询id,name列
grant select(id,name) on mall.account to 'dev'@'192.168.244.%';
此时查一下啊对应的表权限,列权限
此时进行查询语句,分别是 select * 和 select id,name(授权字段) 看结果
回收权限:REVOKE SELECT on mall.* from 'dev'@'192.168.244.%'
6 mysql 角色的具体操作
mysql 是基于 用户+ip 的授权模式;
开启mysql的角色模式
然后创建一个角色dev_role,在创建要给角色peer ,吧 peer 加入到 dev_role中,就实现了分组的概念,给dev_role查询权限,
create USER 'dev_role'
create USER 'deer'
grant proxy on 'dev_role' to 'deer'
grant select(id,name) on mall.account to 'dev_role'
这里有个小的地方需要注意:如果你是远程链接,你可能会收获一个大大的错误,你没有权
限做这一步,这个时候你需要再服务器上执行一条
GRANT PROXY ON ''@'' TO 'root'@'%' WITH GRANT OPTION;
测试一下,现在使用'deer'用户登陆系统试试
select id ,name from mall.account
这些角色权限存储在哪里?
6mysql的数据类型
int
有无符号的
演示 bigint
create table test_unsigned(a int unsigned, b int unsigned);
insert into test_unsigned values(1, 2);
select b - a from test_unsigned;
select a - b from test_unsigned; --运行出错
无符号不可以小于0
int(n)
create table test_int_n(a int(4) zerofill);
insert into test_int_n values(1);
insert into test_int_n values(123456);
int(N)中的 N 是显示宽度, 不表示 存储的数字的 长度 的上限。
zerofill 表示当存储的数字 长度 < N 时,用 数字 0 填充左边,直至补满长度 N
当存储数字的长度 超过 N 时 ,按照 实际存储 的数字显示
create table test_auto_increment(a int auto_increment);//报错 提示必须是一个主键列才可以自动增长
create table test_auto_increment(a int auto_increment primary key);
面试题答案
insert into test_auto_increment values(NULL);//1,在当前数字基础上加1
insert into test_auto_increment values(0);//2 ,在当前数字上加1
insert into test_auto_increment values(-1);//-1 可以直接插入
insert into test_auto_increment values(null),(100),(null),(10),(null)//2 100 101 10 102
字符类型
时间类型