数据库有关系型,文档型,健值型,其中最出名的是关系型: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;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81034.html