Mysql基础

数据库基础

数据库的基本概念

  1. 数据库的英文单词: DataBase 简称 : DB

  2. 什么数据库?

    • 用于存储和管理数据的仓库。

  3. 数据库的特点:

    • 持久化存储数据的。其实数据库就是一个文件系统

    • 方便存储和管理数据

    • 使用了统一的方式操作数据库 -- SQL

 * MySQL服务启动
         1. 手动。
         2. cmd--> services.msc 打开服务的窗口
         3. 使用管理员打开cmd
             * net start mysql : 启动mysql的服务
             * net stop mysql:关闭mysql服务
 * MySQL登录
         1. mysql -uroot -p密码
         2. mysql -hip -uroot -p连接目标的密码
         3. mysql --host=ip --user=root --password=连接目标的密码
 * MySQL退出
         1. exit
         2. quit

SQL

什么是SQL?

Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。

SQL通用语法

  1. SQL 语句可以单行或多行书写,以分号结尾。

  2. 可使用空格和缩进来增强语句的可读性。

  3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

  4. 3 种注释

  • 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)

  • 多行注释: /* 注释 */

SQL分类

  • DDL 数据定义语言 (Data Definition Language)

    创建数据库 创建表 创建视图 创建索引 修改数据库 删除数据库 修改表 删除表

    create ‐‐ 创建 alter ‐‐ 修改 drop ‐‐ 删除

  • DML 数据操作语言 (Data Manipulation Language)

    操作数据 插入数据(insert) 修改数据(update) 删除数据(delete) ;用来对数据库中表的数据进行增删改

  • DQL 数据查询语言 (Data Query Language)

    从表中查询数据(select)

  • DCL 数据控制语言 (Data Control Language) (了解)

    用来定义数据库的访问权限和安全级别,及创建用户,关键字:GRANT, REVOKE 等

     

DDL:操作数据库、表

操作数据库:CRUD

 1. C(Create):创建
         * 创建数据库:
             * create database 数据库名称;
         * 创建数据库,判断不存在,再创建:
             * create database if not exists 数据库名称;
         * 创建数据库,并指定字符集
             * create database 数据库名称 character set 字符集名;
 ​
         * 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
             * create database if not exists db4 character set gbk;
 2. R(Retrieve):查询
         * 查询所有数据库的名称:
             * show databases;
         * 查询某个数据库的字符集:查询某个数据库的创建语句
             * show create database 数据库名称;
 3. U(Update):修改
         * 修改数据库的字符集
             * alter database 数据库名称 character set 字符集名称;
 4. D(Delete):删除
         * 删除数据库
             * drop database 数据库名称;
         * 判断数据库存在,存在再删除
             * drop database if exists 数据库名称;
 5. 使用数据库
         * 查询当前正在使用的数据库名称
             * select database();
         * 使用数据库
             * use 数据库名称;

操作表

 1. C(Create):创建
         * 语法:
             create table 表名(
                 列名1 数据类型1,
                 列名2 数据类型2,
                 ....
                 列名n 数据类型n
             );
             * 注意:最后一列,不需要加逗号(,)
             * 数据库类型:
                 1. int:整数类型
                     * age int,
                 2. double:小数类型
                     * score double(5,2)
                 3. date:日期,只包含年月日,yyyy-MM-dd
                 4. datetime:日期,包含年月日时分秒  yyyy-MM-dd HH:mm:ss
                 5. timestamp:时间错类型  包含年月日时分秒     yyyy-MM-dd HH:mm:ss    
                     * 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
 ​
                 6. varchar:字符串
                     * name varchar(20):姓名最大20个字符
                     * zhangsan 8个字符  张三 2个字符
         * 创建表
             create table student(
                 id int,
                 name varchar(32),
                 age int ,
                 score double(4,1),
                 birthday date,
                 insert_time timestamp
             );
         * 复制表:
             * create table 表名 like 被复制的表名;
 2. R(Retrieve):查询
         * 查询某个数据库中所有的表名称
             * show tables;
         * 查询表结构
             * desc 表名;
     3. U(Update):修改
         1. 修改表名
             alter table 表名 rename to 新的表名;
         2. 修改表的字符集
             alter table 表名 character set 字符集名称;
         3. 添加一列
             alter table 表名 add 列名 数据类型;
         4. 修改列名称 类型
             alter table 表名 change 列名 新列别 新数据类型;
             alter table 表名 modify 列名 新数据类型;
         5. 删除列
             alter table 表名 drop 列名;
     4. D(Delete):删除
         * drop table 表名;
         * drop table  if exists 表名 ;

DML:增删改表中数据

 1. 添加数据:
     * 语法:
         * insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
     * 注意:
         1. 列名和值要一一对应。
         2. 如果表名后,不定义列名,则默认给所有列添加值
             insert into 表名 values(值1,值2,...值n);
         3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
 2. 删除数据:
     * 语法:
         * delete from 表名 [where 条件]
     * 注意:
         1. 如果不加条件,则删除表中所有记录。
         2. 如果要删除所有记录
             1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
             2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
 3. 修改数据:
     * 语法:
         * update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
 ​
     * 注意:
         如果不加任何条件,则会将表中所有记录全部修改。

DQL:查询表中的记录

 * select * from 表名;
 ​
 1. 语法:
     select
         字段列表
     from
         表名列表
     where
         条件列表
     group by
         分组字段
     having
         分组之后的条件
     order by
         排序
     limit
         分页限定
 2. 基础查询
     1. 多个字段的查询
         select 字段名1,字段名2... from 表名;
         * 注意:
             * 如果查询所有字段,则可以使用*来替代字段列表。
     2. 去除重复:
         * distinct
     3. 计算列
         * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
         * ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
             * 表达式1:哪个字段需要判断是否为null
             * 如果该字段为null后的替换值。
     4. 起别名:
         * as:as也可以省略
 3. 条件查询
     1. where子句后跟条件
     2. 运算符
         * > 、< 、<= 、>= 、= 、<>
         * BETWEEN...AND  
         * IN( 集合) 
         * LIKE:模糊查询
             * 占位符:
                 * _:单个任意字符
                 * %:多个任意字符
         * IS NULL  
         * and  或 &&
         * or  或 || 
         * not  或 !
             -- 查询年龄大于20岁
 ​
             SELECT * FROM student WHERE age > 20;
 ​
             SELECT * FROM student WHERE age >= 20;
 ​
             -- 查询年龄等于20岁
             SELECT * FROM student WHERE age = 20;
 ​
             -- 查询年龄不等于20岁
             SELECT * FROM student WHERE age != 20;
             SELECT * FROM student WHERE age <> 20;
 ​
             -- 查询年龄大于等于20 小于等于30
 ​
             SELECT * FROM student WHERE age >= 20 &&  age <=30;
             SELECT * FROM student WHERE age >= 20 AND  age <=30;
             SELECT * FROM student WHERE age BETWEEN 20 AND 30;
 ​
             -- 查询年龄22岁,18岁,25岁的信息
             SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
             SELECT * FROM student WHERE age IN (22,18,25);
 ​
             -- 查询英语成绩为null
             SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
 ​
             SELECT * FROM student WHERE english IS NULL;
 ​
             -- 查询英语成绩不为null
             SELECT * FROM student WHERE english  IS NOT NULL;
 ​
             -- 查询姓马的有哪些? like
             SELECT * FROM student WHERE NAME LIKE '马%';
             -- 查询姓名第二个字是化的人
 ​
             SELECT * FROM student WHERE NAME LIKE "_化%";
 ​
             -- 查询姓名是3个字的人
             SELECT * FROM student WHERE NAME LIKE '___';            
 ​
             -- 查询姓名中包含德的人
             SELECT * FROM student WHERE NAME LIKE '%德%';

 

DQL:查询语句

 1. 排序查询
     * 语法:order by 子句
         * order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...
 ​
     * 排序方式:
         * ASC:升序,默认的。
         * DESC:降序。
 ​
     * 注意:
         * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
 2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。
     1. count:计算个数
         1. 一般选择非空的列:主键
         2. count(*)
     2. max:计算最大值
     3. min:计算最小值
     4. sum:计算和
     5. avg:计算平均值
     
     * 注意:聚合函数的计算,排除null值。
     解决方案:
     1. 选择不包含非空的列进行计算
     2. IFNULL函数
 3. 分组查询:
     1. 语法:group by 分组字段;
     2. 注意:
         1. 分组之后查询的字段:分组字段、聚合函数
         2. where 和 having 的区别?
             1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
             2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
 ​
         -- 按照性别分组。分别查询男、女同学的平均分
 ​
         SELECT sex , AVG(math) FROM student GROUP BY sex;
         
         -- 按照性别分组。分别查询男、女同学的平均分,人数
         
         SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
         
         --  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
         SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
         
         --  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
         SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
         
         SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
 4. 分页查询
         1. 语法:limit 开始的索引,每页查询的条数;
         2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
             -- 每页显示3条记录 
             SELECT * FROM student LIMIT 0,3; -- 第1页
 ​
             SELECT * FROM student LIMIT 3,3; -- 第2页
 ​
             SELECT * FROM student LIMIT 6,3; -- 第3页
 ​
         3. limit 是一个MySQL"方言"

DQL:多表查询

查询语法:

     select
         列名列表
     from
         表名列表
     where....

准备sql:

     # 创建部门表
     CREATE TABLE dept(
         id INT PRIMARY KEY AUTO_INCREMENT,
         NAME VARCHAR(20)
     );
     INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');
     # 创建员工表
     CREATE TABLE emp (
         id INT PRIMARY KEY AUTO_INCREMENT,
         NAME VARCHAR(10),
         gender CHAR(1), -- 性别
         salary DOUBLE, -- 工资
         join_date DATE, -- 入职日期
         dept_id INT,
         FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键)
     );
     INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1);
     INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2);
     INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
     INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);
     INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);

笛卡尔积:

  • 有两个集合A,B .取这两个集合的所有组成情况。

  • 要完成多表查询,需要消除无用的数据

多表查询的分类:

  1. 内连接查询:

     1. 隐式内连接:使用where条件消除无用数据
                 * 例子:
                     -- 查询所有员工信息和对应的部门信息
     ​
                     SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
     ​
                     -- 查询员工表的名称,性别。部门表的名称
                     SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
     ​
                     SELECT 
                         t1.name, -- 员工表的姓名
                         t1.gender,-- 员工表的性别
                         t2.name -- 部门表的名称
                     FROM
                         emp t1,
                         dept t2
                     WHERE 
                         t1.`dept_id` = t2.`id`;
     2. 显式内连接:
                 * 语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件
                 * 例如:
                     * SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;   
                     * SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`; 
     ​
     3. 内连接查询:
                 1. 从哪些表中查询数据
                 2. 条件是什么
                 3. 查询哪些字段                   
  2. 外链接查询:

    1. 左外连接:
    			* 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
    			* 查询的是左表所有数据以及其交集部分。
    			* 例子:
    				-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
    				SELECT 	t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
    2. 右外连接:
    			* 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
    			* 查询的是右表所有数据以及其交集部分。
    			* 例子:
    				SELECT 	* FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;
  3. 子查询:

    * 概念:查询中嵌套查询,称嵌套查询为子查询。
    			-- 查询工资最高的员工信息
    			-- 1 查询最高的工资是多少 9000
    			SELECT MAX(salary) FROM emp;
    			
    			-- 2 查询员工信息,并且工资等于9000的
    			SELECT * FROM emp WHERE emp.`salary` = 9000;
    			
    			-- 一条sql就完成这个操作。子查询
    			SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);
    
    * 子查询不同情况
    			1. 子查询的结果是单行单列的:
    				* 子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =
    				* 
    				-- 查询员工工资小于平均工资的人
    				SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
    			2. 子查询的结果是多行单列的:
    				* 子查询可以作为条件,使用运算符in来判断
    				-- 查询'财务部'和'市场部'所有的员工信息
    				SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部';
    				SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2;
    				-- 子查询
    				SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');
    
    			3. 子查询的结果是多行多列的:
    				* 子查询可以作为一张虚拟表参与查询
    				-- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
    				-- 子查询
    				SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2
    				WHERE t1.id = t2.dept_id;
    				
    				-- 普通内连接
    				SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` >  '2011-11-11'

约束

* 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。	
* 分类:
	1. 主键约束:primary key
	2. 非空约束:not null
	3. 唯一约束:unique
	4. 外键约束:foreign key

非空约束:not null,值不能为null

  1. 创建表时添加约束

    CREATE TABLE stu(
    			id INT,
    			NAME VARCHAR(20) NOT NULL -- name为非空
    		);
  2. 创建表完后,添加非空约束

    ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
  3. 删除name的非空约束

    ALTER TABLE stu MODIFY NAME VARCHAR(20);

唯一约束:unique,值不能重复

  1. 创建表时,添加唯一约束

    CREATE TABLE stu(
    		id INT,
    		phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
    		);
    		* 注意mysql中,唯一约束限定的列的值可以有多个null	
  2. 删除唯一约束

    ALTER TABLE stu DROP INDEX phone_number;
  3. 在创建表后,添加唯一约束

    ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

主键约束:primary key

注意:

  • 含义:非空且唯一

  • 一张表只能有一个字段为主键

  • 主键就是表中记录的唯一标识

  1. 在创建表时,添加主键约束

    create table stu(
    			id int primary key,-- 给id添加主键约束
    			name varchar(20)
    		);
  2. 删除主键

    -- 错误  alter table stu modify id int ;
    		ALTER TABLE stu DROP PRIMARY KEY;
  3. 创建完表后,添加主键

    ALTER TABLE stu MODIFY id INT PRIMARY KEY;
  4. 自动增长:

    1.  概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
    
    2. 在创建表时,添加主键约束,并且完成主键自增长
    create table stu(
    id int primary key auto_increment,-- 给id添加主键约束
    name varchar(20)
    );
    3. 删除自动增长
    ALTER TABLE stu MODIFY id INT;
    4. 添加自动增长
    ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

外键约束:foreign key,让表于表产生关系,从而保证数据的正确性

  1. 在创建表时,可以添加外键

    --语法:
    create table 表名(
    				....
    				外键列
    				constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
    			);
  2. 删除外键

    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
  3. 创建表之后,添加外键

    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
  4. 级联操作

    1. 添加级联操作
    语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 
    	 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ;
    2. 分类:
    	 1. 级联更新:ON UPDATE CASCADE 
         2. 级联删除:ON DELETE CASCADE 

事务

事务的基本介绍

  1. 概念:

    如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

  2. 操作:

  1. 开启事务: start transaction;
  2. 回滚:rollback;
  3. 提交:commit;
  1. 例子:

    CREATE TABLE account (
    			id INT PRIMARY KEY AUTO_INCREMENT,
    			NAME VARCHAR(10),
    			balance DOUBLE
    		);
    		-- 添加数据
    		INSERT INTO account (NAME, balance) VALUES ('zhangsan', 1000), ('lisi', 1000);
    		SELECT * FROM account;
    		UPDATE account SET balance = 1000;
    		-- 张三给李四转账 500 元
    		
    		-- 0. 开启事务
    		START TRANSACTION;
    		-- 1. 张三账户 -500
    		
    		UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';
    		-- 2. 李四账户 +500
    		-- 出错了...
    		UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';
    		
    		-- 发现执行没有问题,提交事务
    		COMMIT;
    		
    		-- 发现出问题了,回滚事务
    		ROLLBACK;4. MySQL数据库中事务默认自动提交
  2. MySQL数据库中事务默认自动提交

    • 事务提交的两种方式:

      • 自动提交:

        • mysql就是自动提交的

          • 一条DML(增删改)语句会自动提交一次事务。

            • 手动提交:

              • Oracle 数据库默认是手动提交事务

                • 需要先开启事务,再提交

      • 修改事务的默认提交方式:

        • 查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交 0 代表手动提交

          • 修改默认提交方式: set @@autocommit = 0;

事务的四大特征

  1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。

  2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。

  3. 隔离性:多个事务之间。相互独立。

  4. 一致性:事务操作前后,数据总量不变

事务的隔离级别(了解)

概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

  • 存在问题:

    1. 脏读:一个事务,读取到另一个事务中没有提交的数据

    2. 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。

    3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。

  • 隔离级别:

    1. read uncommitted:读未提交

      • 产生的问题:脏读、不可重复读、幻读

    2. read committed:读已提交 (Oracle)

      • 产生的问题:不可重复读、幻读

    3. repeatable read:可重复读 (MySQL默认)

      • 产生的问题:幻读

    4. serializable:串行化

      • 可以解决所有的问题

    • 注意:隔离级别从小到大安全性越来越高,但是效率越来越低

    • 数据库查询隔离级别:

      • select @@tx_isolation;

    • 数据库设置隔离级别:

      • set global transaction isolation level 级别字符串;

  • 演示:

    set global transaction isolation level read uncommitted;
    start transaction;
    -- 转账操作
    update account set balance = balance - 500 where id = 1;
    update account set balance = balance + 500 where id = 2;

DCL:管理用户,授权

* SQL分类:
	1. DDL:操作数据库和表
	2. DML:增删改表中数据
	3. DQL:查询表中数据
	4. DCL:管理用户,授权

* DBA:数据库管理员

* DCL:管理用户,授权
	1. 管理用户
		1. 添加用户:
			* 语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
		2. 删除用户:
			* 语法:DROP USER '用户名'@'主机名';
		3. 修改用户密码:
			
			UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
			UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';
			
			SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
			SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');

			* mysql中忘记了root用户的密码?
				1. cmd -- > net stop mysql 停止mysql服务
					* 需要管理员运行该cmd

				2. 使用无验证方式启动mysql服务: mysqld --skip-grant-tables
				3. 打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功
				4. use mysql;
				5. update user set password = password('你的新密码') where user = 'root';
				6. 关闭两个窗口
				7. 打开任务管理器,手动结束mysqld.exe 的进程
				8. 启动mysql服务
				9. 使用新密码登录。
		4. 查询用户:
			-- 1. 切换到mysql数据库
			USE myql;
			-- 2. 查询user表
			SELECT * FROM USER;
			
			* 通配符: % 表示可以在任意主机使用用户登录数据库

	2. 权限管理:
		1. 查询权限:
			-- 查询权限
			SHOW GRANTS FOR '用户名'@'主机名';
			SHOW GRANTS FOR 'lisi'@'%';

		2. 授予权限:
			-- 授予权限
			grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
			-- 给张三用户授予所有权限,在任意数据库任意表上
			
			GRANT ALL ON *.* TO 'zhangsan'@'localhost';
		3. 撤销权限:
			-- 撤销权限:
			revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
			REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';

数据库的备份和还原

1. 命令行:
	* 语法:
		* 备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
		* 还原:
			1. 登录数据库
			2. 创建数据库
			3. 使用数据库
			4. 执行文件。source 文件路径
2. 图形化工具:

目录

数据库基础

数据库的基本概念

SQL

什么是SQL?

SQL通用语法

SQL分类

DDL:操作数据库、表

操作数据库:CRUD

操作表

DML:增删改表中数据

DQL:查询表中的记录

DQL:查询语句

DQL:多表查询

查询语法:

准备sql:

笛卡尔积:

多表查询的分类:

约束

非空约束:not null,值不能为null

唯一约束:unique,值不能重复

主键约束:primary key

外键约束:foreign key,让表于表产生关系,从而保证数据的正确性

事务

事务的基本介绍

事务的四大特征

事务的隔离级别(了解)

DCL:管理用户,授权

数据库的备份和还原


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值