ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql基本语法(持续更新中)

2022-01-17 12:34:13  阅读:149  来源: 互联网

标签:name -- 更新 语法 tbl student Mysql TABLE id


Mysql


语言定义

  • 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;
    

image

编辑序列

  • 重置序列

    -- 先删除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;
    

image

  • 替换查询结果中的数据 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;
    

标签:name,--,更新,语法,tbl,student,Mysql,TABLE,id
来源: https://www.cnblogs.com/mzline/p/15812881.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有