数据库学习笔记01

x33g5p2x  于2021-12-05 转载在 其他  
字(5.2k)|赞(0)|评价(0)|浏览(479)

数据库有关系型,文档型,健值型,其中最出名的是关系型:RDB

在数据库中创建用户:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • username:你将创建的用户名

  • host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%

  • password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

例子:

CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '';
CREATE USER 'pig'@'%';

二. 授权用户:

GRANT privileges ON databasename.tablename TO 'username'@'host'
  • privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL

  • databasename:数据库名

  • tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*

例子:

GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
GRANT ALL ON *.* TO 'pig'@'%';

修改用户:

1:设置与更改用户密码

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果是当前登陆用户用:

SET PASSWORD = PASSWORD("newpassword");

例子:

SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");

2:重命名:

RENAME USER <旧用户> TO <新用户>

例如:

RENAME USER 'test1'@'localhost'  TO 'testUser1'@'localhost';

3:撤销用户权限:

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

privilege, databasename, tablename:同授权部分

  • privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL

  • databasename:数据库名

  • tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*

例子:REVOKE SELECT ON *.* FROM 'test'@'host';

删除用户:

DROP USER 'username'@'host';

分割线··········································································································

使用grant创建并授权用户操作:

授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";

通过GRANT命令创建用户

个人习惯一般用这种方法进行创建用户,当数据库存在用户的时候GRANT会对用户进行授权,但当数据库不存在该用户的时候,就会创建相应的用户并进行授权。

GRANT <ALL|priv1,priv2,.....privn> ON

[object] [IDENTIFIED BY 'password']

[WITH GRANT OPTION];

MAX_QUERIES_PER_HOUR count

MAX_UPDATES_PER_HOUR count

MAX_CONNECTIONS_PER_HOUR count

MAX_USER_CONNECTIONS count

priv…代表权限select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限

举例:

给主机为192.168.10.1的用户test分配可对数据库test的hr表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123:

grant all privileges on test.* to test@192.168.10.1 identified by '123';

给主机为192.168.10.1的用户test分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

grant all privileges on test.* to test@192.168.10.1 identified by '123';

给主机为192.168.10.1的用户test分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123:

grant all privileges on *.* to test@192.168.10.1 identified by '123';

用户john分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123:

grant all privileges on *.* to john@localhost identified by '123';

完成用户的创建后,请记得刷新系统权限表;

flush privileges;

备份:

还原:

分割线································································································

SQL 的种类:

  • DDL(Data Definition Language,数据定义语言)
  • DML(Data Manipulation Language,数据操纵语言)
  • DCL(Data Control Language,数据控制语言)。

DDL:用来创建或者删除存储数据用的数据库以及数据库中的表等对象,包含以下几种指令:

  • CREATE:创建数据库和表等对象;
  • DROP: 删除数据库和表等对象;
  • ALTER: 修改数据库和表等对象的结构。

DML:用来查询或者变更表中的记录,包含以下几种指令:

  • INSERT:向表中插入数据;
  • SELECT:查询表中的数据;
  • UPDATE:更新表中的数据;
  • DELETE:删除表中的数据。

DCL:用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对 DBMS 的权限和操作数据库中的对象(数据库表等)进行设定,包含以下几种指令:

  • COMMIT: 确认对数据库中的数据进行的变更;
  • ROLLBACK:取消对数据库中的数据进行的变更;
  • GRANT: 赋予用户操作权限;
  • REVOKE: 取消用户的操作权限。

sql语句

简单的一些语句我就先不写了,直接开始从内连接开始哇:

建表语句:

1:表point:

CREATE TABLE `point` (
  `id` int(11) NOT NULL,
  `uid` int(11) DEFAULT NULL,
  `point` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2:表user:

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

根据uid=pid连接使用关键字: INNER JOIN.....ON.....

SELECT u.id, u.name, p.id, p.uid, p.point
FROM user u INNER JOIN point p
ON u.id = p.uid;

左外连接:

左外连接:是指以左边的表为基准,去匹配右边表的数据。还是刚才的例子,因为用户
信息表 A 和用户积分表 B 中都有用户编码字段,因此它们可以通过该字段实现左外连接,
也就是每一个用户信息表 A 的记录都会去匹配用户积分表 B 中的记录,即便没有对应的数
据,也会展示出来

SELECT u.id, u.name, p.id, p.uid, p.point
FROM user u
LEFT OUTER JOIN point p
ON u.id = p.uid;

右外连接:

是指以右边的表为基准,去匹配左边表的数据。这时候就要用用户积分表 B
的每一条记录去匹配用户信息表 A 的每一条记录了

SELECT u.id, u.name, p.id, p.uid, p.point
FROM user u
RIGHT OUTER JOIN point p
ON u.id = p.uid;

创建部门表:

CREATE table employee(
`id` int(10) NOT NULL AUTO_INCREMENT,
`employeeid` int(20) NOT NULL,
`empname` varchar(255)  NOT NULL,
`sex` char(10),
`age` int(10),
`data` date,
PRIMARY KEY (`id`)
)ENGINE = INNODB;

插入数据:

INSERT INTO employee VALUES 
( 1, 1, '李雷', '男', 21,'2021-01-09'),
( 2, 1, '韩梅', NULL, 21, '2020-02-23'),
( 3, 2, '赵南', '女', 23, '2018-05-17'),
( 4, 3, '周倩', '女', 20, NULL),
( 5, 3, '夏雨', '男', NULL, '2017-09-29');

创建部门表:

-- 创建部门表
CREATE TABLE departments(
`dpmid`   int(4) NOT NULL AUTO_INCREMENT,
`dpmname`   char(16)   NOT NULL,
PRIMARY KEY(`dpmid`)
)ENGINE = INNODB;

插入数据:

INSERT INTO departments
VALUES
(1,'研发部'),
(2,'产品部'),
(3,'运营部'),
(4,'财务部');

将韩梅梅的性别更新为女,夏雨的年龄更新为 24 岁,并将周倩的入职日期更新为2019-07-01;

UPDATE employee
SET sex = '女'
where
empname = '韩梅梅'

UPDATE employee
SET age = 24
WHERE
empname = '夏雨'

UPDATE employee
set data = '2019-07-01'
WHERE 
empname = '周倩'

查询所有在 2018 年之后入职且年龄大于 22 岁的员工;:

select * from employee where data>'2018-01-01' AND age >20;

分别使用内连接、左外连接、右外连接和全连接,实现员工表的部门表的关联查询:

内连接:

SELECT 
e.id,e.dpmid,e.empname,e.sex,e.age,e.`data`,d.dpmid,d.dpmname
FROM employee AS e INNER JOIN departments AS d
ON e.dpmid = d.dpmid;

左外连接:

SELECT e.id,e.dpmid,e.empname,e.sex,e.age,e.`data`,d.dpmid,d.dpmname
FROM employee e
LEFT OUTER JOIN departments d
ON e.dpmid = d.dpmid;

右外连接:

SELECT e.id,e.dpmid,e.empname,e.sex,e.age,e.`data`,d.dpmid,d.dpmname
FROM employee e
RIGHT OUTER JOIN departments d
ON e.dpmid = d.dpmid;

利用 SQL 函数求出所有员工的平均年龄,找出年龄最大的员工和最小的员工:

SELECT AVG(age),MAX(age),MIN(age) from employee ;

将员工表按照年龄排序,将员工表按照入职日期排序:

SELECT * from employee 
ORDER BY
  age DESC ,
	`data`;

将员工按照性别分组然后统计男女的人数:

SELECT empname, age,COUNT(*) FROM employee GROUP BY age;

相关文章

目录