MySQL中的四种SQL及其基本用法

1.DDL数据库定义语言

  • DDL-数据库操作

    查询所有所有数据库

    SHOW DATABASES;
    

    查询当前数据库

    SELECT DATABASES;
    

    创建

    CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
    

    删除

    DROP DATABASE [IF EXISTS] 数据库名;
    

    使用

    USE 数据库名
    
  • DDL-表操作-查询

    查询当前数据库所有表

    SHOW TABLES;
    show tables;
    

    查询表结构

    DESC 表名;
    

    查询指定表的建表语句

    SHOW CREATE TABLE 表名;
    show create table 表名;
    

在这里插入图片描述

上面查询建表语句时,有一部分展示出来的SQL语句里面,有一部分并未自己编写,比如engine=InnoDB存储引擎,字符集,排序规则它们都是默认的

  • DDL-表操作-创建

    CREATE TABLE 表名(
    	字段1 字段1类型(长度)[COMMENT 字段1注释],
    	字段2 字段2类型[COMMENT 字段2注释],
    	字段3 字段3类型[COMMENT 字段3注释],
    	...
    	字段n 字段n类型[COMMENT 字段n注释]
    )[COMMENT 表注释];
    
    comment 备注、评论
    [...]里面是可选参数、最后一个字段不需要加逗号
    
  • DDL-表操作-数据类型

    MySQL中的类型很多,主要分为三类:数值类型、字符串类型、日期时间类型。

    数值类型:(有符号都是正负数空间占一半,准确说负数的绝对值比正数小1,下面省略写了,不想敲了)

    类型     大小	(有符号signed) (无符号UNSIGNED) 描述
    TINYINT	1byte  (-126,127)		(0,255) 	小整数值
    SMALLINT 2byte	()				()			
    MEDIUMINT 3byte 
    INT或INTERGER 4byte
    BIGINT	8byte
    FLOAT 	4byte
    DOUBLE	8byte
    DECIMAL		 		依赖于M(精度)和D(标度的值)
    

    age年龄这个值就可以选择age TINYINT unsigned

    score分数这个值就可以score double(4,1)

    字符串类型:

    类型		大小            描述
    CHAR	0-255 bytes       定长字符串 
    VARCHAR 0-65535 bytes	  变长字符串
    TINYBLOB 0-255 bytes	  不超过255个字符的二进制数据
    TINITEXT 0-255 bytes      短文本字符串
    BLOB     0-65 535 bytes   二进制形式的长文本数据
    TEXT	 0-65 635 bytes   长文本数据
    MEDIUMBLOB 				  二进制
    ...
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    char和varchar都可以定义字符串,区别是CHAR是定长、VARCHAR

    varchar

    • varchar是可变长度的,所以查询时会稍微慢一些,因为需要额外的字节存储字符串的长度信息。

    • 当存储的数据长度超过定义的最大长度时,会导致数据被截断

    char

    • CHAR是一种固定长度的字符串类,如果存储的数据长度不足指定的长度,会在数据后面填充空格,造成存储空间的浪费。
    • CHAR比VARCHAR占用更多的存储空间,特别是存储长度较短的字符串时会显得浪费。

    注意: char性能好,varchar性能较差

    日期类型:

    类型		大小      范围         格式			描述
    DATE 3 1000-01-01到9999-12-31 YYYY-MM-DD 日期值
    
    TIME 3 -838:59:59到 838:59:59 HH:MM:SS 时间值或持续时间
    
    YEAR 1 1901到2155 YYYY 年份值
    
    DATETIME 8 1000-01-01 00:00:00到9999-12-31 23:59:59
    YYYY-MM-DD HH:MM:SS 混合日期和时间值
    
    TIMESTAMP 4 1970-01-01 00:00:01到2038-01-19 03:14:07
    YYYY-MM-DD HH:MM:SS 混合日期和时间值、时间戳
    

    一般date、time、datetime使用得比较多

    案例:

    CREATE TABLE `emp` (
      `id` int(11) DEFAULT NULL COMMENT '编号',
      `workno` varchar(10) DEFAULT NULL COMMENT '工号',
      `name` varchar(10) DEFAULT NULL COMMENT '姓名',
      `gender` char(1) DEFAULT NULL COMMENT '性别',
      `age` tinyint(3) unsigned DEFAULT NULL COMMENT '年龄',
      `idcard` char(18) DEFAULT NULL COMMENT '身份证号',
      `entryddate` date DEFAULT NULL COMMENT '入职时间'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'
    
  • DDL-表操作-添加

    添加字段:

    alter table 表名 字段名 类型(长度) [COMMENT 注释] [约束];
    

    案例:为emp表增加一个新得字段"昵称"为nickname,类型varchar(20)

    alter table emp add nickname varchar(20) comment '昵称';
    
  • DDL-表操作-修改

    修改数据类型

    alter table 表名 modify 字段名 新数据类型(长度);
    

    修改字段名和字段类型

    alter table 表名 change 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
    

    案例:将emp表得nickname字段修改为username,类型为varchar(30)

    alter emp change nickname username varchar(30) comment '昵称';
    
  • DDL-表操作-修改

    删除字段

    ALTER TABLE 表名 DROP 字段名;
    

    案例:

    将emp表的字段username删除

    alter table emp drop username;
    

    修改表名

    Alter 表名 rename to 新表名;
    

    案例将emp表的表名修改为employee

  • DDL-表操作删除

    删除表

    DROP TABLE [IF EXISTS] 表名;
    

    删除指定表,并重新创建该表

    truncate table 表名;
    

    注意:在删除表时,表中的全部数据都会被删除

总结:

数据库操作
show databases;
create database if not exsist;
use 数据库;
select database();
drop database 数据库名;

表操作
show tables;
create table 表名 (字段 字段类型,字段 字段类型);
desc 表名;
show create table 表名;
-- 字段名的操作
alter table 表名 add/modify/change/drop/rename to ...
drop table 表名;

2.DML数据库操纵语言

DML-介绍

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据进行增删改操作

  • 添加数据(INSERT)

  • 修改数据(UPDATE)

  • 删除数据(DELETTE)

  • DML-添加数据

  1. 给指定的字段添加数据

    INSERT INTO表名 (字段名1,字段名2...) value (值1,值2...)
    
  2. 给全部字段添加数据

    INSERT INTO VALUES (值1,值2...)
    
  3. 批量添加数据

    INSERT INTO 表名(字段名1,字段名2,...)VALUES (值1,值2...),(值1,值2...),(值1,值2...);
    
    INSERT INTO表名 VALUES (值1,值2...),(值1,值2...),(值1,值2...);
    

    注意:

    • 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
    • 字符串和日期型数据应该包含在引号中。
    • 插入的数据大小,应该在字段的规定范围
  • DML-修改数据

    update 表名 set 字段名1 = 值1,字段名2=值2,...[where 条件];
    

    注意:

    • 修改语句的添加可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
  • DML-删除数据

    DELETE from 表名 [where 条件]
    

    注意:

    • DELETE语句条件可以有,也可以没有条件,如果没有条件,则会删除整张表的所有数据。
    • DELETE语句不能删除某一个字段的值(可以使用UPDATE)
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ','123456789123456789','2002-01-01')' at line 2

syntax语法,manual指南、手册 corresponds相当于、符合、相一致、通信

3.DQL数据库查询语言

  • DQL介绍

    DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库表的记录。

    查询关键字: SELECT

  • DQL-语法

    select
    	字段列表
    from
    	表名列表
    where
    	条件列表
    group by
    	分组字段列表
    having
    	分组后条件列表
    order by
    	排序字段列表
    limit
    	分页参数
    

    查询类型:

    • 基本查询
    • 条件查询(where)
    • 聚合函数(count(*)、max、min、avg、sum)
    • 分组函数(group by)
    • 排序规则(order by)
    • 分页查询(limit)
  • DQL-基本查询

    1.查询多个字段

    SELECT 字段1,字段2,字段3 ... FROM 表名;
    SELECT * FROM 表名;
    

    2.设置别名(as 可以省略)

    SELECT 字段1 [AS 别名1],字段2 [AS 别名2] ... FROM 表名;
    

    3去除重复记录,查询该字段有哪些不同的

    select distinct 字段列表 FROM 表名;
    
  • DQL-条件查询

    1.语法

    select 字段列表 FROM 表名 where 条件列表;
    

    2.条件

    比较运算符					功能
    	>						大于
    	>=						大于等于
    	<						小于
    	<=						小于等于
    	=						等于
    	<>或!=				   不等于
    	BETWEEN...And...		在某个范围之内(含最小,最大值)
    	in(...)					在in之后的列表中的值,多选一
    	like 占位符			  模糊匹配(_匹配单个字符,%匹配任意个字符)
    	IS						是null
    	
    逻辑运算符					功能
    AND 或 &&				   并且(多个条件同时成立)
    OR 或 || 				   或者(多个条件任意一个成立)
    NOT 或 !					  非,不是
    
    INSERT INTO employee (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES
    (1, '10001', '张三', '男', 25, '110101199001010001', '北京市朝阳区', '2020-01-01'),
    (2, '10002', '李四', '男', 28, '310101199002020002', '上海市黄浦区', '2019-12-15'),
    (3, '10003', '王五', '男', 30, '440101199003030003', '广东省深圳市福田区', '2018-05-10'),
    (4, '10004', '赵六', '女', 27, '320101199004040004', '江苏省南京市鼓楼区', '2020-03-20'),
    (5, '10005', '陈七', '女', 26, '510101199005050005', '四川省成都市武侯区', '2017-08-01'),
    (6, '10006', '刘八', '男', 29, '330101199006060006', '浙江省杭州市西湖区', '2019-10-05'),
    (7, '10007', '朱九', '男', 31, '210101199007070007', '辽宁省沈阳市和平区', '2016-11-11'),
    (8, '10008', '杨十', '女', 24, '430101199008080008', '湖南省长沙市岳麓区', '2020-02-28'),
    (9, '10009', '吴十一', '男', 27, '120101199009090009', '天津市和平区', '2019-07-01'),
    (10, '10010', '郑十二', '女', 26, '370101199010100010', '山东省济南市历下区', '2018-09-15'),
    (11, '10011', '黄十三', '男', 29, '510101199011110011', '四川省成都市锦江区', '2017-12-01'),
    (12, '10012', '马十四', '男', 28, '320101199012120012', '江苏省南京市玄武区', '2019-06-20'),
    (13, '10013', '罗十五', '女', 25, '440101199013130013', '广东省深圳市南山区', '2020-04-10'),
    (14, '10014', '梁十六', '女', 26, '330101199014140014', '浙江省杭州市拱墅区', '2018-08-01'),
    (15, '10015', '宋十七', '男', 27, '210101199015150015', '辽宁省沈阳市铁西区', '2019-09-05'),
    (16, '10016', '郭十八', '男', 30, '430101199016160016', '湖南省长沙市天心区', '2016-10-11'),
    (17, '10017', '曹十九', '女', 28, '120101199017170017', '天津市南开区', '2020-01-28'),
    (18, '10018', '许二十', '男', 26, '370101199018180018', '山东省青岛市市南区', '2019-06-01'),
    (19, '10019', '魏二十一', '女', 29, '510101199019190019', '四川省成都市青羊区', '2018-11-15'),
    (20, '10020', '张二十二', '男', 27, '320101199020200020', '江苏省苏州市姑苏区', '2020-03-20'),
    (21, '10021', '李二十三', '男', 25, '440101199021210021', '广东省广州市天河区', '2017-07-01'),
    (22, '10022', '王二十四', '女', 24, '330101199022220022', '浙江省宁波市江北区', '2019-09-15'),
    (23, '10023', '赵二十五', '男', 26, '210101199023230023', '辽宁省大连市中山区', '2018-12-01'),
    (24, '10024', '陈二十六', '女', 27, '430101199024240024', '湖南省株洲市天元区', '2020-05-20'),
    (25, '10025', '刘二十七', '男', 28, '120101199025250025', '天津市河东区', '2019-08-05'),
    (26, '10026', '朱二十八', '男', 30, '370101199026260026', '山东省烟台市芝罘区', '2016-09-11'),
    (27, '10027', '杨二十九', '女', 29, '510101199027270027', '四川省成都市金牛区', '2020-02-28'),
    (28, '10028', '吴三十', '男', 26, '320101199028280028', '江苏省无锡市滨湖区', '2019-05-01'),
    (29, '10029', '郑三十一', '女', 25, '440101199029290029', '广东省珠海市香洲区', '2018-10-15'),
    (30, '10030', '黄三十二', '男', 27, '330101199030300030', '浙江省温州市鹿城区', '2017-11-20');
    
    -- 条件查询
    -- 1.查询年龄等于25的员工
    select name,age from employee where age = 25;
    
    -- 2.查询年龄小于25的员工信息
    select name,age,workaddress from employee WHERE age<25;
    
    -- 3.查询年龄小于等于25的员工信息
    select name,age,workaddress from employee WHERE age<=25;
    
    -- 4.查询没有身份证的号的员工信息
    select * from employee where idcard is null;
    
    -- 5.查询有身份证号的员工信息
    SELECT * from employee where idcard is not null;
    
    UPDATE employee set idcard = null where id = 18;
    
    -- 6.查询年龄不等于25的员工信息
    select * from employee where age != 25;
    select * from employee where age <> 25;
    
    -- 7.查询年龄在25岁(包含)到30岁(包含)的员工信息
    select * from employee where age BETWEEN 25 and 30;
    select * from employee where age >=25 and age<=30 ORDER BY age;
    select * from employee where age >=25 && age <= 30 order by age;
    
    -- 8.查询性别为 女 且年龄小于 25岁的员工信息
    select * from employee where gender = '女' and age <= 25;
    
    -- 9.查询年龄等于24 或 28 或 30 的员工信息
    select * from employee where age = 25 or age = 28 or age = 30 order by age;
    select * from employee where age in (24,28,30);
    
    -- 10.查询姓名为两个字的员工信息
    select * from employee where name like '__';
    
    -- 11.查询姓王的员工
    select * from employee where name like '王%'
    select * from employee where idcard like '%x'
    
  • DQL-聚合函数

    1.介绍

    将一列数据作为一个整体,进行纵向计算。

    2.常见聚合函数

    函数功能
    count统计数量
    max最大值
    min最小值
    avg平均值
    sum求和

    3.语法

    select 聚合函数(字段列表) FROM 表名;
    

    注意: null值不参与所有聚合函数运算

    -- 聚合函数
    
    -- 1.统计该企业员工数量
    SELECT count(*) from employee;
    
    -- 2.统计该企业员工的平均年龄 聚合函数计算不包括空值
    SELECT count(idcard) from employee;
    
    -- 3.统计该企业员工的最大年龄
    select max(age) from employee;
    
    -- 4.统计该企业员工的最小年龄
    select min(age) from employee;
    
    -- 5.统计西安地区的员工的年龄之和
    select * from employee where workaddress like "%成都%";
    select sum(age) from employee where workaddress like "%成都%";
    
  • DQL-分组查询

    1.语法

    select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组过滤后的条件];
    

    这里涉及到了两个条件,这里的where和having分别有啥区别?

    2.where与having区别(非常重要)

    • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
    • 判断条件不同:where不能对聚合函数进行判断,而having可以

    注意:

    • 执行顺序: where > 聚合函数 > having。
    • 分组之后,查询的字段一般为聚合函数和分组字段,查询其它字段无任何意义。
    -- 分组查询
    
    -- 1.根据性别分组,统计男性员工 和 女性员工的数量
    select gender,count(*) as '总数' from employee group by gender;
    
    -- 2.根据性别分组,统计男性员工 和 女性员工的平均年龄
    select gender,count(*) as '总数',avg(age) as '平均年龄' from employee GROUP BY gender;
    
    -- 3.查询年龄小于28岁的员工,并根据工作地址分组,获取员工数量大于等于2的工作地址
    select workaddress,count(*) from employee where age <28 GROUP BY workaddress having count(*) >= 2;
    
  • DQL-排序查询

    1.语法:

    select 字段列表 表名 order by 字段1 排序方式1,字段2 排序方式2; 
    

    2.排序方式

    • ASC: 升序(默认值)
    • DESC: 降序

    注意: 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

    -- 排序查询
    
    -- 1.根据年龄对公司的员工进行升序排序
    select * from employee order by age asc;  	-- 默认升序
    select * from employee order by age desc;
    
    -- 2.根据入职时间,对员工进行降序排序
    select * from employee order by entrydate desc;
    
    
    -- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序升序
    select * from employee order by age asc,entrydate desc; -- asc可以省略
    
  • DQL-分页查询

    1.语法

    select 字段列表 from 表名 limit 起始索引,查询记录数;
    

    注意

    • 起始索引从0开始,起始索引=(查询页码-1)*每页记录数。
    • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是Limit。
    • 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
    -- 排序查询
    
    -- 1.根据年龄对公司的员工进行升序排序
    select * from employee order by age asc;  	-- 默认升序
    select * from employee order by age desc;
    
    -- 2.根据入职时间,对员工进行降序排序
    select * from employee order by entrydate desc;
    
    -- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序升序
    select * from employee order by age asc,entrydate desc; -- asc可以省略
    
    -- 分页查询
    -- 1.查询第1页员工数据,每页展示10条记录
    select * from employee limit 0,10;
    
    -- 2.查询第2页员工数据,每页展示10条记录 ---->(页码-1)*页展示数
    select * from employee limit 9,10;
    
  • DQL-案例编写

    1.查询年龄为20,21,22,23岁的员工信息。

    2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工

    3.统计员工表中,年龄小于60岁的,男性员工和女姓员工的人数。

    4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。

    5.查询性别为男,且年龄在20~40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。

    -- 1.查询年龄为20,21,22,23,25,28岁的员工信息。
    select * from employee where gender = '女' and age in (20,21,22,23,25,28);
    
    -- 2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工
    select * from employee where age between 20 and 40 and gender = '男' and name like '___';
    
    -- 3.统计员工表中,年龄小于28岁的,男性员工和女姓员工的人数。
    select gender,count(*) from employee where age < 28 GROUP BY gender;
    
    -- 4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
    select name,age from employee where age<=35 order by age asc ,entrydate desc;
    
    -- 5.查询性别为男,且年龄在20~40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
    select * from employee where gender = '男' and age BETWEEN 20 and 40 ORDER BY age asc,entrydate asc LIMIT 0,5;
    
  • DQL-执行顺序(非常重要)

    ​ DQL语句需要知道它的执行顺序,上面有DQL的编写顺序,编写顺序并不是执行顺序。

    ​ 执行顺序是先找这张表,也就是执行FROM,然后通过WHERE执行查询条件,第三步通过GROUP BY和HAVING来指定分组和分组的条件,第四步才是决定查询要返回哪些字段,也就是SELECT,再接着才是ORDER BY,最后才是LIMIT。

    编写顺序:

    select
    	字段列表
    FROM
    	表名列表
    WHERE
    	条件字段
    GROUP BY
    	分组字段列表
    HAVING
    	分组条件列表
    ORDER BY
    	排序字段列表
    LIMIT
    	分页参数
    
    

    执行顺序:

    FROM
    	表名列表
    WHERE
    	条件列表
    GROUP BY
    	分组字段列表
    HAVING 
    	分组后条件列表
    SELECT
    	字段列表
    ORDER BY
    	排序字段列表
    LIMIT 
    	分页参数
    

    案例:sql语句的执行顺序

    -- 查询年龄大于15的员工的姓名、年龄、并根据年龄进行升序排列
    
    -- 证明先执行 from employee emp(as可以省略) 再执行where条件
    select name,age from employee as emp where emp.age>25 ORDER BY age asc;
    
    -- 证明先执行where语句再执行select语句  eage识别不了,下面语句执行不了
    select emp.name ename,emp.age eage from employee as emp where eage>25 ORDER BY age asc;
    
    -- 证明select是在order之前执行的
    select name,age eage from employee as emp where emp.age>25 ORDER BY eage asc;
    

4.DCL数据库控制语言

  • DCL-介绍

    DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户,控制数据库的访问权限。

    ​ 我们有一个MySQL数据库服务器,DCL主要控制的就是有哪些用户,可以来访问我们这条MySQL服务器,当admin1这个用户去访问这个数据库的时候,它可以操作哪几个数据库,这个属于它的访问权限。admin2来访问的时候它的权限不一样,能访问的数据库也是不一样的。

    [外链图片转存中…(img-KgIJ8VdD-1726414099649)]

    ​ 上面的数据库里面有三个用户,其中它对应的第一个字段是Host,也就是主机,在MySQL当中,我们要去创建一个用户,要去删除一个用户可以通过用户名和host主机地址去同时定位,也就是双主键。

    [外链图片转存中…(img-FMhJ24Ef-1726414099650)]

    ​ 这个主机是指明了只能在哪个主机上面可以访问这个MySQL服务器,localhost代表只能在本机访问,不能远程访问。

    案例:

    -- 查询用户
    use mysql;
    select * from user;
    
    -- 创建用户 admin1,只能在当前主机localhost访问,密码123456;
    create user 'admin1'@'localhost' IDENTIFIED by '123456';
    
    -- 创建用户 admin2,可以在任意主机访问该数据库,密码123456; %是指的所有主机都能登录
    CREATE user 'admin2'@'%' IDENTIFIED by '123456'
    
    -- 修改用户admin1的访问密码为1234;
    alter user 'admin1'@'localhost' IDENTIFIED with mysql_native_password by '1234';
    
    -- 删除admin@localhost用户
    drop user 'admin1'@'localhost';
    

    ​ 我们有一个MySQL数据库服务器,DCL主要控制的就是有哪些用户,可以来访问我们这条MySQL服务器,当admin1这个用户去访问这个数据库的时候,它可以操作哪几个数据库,这个属于它的访问权限。admin2来访问的时候它的权限不一样,能访问的数据库也是不一样的。

    在这里插入图片描述

    ​ 上面的数据库里面有三个用户,其中它对应的第一个字段是Host,也就是主机,在MySQL当中,我们要去创建一个用户,要去删除一个用户可以通过用户名和host主机地址去同时定位,也就是双主键。

    在这里插入图片描述

    ​ 这个主机是指明了只能在哪个主机上面可以访问这个MySQL服务器,localhost代表只能在本机访问,不能远程访问。

    案例:

    -- 查询用户
    use mysql;
    select * from user;
    
    -- 创建用户 admin1,只能在当前主机localhost访问,密码123456;
    create user 'admin1'@'localhost' IDENTIFIED by '123456';
    
    -- 创建用户 admin2,可以在任意主机访问该数据库,密码123456; %是指的所有主机都能登录
    CREATE user 'admin2'@'%' IDENTIFIED by '123456'
    
    -- 修改用户admin1的访问密码为1234;
    alter user 'admin1'@'localhost' IDENTIFIED with mysql_native_password by '1234';
    
    -- 删除admin@localhost用户
    drop user 'admin1'@'localhost';
    
  • DCL-管理用户

    1.查询用户

    USE mysql;
    SELECT * FROM user;
    

    2.创建用户

    create user '用户名'@'主机名' IDENTIFIED BY '密码';
    

    3.修改用户密码

    ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
    

    4.删除用户

    DROP user '用户'@'主机名'
    
    • 注意:

    • 主机名可以使用%通配

    • 这类SQL开发人员操作的比较少,主要DBA(Database Administrator 数据库管理员)使用。

    -- 查询用户
    use mysql;
    select * from user;
    
    -- 创建用户 admin1,只能在当前主机localhost访问,密码123456;
    create user 'admin1'@'localhost' IDENTIFIED by '123456';
    
    -- 创建用户 admin2,可以在任意主机访问该数据库,密码123456; %是指的所有主机都能登录
    CREATE user 'admin2'@'%' IDENTIFIED by '123456'
    
    -- 修改用户admin1的访问密码为1234;
    alter user 'admin1'@'localhost' IDENTIFIED with mysql_native_password by '1234';
    
    -- 删除admin@localhost用户
    drop user 'admin1'@'localhost';
    
  • DCL-权限控制

    使用上面的语句能够创建用户,用户能登录mysql,但是用户不能够访问任何的数据库只能访问一个系统库,原因因为用户创建好了之后没有给用户分配权限。

    MySQL中定义了很多种权限,但是常用的就以下几种:

    权限说明
    ALL,ALL PRIVILEGES(all privileges)所有权限
    SELECT查询数据
    INSERT插入数据
    UPDATE修改数据
    DELETE删除数据
    ALTER修改表
    DROP删除数据库/表/视图
    CREATE创建数据库/表
  • DCL-权限控制

    1.查询权限

    SHOW GRANTS FOR '用户名'@'主机名';
    

    2.授予权限

    GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
    

    注意:如果我们要把所有的数据库和数据库表授予权限,可以直接用* *表示

    3.撤销权限

    REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
    

    注意:

    • 多个权限之间,使用逗号分隔
    • 授权时,数据库名和表名可以使用*进行通配

    案例:

    -- 查询权限
    show grants for 'admin2'@'%';
    
    -- 授予restudy这个库下面的所有权限
    grant all on restudy.* to 'admin2'@'%';
    
    -- 撤销权限
    revoke all on restudy.* from 'admin2'@'%';
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>