DCl 语句

数据库控制 controller

数据库的用户

root是超级管理员用户,很容易引发由于误操作所导致的数据不安全问题

查看mysql 数据库的mysql 数据库 user 表 存储了mysql 数据库所有的用户

新建用户语法

create user 'zhangsan'@'localhost';
# 创建没有密码的账户 zhangsan , 允许在 本机登录
create user 'zhangsan'@'%';
# 创建没有密码的账户 zhangsan , 允许在任何主机登录
create user 'lisi'@'localhost' identified by '456789'
# 创建密码为456789 的账户 lisi

查看 mysql 中的 user 表, 更够发现 新建用户的权限 全部为N

新建用户甚至 无法进入 emp 数据库

授权命令

给已存在的用户 授予 相应权限

GRANT语句可实现创建用户同时授权或为已存在的用户授权
grant 权限名称 on 数据库.表名 to 用户名@地址

创建用户同时授权

grant 权限名称 on 数据库.表名 to 用户名@地址 identified by 密码
# 在创建用户的同时授权

授权, 并指定 权限的可传递性

grant 权限名称 on 数据库.表名 to 用户名@地址 with grant option
# with grant option 被授权的用户, 拥有权限的传递功能

常用权限名称

create
drop
insert
delete
select
update
alter
# 想要赋予多个权限 书写多个权限名称 使用 逗号 隔开
# 如果想要授予所有权限 可以使用 all
# 给emp数据库的所有表 emp.*
# 给所有数据库的所有表通配符表达式 *.*

给’lisi’ 授权 可以查看 emp 数据库的 emp 表

grant select on emp.emp to 'lisi'@'localhost';

给’lisi’ 授权 可以更改和删除 emp 数据库的 emp 表

grant update,delete,insert on emp.emp to 'lisi'@'localhost';

授予所有权限

grant all on *.* to 'lisi'@'localhost';

创建 ‘wangwu’ 用户, 并授权

grant select on emp.emp to 'wangwu'@'%' identified by '123456';

撤销授权命令

# revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

撤销 lisi的 删除权限

revoke delete on emp.emp from 'lisi'@'localhost'

修改密码

修改普通用户密码

# 修改当前用户的密码 PASSWORD() 是一个密码加密函数
SET PASSWORD = PASSWORD("123123");
#修改其他用户密码
SET PASSWORD  FOR `teacher`@`localhost`= PASSWORD("888888");

修改root密码 使用root 登录

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '456456';

如果忘记了 root 密码

参考网址 https://blog.csdn.net/greywolf0824/article/details/80215199

先停止MySQL服务

# 确认 命令行 处于  管理员状态
C:\Users\Administrator>net stop MySQL57
MySQL57 服务正在停止.
MySQL57 服务已成功停止。

修改配置文件

找到目录 C:\ProgramData\MySQL\MySQL Server 5.7 中的 my.ini 文件

[mysqld]
# 添加如下代码
skip-grant-tables = true

重新启动mysql 服务

net start MySQL57

直接登录数据库

mysql -u root  # 直接回车就可以进入到数据库了。

执行命令修改密码

# 已过时
# update mysql.user set password = password('123456') where user='root';
# Unknown column 'password' in 'field list'
# 需要使用 新字段 authentication_string
update mysql.user set authentication_string = password('123456') where user='root';

执行筛选权限的命令

flush privileges;

验证密码修改情况

验证使用修改后的密码登录数据库
在验证新密码是否成功之前,可以先将配置文件中新添加的跳过密码验证的参数去除,然后在重启MySQL服务。
同样可以使用命令来验证,不使用密码是能否登录数据库。
最后使用新密码来登录数据库,可以成功。

删除用户

drop user 'zhangsan'@'localhost';

数据库设计

三大范式

第一范式: 每列都是不可再分的最小数据单元
第二范式: 要求每个表只描述一件事情
第三范式: 除了主键以外的其他列都直接依赖于主键列

表与表之间的关系

一对一

一夫一妻制
丈夫 一张表
妻子 一张表
数据的对用关系 一对一
中国人 姓名 年龄 身份证号
身份证表  版本 身份证号 印发单位 有效时间
一个人只能有一张身份证, 一张身份证只能对应一个人

主从表

主表是可以单独存在的

人 是可以脱离身份证单独存在, 身份证不能脱离人存在
人是主表
身份证是从表

一对多 . 多对一

父亲
儿子
一个人只能有一个亲生父亲
一个父亲可以对应多个儿子
站在父亲的角度 一对多
站在儿子的角度 多对一
员工和部门
一个员工只能属于一个部门
一个部门可以有多个员工

一般情况下, '多’表指向 '一’表(每一个员工都有一个部门编号)

案例

一个部门有多个员工
部门表  一
员工表  多
emp 表中 有一个字段 为 deptno 指向了部门编号
假设 emp表中没有 deptno 字段, 希望在dept 表中 添加字段指向emp表中的员工 该方式比较难实现

多对多

QQ 号  84204960  1874546874  2487644514
QQ 会员 (红钻, 黄钻 , 黑钻 , 绿钻, 蓝钻, 粉钻)一个QQ号 可以开通多个 钻业务一个钻业务 可以被多个人开通
学生
课程表
一个学生可以 选多门课程
一门课程可以重复被多人选择

学生课程表案例

CREATE DATABASE  IF NOT EXISTS `school`
USE `school`;
DROP TABLE IF EXISTS `subject`;CREATE TABLE IF NOT EXISTS `subject` (`SubjectId` INT(11) NOT NULL AUTO_INCREMENT,`SubjectName` VARCHAR(20) NOT NULL,`ClassHour` INT(11) NOT NULL,`GradeId` INT(11) NOT NULL,PRIMARY KEY (`SubjectId`)
);INSERT  INTO `subject`(`SubjectId`,`SubjectName`,`ClassHour`,`GradeId`)
VALUES (1,'Java',78,1),(2,'OOP',40,2),(3,'Struts2',60,3),(4,'HTML',50,1),(5,'DataBase',90,2);DROP TABLE IF EXISTS `student`;CREATE TABLE IF NOT EXISTS `student` (`StudentNo` INT(11) NOT NULL,`LoginPwd` VARCHAR(20) NOT NULL,`StudentName` VARCHAR(50) NOT NULL,`Sex` CHAR(2) NOT NULL,`GradeId` INT(11) NOT NULL,`Phone` VARCHAR(255) NOT NULL,`Address` VARCHAR(255) DEFAULT NULL,`BornDate` DATETIME DEFAULT NULL,`Email` VARCHAR(50) DEFAULT NULL,PRIMARY KEY (`StudentNo`)
);INSERT  INTO `student`(`StudentNo`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`)
VALUES (100001,'123456','王冬雪','男',1,'13618179368','王爷坟','1999-09-09 00:00:00','wangdongxue@sohu.com'),
(100002,'123456','王春雪','男',2,'13555555555','英家坟','2009-09-04 00:00:00','wangchunxue@sohu.com'),
(100003,'123456','王夏雪','男',3,'13444444444','八宝山','1989-09-19 00:00:00','wangxiaxue@sohu.com'),
(100004,'123456','王秋雪','男',1,'13333333333','公主坟','1899-09-29 00:00:00','wangqiuxue@sohu.com'),
(100005,'123456','王家训','女',2,'13222222222','八王坟','1979-09-19 00:00:00','wangjiaxun@sohu.com'),
(100007,'123','李四','男',3,'13911585602','朝阳路','2014-01-01 00:00:00','www.suho@.com'),
(100008,'123456','卢浩','男',2,'13911585603','丰台路','1990-01-01 00:00:00','www.qq2@.com'),
(100009,'123456','王旭东','男',2,'13911585604','昌平区','1996-01-01 00:00:00','www.qq3@.com'),
(100010,'123456','郑环环','男',2,'13911585605','中关村','1997-01-01 00:00:00','www.xinlang@.com'),
(100011,'123456','王丽丽','女',1,'13911585606','顺义区','1992-01-01 00:00:00','www.qq4@.com'),
(100012,'123456','冤大头','女',3,'13911585607','成府路','1993-01-01 00:00:00','www.qq5@.com'),
(100013,'123456','冤小头','女',1,'13911585608','中府村','1994-01-01 00:00:00','www.qq6@.com'),
(100014,'123456','乔峰','男',1,'13911585609','成义区','2014-01-01 00:00:00','www.qq7@.com'),
(100015,'123456','段誉','男',3,'13911585610','解台区','2013-01-01 00:00:00','www.qq8@.com'),
(100016,'123456','虚竹','男',1,'13911585611','丰阳区','2012-01-01 00:00:00','www.qq9@.com'),
(117006,'456','张三','男',1,'13911585601','解放路','2013-01-18 00:00:00','www.qq1@.com');

使用中间表专门维护两表之间的关系

create table if not exists sub_stu(`SubjectId` INT(11) NOT NULL, # 课程编号`StudentNo` INT(11) ,# 学生编号primary key (`SubjectId`,`StudentNo`)
);
# 张三选课为 java
insert into sub_stu values(1,117006);
# 张三也选择了数据库
insert into sub_stu values(5,117006);
# 段誉选课为 database
insert into sub_stu values(5,100015);

查询张三 选择的课程是

# 三表联查
select sub.SubjectName
from subject sub join sub_stu ss on sub.SubjectId = ss.SubjectIdjoin student stu on ss.StudentNo = stu.StudentNo
where stu.StudentName = '张三'

查询选择数据库课程的学生有哪些

select stu.StudentName
from subject sub join sub_stu ss on sub.SubjectId = ss.SubjectIdjoin student stu on ss.StudentNo = stu.StudentNo
where sub.SubjectName = 'database'

MySQL数据库05 数据库控制和设计相关推荐

  1. ezdml 支付mysql 吗_EZDML数据库表结构设计器_设计sql、oracle、mysql数据库表结构 V2.39 免费版...

    很多程序员或者网站站长在设计网站数据库的时候都要进行表结构设计,如果您不想操作原始的数据库工具之想简单设计一下数据库表结构,那么你不妨试试这款EZDML数据库表结构设计器,可以快速设计sql.orac ...

  2. mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录任务三 数据库的单表查询设计[实训目的与要求][实训原理][实训步骤]一.简单查询二.按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWE ...

  3. jsp mysql书店源码_使用jsp数据库mysql实现网上购物书店课程设计

    [实例简介] 使用jsp数据库mysql实现网上购物书店课程设计 [实例截图] [核心代码] 213eb755-0d07-4324-a55e-76878ddbac95 └── Myshop ├── s ...

  4. golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法

    golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法,查询中报了以下这个错 Scan error on column index 2: ...

  5. MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录 任务三 数据库的单表查询设计 [实训目的与要求] [实训原理] [实训步骤] 一.简单查询 二.按条件查询 1.比较大小查询 2.带in关键字的查询(确定集合) ...

  6. mysql 性别以女生升序_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录 任务三 数据库的单表查询设计 [实训目的与要求] [实训原理] [实训步骤] 一.简单查询 二.按条件查询 1.比较大小查询 2.带in关键字的查询(确定集合) ...

  7. MySQL:规范数据库设计

    文章目录 十.规范数据库设计 10.1 为什么需要设计 10.1.1 糟糕的数据库设计 10.1.2 良好的数据库设计 10.2 软件开发中,关于数据库的设计 10.3 设计数据库的步骤:(个人博客) ...

  8. mysql charset=utf-8_mysql数据库charset=utf-8

    关于 mysql数据库charset=utf-8的搜索结果 回答 按照下面几个措施,保证MySQL的输入输出没有乱码:1 Python文件设置编码 utf-8 (文件前面加上 #encoding=ut ...

  9. mysql数据库 auto_increment_mysql数据库 auto_increment

    MySQL内核月报 2014.09-MySQL· 捉虫动态·auto_increment 背景: Innodb引擎使用B_tree结构保存表数据,这样就需要一个唯一键表示每一行记录(比如二级索引记录引 ...

最新文章

  1. zerodivisionerror什么意思python-Python with as的用法
  2. Java 授权内幕--转载
  3. 元计算:《元计算破解生命密码》听课笔记
  4. Go丨语言学习笔记--func
  5. 打开Morrowind版本,Vector 36在Linux上的本机版本以及Hyper Light Drifter
  6. 赛锐信息:SAP系统用户账号类型介绍
  7. Java IO实战操作(一)
  8. php 压缩html css,PHP实现动态压缩js与css文件的方法
  9. 深信服手机客户端_纳米手机防水镀膜靠不靠谱,电视报道后才知道有多坑。
  10. python卸载_技术 | Python 包安装和卸载的几种方式
  11. servlet3.0理解
  12. 车联网技术解决方案与应用案例--智能TBOX车载终端
  13. 阿里平头哥CPU技术生态负责人陈炜:平头哥的发展之路
  14. java wav 转 mp3_java,wavToMP3格式转换
  15. ISO/IEC 14443、射频、PICC
  16. php 数组 按拼音首字母 排序 并分组
  17. 什么是敏捷开发,敏捷开发落地指南之迭代排期
  18. 宠物服务平台APP开发详情
  19. 齐博 src=/do/js.php?id=775,齐博CMS存储型XSS可getshell(组合利用)
  20. Tableau表计算(1):计算类型

热门文章

  1. 目标检测算法模型YOLOV3原理及其实战 课程简介
  2. again计算机谱子,Again钢琴简谱-数字双手-YUI
  3. 如何成为一个优秀的班主任?
  4. 【机器学习算法】逻辑回归为什么叫逻辑回归
  5. linux系统会流畅,号称流畅且最漂亮的Linux系统,成功让我放弃了windows 10!
  6. 来吧,嘤!,c++高级编程介绍
  7. docker 实践(十一)docker swarm
  8. 江南科友 hac linux shell,运维安全审计系统(HAC 1000E、HAC 1000P)
  9. 网游“梦幻西游”“my.exe”在Win7(或XP)下出现“已停止工作”报错无法运行的解决方法
  10. 计算机多媒体对语文教学的提高,运用多媒体进行语文教学,有效提高学习效率...