1 主键
主键使用规则:
- 表头值不允许重复,不允许赋NULL值
- 一个表中只能有一个primary key 表头
- 多个表头做主键,称为复合主键,必须一起创建和删除
- 主键标志PRI
- 主键通常与auto_increment连用
- 通常把表中唯一标识记录的表头设置为主键[行号表]
步骤一:练习主键的创建、查看、删除、添加、验证主键
语法格式1
create table 库.表(
表头名 数据类型 primary key ,
表头名 数据类型 ,
..... );
//建表
//查看表头
语法格式2
create table 库.表(
表头名 数据类型 ,
primary key(字段名)
);
//建表
//查看表头
删除主键命令格式
alter table 库.表 drop primary key ;
//例子
//查看表头
添加主键命令格式
alter table 库.表 add primary key(表头名);
//例子
查看表头
//使用t35表 验证主键约束
步骤二:练习复合主键的使用
//创建复合主键 表头依次是客户端ip 、服务端口号、访问状态
//插入记录验证
//查看记录
//删除复合主键
//查看表头
//没有复合主键约束后 ,插入记录不受限制了
//查看表记录
//添加复合主键时 字段下的数据与主键约束冲突 不允许添加
//删除重复的数据
//添加复合主键
//查看表头
步骤三:练习与auto_increment连用的效果
表头设置了auto_increment属性后,
插入记录时,如果不给表头赋值表头通过自加1的计算结果赋值
要想让表头有自增长 表头必须有主键设置才可以
查看表结构时 在 Extra (额外设置) 位置显示
建表时 创建有auto_increment 属性的表头。实现的效果如下:
行号 姓名 班级 住址
1 bob nsd2107 bj
2 bob nsd2107 bj
3 bob nsd2107 bj
4 bob nsd2107 bj
//建表
//查看表头
//插入表记录 不给自增长表头赋值
//查看表记录
自增长使用注意事项
//给自增长表头赋值
//不赋值后 用最后1条件记录表头的值+1结果赋值
//查看记录
//删除所有行
//再添加行 继续行号 而不是从 1 开始
//查看记录
//truncate删除行 再添加行 从1开始
//插入记录
//查看记录
2 案例2:外键
2.1 方案
外键使用规则:
- 表存储引擎必须是innodb
- 表头数据类型要一致
- 被参照表头必须要是索引类型的一种(primary key)
作用:
- 插入记录时,表头值在另一个表的表头值范围内选择。
2.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:练习外键的创建、查看、删除、添加
//创建外键命令
需求: 仅给公司已有的员工发工资
创建员工表
表名 yg
员工编号 yg_id
姓名 name
创建工资表
表名 gz
员工编号 gz_id
工资 pay
//查看工资表外键
//删除外键
//查看不到外键
//添加外键
//查看外键
步骤二:验证外键功能
- 外键字段的值必须在参考表字段值范围内
- 验证同步更新( on update cascade)
- 验证同步删除( on delete cascade)
1)、外键字段的值必须在参考表字段值范围内
员工表插入记录
工资表插入记录
没有的3号员工 工资表插入记录报错
员工表 插入编号3的员工
可以给3号员工 发工资了
2)、验证同步更新( on update cascade)
查看员工表记录
把yg表里编号是3的改成9
工资表里编号是3的自动变成 9
3)、验证同步删除( on delete cascade)
删除前查看员工表记录
删除编号2的员工
删除后查看
查看工资表也没有编号2的工资了
4)、外键使用注意事项
#被参考的表不能删除
给gz表的gz_id表头 加主键标签
保证每个员工只能发1遍工资 且有员工编号的员工才能发工资
3 案例3:MySQL索引
3.1 方案
使用规则:
- 一个表中可以有多个index
- 任何数据类型的表头都可以设置索引
- 表头值可以重复,也可以赋NULL值
- 通常在where条件中的表头上设置Index
- index索引标志MUL
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:练习索引的创建、查看、删除、添加
建表时创建索引
查看索引
查看索引详细信息
删除索引
查看详细信息
已有表添加索引命令
查看索引
查看详细信息
步骤二:验证索引
查看表头(name 表头没有设置索引)
使用name表头做筛选条件,查找记录
验证是否使用索引
查看表的总行数,查找sshd 用做的是全表扫描
给name表头设置索引
查看
验证索引
4 案例4:用户管理
4.1 方案
授权是在数据库服务器里添加用户并设置权限及密码;重复执行grant命令时如果库名和用户名不变时,是追加权限。授权步骤如下:
授权信息保存在mysql库的如下表里:
- user表 保存已有的授权用户及用户对所有库的权限
- db表 保存已有授权用户对某一个库的访问权限
- tables_priv表 记录已有授权用户对某一张表的访问权限
- columns_priv表 记录已有授权用户对某一个表头的访问权限
在192.168.88.50 数据库服务器练习用户授权
在192.168.88.51 数据库服务器测试
4.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:在192.168.88.50 数据库服务器做如下授权练习
数据库管理员登陆完成如下练习:
1)允许所有主机使用root连接数据库服务,对所有库和所有表有完全权限、密码为123qqq…A
2)允许192.168.88.0/24网段主机使用plj连接数据库服务,仅对gamedb库有完全权限、密码为tarena
3)允许在本机使用pljadmin用户连接数据库服务器,仅对tarena库有查询、插入、更新、删除记录的权限,密码为NSD2023…a
4)允许192.168.88.51主机使用yaya用户连接数据库服务,仅对tarena库有查询权限,密码为tarena1
5)给yaya用户追加,插入记录的权限
6)查看用户(添加的用户保存在 mysql库的user表里)
//查看已有用户的访问权限
//用户对某一个库的访问权限保存在mysql库的db表里
7)撤销plj用户删库、删表、删记录的权限
8)修改yaya用户的登陆密码为123456
9)删除pljadmin用户
步骤二:在192.168.88.51测试授权
在mysql51连接mysql50 (使用50 添加的yaya 用户)
//查看权限
//查看登陆信息
//权限内的命令可以执行
//超出权限 报错