Mysql基本语法

前言:

在测试项目中经常需要使用到简单的Mysql语句,但是不知道语句结构是什么,经常在百度查来查去;

以下就是总结Mysql常用的基础操作语句

只需要执行从创建开始执行示例中的SQL语句,即可执行成功。

语言定义

  • db_name 数据库名称
  • tbl_name 表单名称
  • col_name 字段名称
  • xx_name 列表名称
  • view_name 视图名称
  • index_name 序列名称
  • tri_name 触发器名称
  • pro_name 存储过程名称
  • func_name 存储函数名称

数据库系统

-- 使用命令连接数据库
mysql- h 数据库IP -P 数据库端口 -u 用户名 -p 密码
mysql -h 192.168.31.1 -P 3306 -u root -p 123 -- 查看数据库版本信息
SELECT version();

数据定义语言 DDL

作用:数据定义语言主要用来定义数据库中的各类对象,包括用户、库、表、视图、索引、触发器、事件、存储过程和函数等。

数据库

创建数据库

  • 基本语法CREATE database

    -- 创建tbl_name数据库
    CREATE DATABASE tbl_name;

    示例:

    -- 创建school数据库
    CREATE DATABASE school;

查看数据库

  • 基本语法 SHOW DATABASES

    -- 查看当前所有数据库名称
    SHOW DATABASES; -- 数据库使用切换
    USE tbl_name;

    示例:

    -- 查看当前所有数据库名称
    SHOW DATABASES; -- 切换使用school库
    USE school;

删除数据库

  • 基本语法 DROP DATABASE

    -- 查看当前所有数据库名称
    DROP DATABASE [ IF EXISTS ] tbl_name;

    示例:

    -- 删除school库,存在报成功,不存在报错
    DROP DATABASE school -- 先判断school库是否存在:存在则删除,不存在不报错
    DROP DATABASE IF EXISTS school;

表单

创建表单

  • 基本语法 CREATE TABLE xxx (列名1 列类型, 列名2 列类型, ...);

    -- 创建表tbl_name,其中包含列id、name、sex
    CREATE TABLE tbl_name(
    id INT NOT NULL,
    name CHAR(10) NOT NULL,
    sex CHAR(2),
    );

    示例:

    DROP TABLE IF EXISTS student;
    -- 创建student表,表中包含id、name
    CREATE TABLE student (
    `id` int(11) NOT NULL,
    `name` varchar(255)
    ) ;

查看表单

  • 基本语法 SHOW TABLES

    -- 查看该库下的所有表
    SHOW TABLES; -- 查看tbl_name的表结构
    DESC tbl_name;

    示例:

    -- 查看该库下的所有表
    SHOW TABLES; -- 查看student的表结构
    DESC student;

编辑表单

  • 基本语法ALTER TABLE

    -- 编辑表名称
    ALTER TABLE tbl_name rename to tbl_name2; -- 编辑表,增加列
    ALTER TABLE tbl_name
    ADD (xx_edu CHAR(50)); -- 编辑表,修改列名称
    ALTER TABLE tbl_name change xx_edu yy_edu CHAR(50); -- 编辑表,修改列类型
    ALTER TABLE tbl_name modify xx_edu CHAR(100); -- 编辑表,删除列
    ALTER TABLE tbl_name DROP xx_edu;

    示例:

    -- 修改表格增加一列,列项名为age
    ALTER TABLE student ADD (age CHAR(50));

删除表单

  • 基本语法DROP table

    DROP TABLE [ IF EXISTS ] tbl_name;

    示例:

    -- 删除student表,存在报成功,不存在报错
    DROP TABLE student; -- 先判断student表是否存在:存在则删除,不存在不报错
    DROP TABLE IF EXISTS student;
  • 基础语法TRUNCATE TABLE

    TRUNCATE TABLE tbl_name;

区别:

  • DROP 可选择删除的记录;TRUNCATE TABLE 删除表中的所有记录;
  • DROP 会返回删除记录数,执行速度不快;TRUNCATE TABLE 不能返回被删除的记录数,执行速度快;‘

视图

视图是对若干张基本表的引用,是一张虚表,查询语句执行的结果,不存储具体的数据(基本表发生了改变,视图也会跟着被改变)

创建视图

  • 基本语法 CREATE VIEW

    -- 创建一个视图view_name,用来查询 tbl_name 的数据:
    CREATE VIEW view_name
    as
    SELECT * FROM tbl_name; # 后面跟SELECT语句

    示例:

    --  先创建一张表
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    `id` int(11) NOT NULL,
    `name` varchar(255)
    ) ; -- 为表创建一个视图
    CREATE VIEW stu_view AS SELECT * FROM student;
  • with check option

    • 遵循视图表的规则 with check option

    • 增加条件后了之后,如果需要在视图表进行操作,需要遵循视图表的规则

    • 如果视图表遵循as SELECT * FROM user where sex='man',那么再视图表中增加的数据,sex只能为man

    CREATE VIEW view_name
    as
    SELECT * FROM user where sex='man'
    with check option;

查看视图

  • 基本语法 SHOW CREATE VIEW

    SHOW CREATE VIEW view_name;

    示例:

    -- 查看创建的视图 stu_view
    SHOW CREATE VIEW stu_view;

修改视图

  • 基本语法 ALTER VIEW

    ALTER VIEW view_name
    as
    SELECT name FROM tbl_name;

    注:修改视图和创建视图语句一样,因为视图是根据真实表的结构创建的,无法修改视图中列的属性。

    示例:

    -- 修改视图获取条件
    ALTER VIEW stu_view
    as
    SELECT name FROM student where id = '1';

使用视图

  • 基本语法 select

    SELECT * FROM view_name;

    示例:

    -- 引用视图
    SELECT * FROM stu_view;

删除视图

  • 基本语法 DROP view

    DROP VIEW view_name;

    示例:

    -- 删除视图 stu_view
    DROP VIEW stu_view;

索引

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库 索引 好比是一本书前面的目录,能加快数据库的查询速度。

转载:https://www.jianshu.com/p/3a181a5ee156

创建索引

  • 创建表时,添加索引

    CREATE TABLE table_name (
    id int(11) NOT NULL,
    title char(255) NOT NULL ,
    PRIMARY KEY (id),
    INDEX index_name (title) # 设置索引
    );

    示例:

    -- 创建tbl_name 表时,添加索引
    DROP TABLE IF EXISTS student;
    CREATE TABLE student(
    id INT NOT NULL,
    name CHAR(10) NOT NULL,
    sex CHAR(2),
    INDEX sex_index(sex) # 设置 sex 为索引
    );
  • 在已存在的表上创建索引

    -- 给tbl_name 的 col_name字段,创建索引
    CREATE INDEX index_name ON tbl_name(col_name); -- 给tbl_name 的 col_name字段,创建唯一索引
    ALTER TABLE tbl_name ADD INDEX index_name(col_name);

    示例:

    -- 先创建一个没有索引的表
    CREATE TABLE people(
    id INT NOT NULL,
    name CHAR(10) NOT NULL,
    age CHAR(2)
    ); -- 为表创建索引
    CREATE INDEX age_index ON people(age);

查看索引

  • 基本语法 SHOW

    -- 查看tbl_name表中的索引;
    SHOW INDEX FROM tbl_name;

    示例:

    -- 查看student表中的索引
    SHOW INDEX FROM student;

删除索引

  • 基本语法 ALTER table tbl_name DROP index

    -- 修改表的方式删除索引
    ALTER TABLE tbl_name DROP INDEX index_name; -- 删除tbl_name表上的index_name索引
    DROP INDEX index_name on tbl_name;

    示例:

    -- 修改表的方式删除索引
    ALTER TABLE student DROP INDEX sex_index; -- 删除tbl_name表上的index_name索引
    DROP INDEX age_index on people;

序列

MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。

https://www.cnblogs.com/csj2018/p/9966144.html

创建序列

  • 创建tbl_name 表时,添加序列: AUTO_INCREMENT

    CREATE TABLE tbl_name(
    id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id);
    name CHAR(10) NOT NULL,
    sex CHAR(2),
    PRIMARY KEY (id)
    );

    示例:

    -- 创建表时,添加序列
    DROP TABLE IF EXISTS student ;
    CREATE TABLE `student`(
    `id` int UNSIGNED not null AUTO_INCREMENT, PRIMARY KEY (id),
    `name` varchar(20) not null,
    `age` date not null
    );
  • 创建序列时,设置序列的开始值

    -- 设置开始值为100
    CREATE TABLE tbl_name(
    id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id),
    name CHAR(10) NOT NULL,
    sex CHAR(2),
    ) AUTO_INCREMENT=100;

查看序列

  • 查看表结构就是查看序列

    -- 查看表结构中的 Extra 字段有AUTO_INCREMENT字段,说明该列就是设置了序列
    DESC tbl_name;

    示例:

    DESC student;

编辑序列

  • 重置序列

    -- 先删除tbl_name表中得id列
    ALTER TABLE tbl_name DROP id; -- 添加 tbl_name新增id字段,并设置为自增长
    ALTER TABLE tbl_name ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST;

    示例:

    -- 存在一份没有设置序列的表
    DROP TABLE IF EXISTS student ;
    CREATE TABLE `student`(
    `id` int UNSIGNED not null,
    `name` varchar(20) not null,
    `age` date not null
    ); -- 先删除tbl_name表中得id列
    ALTER TABLE student DROP id; -- 再表单设置序列
    ALTER TABLE student ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST;

删除序列

  • 基本语法DROP

    -- 删除序列其实就是删除表中的列,或者将表删除
    DROP tbl_name;

    示例:

    DROP TABLE student;

触发器

触发器是一种对象,它能根据对表的操作时间,触发一些动作,这些动作可以是insert、update、delete等修改操作。

https://www.cnblogs.com/phpper/p/7587031.html

创建触发器

  • 基本语法CREATE TRIGGER tri_name

    -- 每次在tbl_name表中插入一行数据,将用户变量str的值设置为 abc
    CREATE TRIGGER tri_name # 创建触发器的名称
    after # 触发时间
    INSERT on tbl_name # 触发事件
    for each row set @str="abc"; # 触发的动作

    示例:

    -- 现在有表如下:
    # 用户 users 表
    DROP TABLE IF EXISTS users;
    CREATE TABLE `users` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
    `add_time` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `name` (`name`(250)) USING BTREE
    ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1; # 日志 logs 表:
    DROP TABLE IF EXISTS logs;
    CREATE TABLE `logs` (
    `Id` int(11) NOT NULL AUTO_INCREMENT,
    `log` varchar(255) DEFAULT NULL COMMENT '日志说明',
    PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志表'; # 创建触发器:
    -- 需求是:当在users中插入一条数据,就会在logs中生成一条日志信息。
    DELIMITER $
    CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW
    BEGIN
    DECLARE s1 VARCHAR(40)character set utf8;
    DECLARE s2 VARCHAR(20) character set utf8; #后面发现中文字符编码出现乱码,这里设置字符集
    SET s2 = " is CREATED";
    SET s1 = CONCAT(NEW.name,s2); #函数CONCAT可以将字符串连接
    INSERT INTO logs(log) values(s1);
    END $
    DELIMITER ;

查看触发器

  • 基本语法

    SHOW TRIGGERS;

触发-触发器

示例:

-- 创建好了触发器,继续在users中插入数据并查看数据
INSERT INTO users(name,add_time) VALUE('周伯通','1634523798'); -- 在来看下logs表,日志会自动记录到logs表中
SELECT * FROM logs;

删除触发器

  • 基本语法 DROP

    DROP TRIGGER tri_name;

    示例:

    DROP TRIGGER user_log;

存储过程

存储过程就是具有名字的一段代码,用来完成一个特定的功能。

https://blog.csdn.net/qq_33157666/article/details/87877246

创建存储过程

  • 基本语法 CREATE procedure pro_name()

    -- 创建一个存储过程,其功能是查询tbl_name表的数据
    CREATE procedure pro_name()
    SELECT * FROM tbl_name;

    示例:

    -- 创建一个表
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    `id` int(11) NOT NULL,
    `name` varchar(255),
    `age` int(3)
    ) ; -- 往表单中插入数据
    INSERT INTO student(id,name,age) VALUE(1,'张三','35'),(2,'李四','26'); -- 创建存储过程
    CREATE PROCEDURE proc()
    SELECT * FROM student;

    执行 CREATE PROCEDURECREATE FUNCTION 语句需要 CREATE ROUTINE 权限。

调用存储过程

  • 基本语法 call

    CALL pro_name();

    示例:

    CALL proc();

删除存储过程

  • 删除存储过程和删除表一样

    DROP PROCEDURE pro_name;

    示例:

    DROP PROCEDURE proc;

存储函数

函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数。

https://blog.csdn.net/pan_junbiao/article/details/86307126

https://blog.csdn.net/u013103102/article/details/104119669

创建存储函数

  • 基本语法 CREATE FUNCTION func_user

    -- 创建存储函数
    CREATE FUNCTION func_name ([param_name type[,...]])
    RETURNS type
    [characteristic ...]
    BEGIN
    routine_body
    END;

    示例:

    -- 先创建tb_user(用户信息表),并添加数据。
    # 创建用户信息表
    DROP TABLE IF EXISTS student;
    CREATE TABLE student(
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
    name VARCHAR(50) NOT NULL COMMENT '用户姓名'
    ) COMMENT = '用户信息表'; -- 添加数据
    INSERT INTO student(name) VALUES('pan_junbiao的博客');
    INSERT INTO student(name) VALUES('KevinPan');
    INSERT INTO student(name) VALUES('pan_junbiao'); -- 创建存储函数
    DELIMITER $$
    CREATE FUNCTION fn_search_name(uid INT)
    RETURNS VARCHAR(50)
    DETERMINISTIC
    BEGIN
    DECLARE NAME VARCHAR(50);
    SELECT name INTO NAME FROM student WHERE id = uid;
    IF NAME IS NULL THEN RETURN(SELECT '查无此人');
    ELSE IF NAME='minton' THEN RETURN(SELECT '哇!是minton大佬');
    ELSE RETURN(SELECT NAME);
    END IF;
    END IF;
    END $$

调用存储函数

  • 基本语法 select

    SELECT func_name()

    示例:

    SELECT fn_search_name(1);

删除存储函数

  • 基本语法 DROP FUNCTION;

    DROP FUNCTION func_name;

    示例:

    DROP FUNCTION fn_search_name;

用户

创建用户

  • 基本语法 CREATE user

    CREATE user 'user_name'@'host_name'
    [IDENTIFIED by 'password']; # user_name:用户名
    # host_name:主机名,不填写默认所有主机
    # password:口令,密码

    示例:

    # 创建用户名为mike,用户密码为123,主机名为localhost;
    DROP USER IF EXISTS 'mike'@'%';
    CREATE USER 'mike'@'%' identified by '123';

修改用户

  • 修改用户账号,基本语法 rename user

    RENAME USER 'old_user'@'host_name' to 'new_user'@'host_name';

    示例:

    RENAME USER 'mike'@'localhost' to 'jake'@'%';
  • 修改用户密码,基本语法 set password

    # for user指定修改密码的用户
    SET PASSWORD [FOR 'user_name'@'host_name'] = PASSWORD('password');

    示例:

    SET PASSWORD FOR 'jake'@'%' = PASSWORD("abc");

删除用户

  • 基本语法 DROP

    DROP USER  [ IF EXISTS ]  'user_name1'@'host_name', 'user_name2'@'host_name';

    示例:

    DROP USER 'jake'@'%';

数据操纵语言 DML

作用:用于添加、删除、更新和查询数据库记录,并检查数据完整性,主要包括的操作有:INSERT,UPDATE,DELETE。

增加数据

  • 基本语法 insert into

    # 向tbl_name 的表中插入多条数据
    INSERT INTO db_name.tbl_name(id,name,age)
    value(1,'张三','35'),(2,'李四','26');

    示例:

    -- 创建一个表单
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    `id` int(11) NOT NULL,
    `name` varchar(255),
    `age` int(3)
    ) ; -- 往表单中插入数据
    INSERT INTO student(id,name,age) VALUE(1,'张三','35'),(2,'李四','26');
  • 插入部分列值的数据

    # insert...set
    INSERT INTO db_name.tbl_name
    SET xx_name='mike',xx_age=1;
  • 插入子查询数据

    # insert...SELECT
    INSERT INTO db_name.tbl_name
    SELECT * FROM id ='1';
  • 插入新数据的列为自增长,使用 0 表示

    INSERT INTO db_name.tbl_name
    VALUE(3,'王五','11');
  • 插入新数据要为默认值时,可以使用 default 表示

    INSERT INTO db_name.tbl_name
    VALUE(id,'name',default);

修改数据

  • 基本语法 update

    # 修改tbl_name表中,id为1的数据,修改名称为micke
    UPDATE db_name.tbl_name
    SET name='mike'
    WHERE id=1;

    示例:

    UPDATE student SET name='王五' WHERE id='1';

删除数据

  • 基本语法delete FROM

    DELETE FROM db_name WHERE xx=xx;

    示例:

    # 删除tbl_name表中,id 为 1 的数据
    DELETE FROM student WHERE id='1';

数据查询语言 DQL

作用:主要用来查看表中的数据,也是平时使用最多的操作,主要命令为:SELECT

单表查询

  • 基本语法 SELECT * FROM tbl_name where id='1';

    SELECT col_name			# col_name 输出字段
    FROM tbl_name # 查询表名
    [where xx_name='mike'] # 数据条件选择
    [group by {}]
    [having]
    [order by {col_name} ASC|DESC] # 对结果进行排序
    [limit {}] # 限制行数

    示例:

    -- 创建一个表,并添加数据
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    `id` int(11) NOT NULL,
    `name` varchar(255),
    `age` int(5),
    `sex` varchar(10)
    ); -- 往表单中插入数据
    INSERT INTO student(id,name,age,sex) VALUE(1,'张三','35','boy'),(2,'李四','26','girl'),(3,'王五','13','boy'); -- 使用selct命令所有表的所有数据信息
    SELECT * FROM student;
子句 说明 是否必须使用
select 要返回的列或表达式
from 从中检索数据的表 仅从表选择数据时使用
where 行级过滤
group by 分组说明 仅在按组计算聚合时使用
having 组级过滤
order by 输出排序顺序
limit 要检索的行数

重命名 - as

  • 替换列的名称 as

    # as后就是更改后的列名
    SELECT col_name AS '名称' FROM tbl_name;

    示例:

    SELECT name AS '姓名' FROM student;

  • 替换查询结果中的数据 case

    SELECT col_name, case where col_sex='man' then '男'	# 将数据为man的输出为"男"
    else '女' # 除man以外的数据,输出为"女"
    end as 性别 # 列表的名称
    FROM tbl_name;
  • 计算列值

    SELECT  xx_id+100,xx_name,xx_sex
    FROM tbl_name;
    # 输出后xx_id的数据增加100
    # 例:xx_id=1,输出结果为101
  • 聚合函数

函数名 说明
count 求组中,返回int类型整数
max 最大值
min 最小值
sum 求和
avg 求平均值
std 或 srddev 返回给定表达式中所有值得标准值
variance 方差
group_concat 返回由属于一组的列值连接组合而成的结果
bit_and 逻辑与
bit_or 逻辑或
bit_xor 逻辑异或

where

  • 比较运算符

    比较运算符 说明
    = 等于
    <> 或 != 不等于
    < 小于
    <= 小于等于
    > 大于
    >= 大于等于
    <=> 不会返回unknow
  • 判定范围

    判定符 说明 示例
    between 在....之间 where id between 901 and 902;
    in 枚举 where id in(901,902);
    is null 空值 where id is null;

子查询

  • 子查询 in

    SELECT * FROM tbl_name1
    WHERE tbl_name1.xx_id
    IN(
    SELECT tbl_name2.xx_id
    FROM tbl_name2
    WHERE xx_name='mike'
    );
    # xx_id分别为tbl_name1,tbl_name2的主/外键

分组 - group by

  • 基本语法group by

    SELECT xx_id,xx_sex,count(*) as "人数"
    FROM tbl_name
    group by xx_id,xx_sex; # 输出相同xx_id和xx_sex的人数
  • 分组汇总 with rollup

    SELECT xx_id,xx_sex,count(*) as "人数"
    FROM tbl_name
    group by xx_id,xx_sex
    with rollup; # 输出相同xx_id和xx_sex的人数
    # with rollup输出xx_id,xx_sex,count的总数

介于两个值中间 - BETWEEN ... AND

搜索指定的字符 - LIKE

去重 --- DISTINCT

having

  • 过滤分组

    SELECT xx_id,xx_name
    FROM tbl_name
    group by xx_id,xx_name
    having count(*) < 3; # 输出相同xx_id和xx_sex的少于3人的数据

order by

  • 排序 oder by col_name;ASC,升序;DESC,降序

    SELECT *
    FROM tbl_name
    WHERE xx_sex='man'
    order by xx_id DESC; # 输出xx_sex为man的人数,排列顺序为降序

Limit

  • 输出数据的行数 limit

    # 输出从第五行(4)开始,后三行(3)的数据
    # 计算机计数从0开始 SELECT *
    FROM tbl_name
    limit 4,3;

联表查询

交叉连接

  • cross join

    SELECT *
    FROM tbl_name 1
    cross join tbl_name2; # 或者
    SELECT *
    FROM tbl_name1,tbl_name2;

内连接

  • tbl_name1的主键和tbl_name2的外键相等的时候,需要使用内连接:inner join...on...

    # FROM 表1 inner join 表2 on 键名称|外键=主键
    SELECT *
    FROM tbl_name1
    inner join tbl_name2
    on some conditions; # some conditions 可以这样表示
    # tbl_name1.xx_name = tbl_name2.xx_name
    # 或者
    # xx_name='mike'

左连接

  • 以左表为基表left join

    # FROM 表1 left join 表2 on 键名称|外键=主键
    SELECT *
    FROM tbl_name1
    left join tbl_name2
    on some conditions; # 输出tbl_name1的表数据

右连接

  • 以右表为基表right join

    # FROM 表1 right join 表2 on 键名称
    SELECT *
    FROM tbl_name1
    right join tbl_name2
    on some conditions; # 输出tbl_name2的表数据

数据控制语言 DCL

作用:用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。

授予权限

  • 基本语法 grant

    GRANT priv_type [column_list]
    ON [object_type] priv_level
    TO user_specification
    [with grant option]; # priv_type:指定权限名称,如SELECT、insert、delete等
    # column_list:指定权限要授予表中的那些具体列
    # object_type:指定权限授予对象和级别;可以看到哪些表
    # user_specification:用户名,用于指定被授予权限的用户user
    # with grant option:用户实现权限的转移或限制

    示例:

    -- 创建一个表
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
    `id` int(11) NOT NULL,
    `name` varchar(255),
    `age` int(5)
    ) ; -- 授予mike在数据库db_name的表tbl_name上,拥有列xx_id、xx_name的SELECT、update权限
    GRANT SELECT,UPDATE(id,name)
    ON student
    TO 'mike'@'localhost'; -- 刷新权限
    FLUSH PRIVILEGES;
  • grant语句授权时,可以同时创建用户

    -- 授权给 mike 用户,关于 tbl_name 表的 SELECT 权限
    GRANT SELECT # 授予表的SELECT权限
    ON db_name.tbl_name # 授予的表名称
    TO 'user_name'@'host_name' identified by 'password'; # 用户名称及密码 -- 刷新权限
    FLUSH PRIVILEGES;
  • 授予数据库所有权限

    -- 授予mike 的db_name库中所有表的所有权限
    GRANT ALL # 所有操作权限
    ON db_name.* # db_name的所有表
    TO 'user_name'@'host_name'; -- 刷新权限
    FLUSH PRIVILEGES;

查看权限

  • 查看某个用户所授予的权限

    -- 查询给 'mike'@'host_name' 所授予的所有权限
    SHOW GRANTS FOR 'user_name'@'host_name';

    示例:

    SHOW GRANTS FOR 'mike'@'loaclhost';

回收权限

  • 基本语法 revoke

    REVOKE priv_type [column_list]
    ON [object_type] priv_level
    FROM user_specification;

    示例:

    -- 回收用户mike,在数据库db_name的tbl_name表,delete的权限
    REVOKE UPDATE
    ON student
    FROM 'mike'@'localhost'; -- 刷新权限
    FLUSH PRIVILEGES;

备份恢复

备份数据

  • 基本语法 SELECT into ... outfile

    SELECT * into outile 'file_name' export_options;

    示例:

    # 导出名为backupfile.txt的备份,
    # 字段值如果是字符用双引号标注 optionally enclosed
    # 字段值之间用逗号隔开 fields terminated
    # 每行以问号结束 lines terminated SELECT * FROM db_name.tbl_name
    into outfile 'C:/backupfile.txt'
    fields terminated by ','
    optionally enclosed by ""
    lines terminated by ? ;

恢复数据

  • 基本语法 load data ... infile

    load data infile 'file_name'
    into table tbl_name;

    示例:

    load data infile 'C:/backupfile.txt'
    into table db_name.tbl_name
    fields terminated by ','
    optionally enclosed by ""
    lines terminated by '?' ;

导入导出

导出

  • 导出数据库

    # 将本地mysql服务器上的bs_audit数据库导出到本地的bs_audit.bak文件中:
    use <数据库名>;
    mysqldump -uroot -p123456 --databases bs_audit > bs_audit.bak;
  • 导出表

    # 将本地主机上的stranger_info数据库的tb2数据表导出到本地的stranger_info.bak文件中:
    mysqldump -uroot -pAnkki_mySQL123 bs_audit stranger_info > stranger_info.bak;

导入

  • 导入数据库

    # 进入mysql中,使用source指令完成数据库导入,如下:
    
    # 将原有的数据库删除
    drop database bs_audit;
    # 创建全新的数据库
    create database bs_audit;
    # 进入数据库环境
    use bs_audit;
    # 导入备份文件恢复
    source /root/bs_audit.bak;
  • 导入表

    # 进入数据库环境
    use bs_audit;
    # 若没有此表,则需创创建;若存在,不需执行
    create database stranger_info;
    # 导入备份文件恢复
    source /root/data/stranger_info.bak;

Mysql- DDL/DML/DQL/DCL 数据库基本操作语句(持续更新中)的更多相关文章

  1. SQL语言:DDL/DML/DQL/DCL

    SQL (Structure Query Language)语言是数据库的核心语言. SQL 的发展是从1974年开始的,其发展过程如下: 1974年-----由Boyce和Chamberlin提出, ...

  2. MySQL与MSSQL的一些语法差异(持续更新中)

    分号不能少:分号不能少:分号不能少:重要的事情说3遍 Insert或者Update的数据包含反斜杠\的时候需要进行转义\\,例:insert into tablename(id,name) value ...

  3. SqlServer学习-常用的sql语句-持续更新中

    1.获取数据库下的所有表名 select TABLE_NAME from information_schema.tables where TABLE_TYPE='Base TABLE' 2.随机取出1 ...

  4. MySQL操作中的一些细节及良好习惯--------持续更新中...

    1.尽量不要写太过复杂的SQL查询,不要想着非要一次性将结果全部以前端要求的形式返回出来,可以多次分开查询,这样逻辑清晰,问题解决速度快,方便维护,并且SQL的效率也高. 2.在使用联表查询的时候,关 ...

  5. VB导入Excel到数据库软件(持续更新中。)

    1.选择Excel文件版本 电脑上用的 Office2010 引用:Mircosoft Excel 14.0 Object Library 2.选择Excel文件 '选择文件公共变量 Public D ...

  6. DCL,DDL,DML,DQL

    DCL(Data Control Language)是数据库控制语言. 是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句. 在默认状态下,只有sysadmi ...

  7. oracle数据库学习记录(持续更新中...)

    --------------------------------------------day1------------------------------------------------- 1. ...

  8. MYSQL操作的一些知识点,持续更新中····

    基本概念——库 1.数据库服务器:库——>表——>行/列 2.cmd下链接: mysql – uroot –proot 3.创建库:create database  php; 3.看数据库 ...

  9. Mysql注入小tips --持续更新中

    学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...

  10. 基础学习:MYSQL命令大全(持续更新中---最近一次:2019.12.6)

    启动mysql : mysql -hlocalhost -uroot -p创建数据库:create database 数据库名字;指定要操作的数据库:use 数===据库名字;查看数据表建表语句:sh ...

随机推荐

  1. 11. ASCII, unicode, utf-8, gbk的区别

    这是几种编码方式 ASCII是包含英文字母数字特殊字符等, 长度是1字节, 前128个是基础ASCII码, 128个以后是扩展ASCII码 GBK是国标扩展码, 长度2字节, 表示汉字以及各少数民族语 ...

  2. ImageUtils excel 中 emf 转图片(解决图片上部分显示不全问题)图片转文字

    excel 中ActiveX 工具 中的textbox  ,以及公式 解析后为emf 图片, emf 转图片(解决图片上部分显示不全问题) 图片转文字 /*********************** ...

  3. 基于element-ui进行二次封装的表格组件

    <!-- * @description 表格组件 * @fileName TableList.vue * @authorQ * @date 2021/05/15 15:13:45 --> ...

  4. Promise的使用及原理

    此文章主要讲解核心思想和基本用法,想要了解更多细节全面的使用方式,请阅读官方API 这篇文章假定你具备最基本的异步编程知识,例如知道什么是回调,知道什么是链式调用,同时具备最基本的单词量,例如page ...

  5. MyBatis 延迟加载代码详解

    在我们的实际开发中,会面临各种各样的查询操作.如果单表查询能满足业务需求.尽量用单表查询,因为单表查询的效率比多表关联查询快. 那么当业务需求需要用到的数据来源于多张表的时候,单表查询无法解决,Myb ...

  6. UI/UE设计学习路线图(超详细)

    很多小伙伴认为ui设计很简单,就是用相关的软件设计制作图片.界面等.其实不然,UI设计融合了很多学科内容.要从一个完全没有基础的人成长为一个ui设计者,该如何学习呢?主要分为基础阶段和专业课程阶段,其 ...

  7. 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】

    比赛传送门:https://ac.nowcoder.com/acm/contest/52441 感觉整体难度有点偏大. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通 ...

  8. 2020寒假学习笔记15------Spark基础实验

    今天又开始重新做实验六,第一题做的比较顺利,运行结果如下: 等到第二题就出现了各种各样的错误,开始运行telnet localhost 44444命令时出现bash: telnet: command ...

  9. 数据挖掘系统聚类—R实现

    系统聚类法 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,最后的结果是希望同类之间的差异性尽可能小,不同类之间的差异性尽可能大.不同的类具有能够表达异于其他类的指标,这样针对不同的类,后续就 ...

  10. 有关SpringMVC的一些知识点

    Spring的获取对象 1.获取原生对象,直接在在方法李传http相关的对象.2.接受简单数据类型,接受简单数据类型(八种基本类型)参数直接在handler方法里声明,会自动把相同类型进行绑定,但是接 ...