|
|
什么是数据库数据库(DB,DataBase)概念:数据仓库,软件,安装在操作系统之上作用:存储数据,管理数据
数据库分类关系型数据库:·MySQL,Oracle,Sql Server,DB2,SQLlite·通过表和表之间,行和列之间的关系进行数据的存储非关系型数据库:·Redis,MongDB·非关系型数据库,对象存储,通过对象的自身的属性来决定DBMS(数据库管理系统)·数据库的管理软件,科学有效的管理数据,维护和获取数据·MySQL,数据库管理系统
MySQL是一个关系型数据库管理系统
DDL 数据定义语言 CREATE、DROP、ALTER、TRUNCATEDML 数据操作语言 INSERT、UPDATE、DELETE、CALLDQL 数据查询语言 SELECTDCL 数据控制语言 GRANT、REVOKE
创建数据库 create database <name>
一、DDL1、操作数据库1.1查询数据库查询MySQL中所有的数据库 show databases;查询当前正在使用的数据库 select database();1.2创建数据库普通创建 create database创建并判断 create database if not exists 数据库名称;创建一个数据库,并指定字符集 create database itheima default charset utf8mb4;1.3删除数据库普通删除 drop database 数据库名称;删除并判断 drop database if exists 数据库名称;1.4使用数据库Use 数据库名称;
2、操作表1.1 创建(CREATE) CREATE TABLE 表名(字段名1 数据类型,字段名2 数据类型);1.2 查询(retrieve)SHOW TABLES;DESC 表名;SHOW CREATE TABLE 表名;1.3 修改(ALTER)修改表名ALTER TABLE 表名 RENAME TO 新的表名;添加一列ALTER TABLE 表名 ADD 列名 数据类型 [COMMENT注释];修改某列(字段)数据类型ALTER TABLE 表名 MODIFY 列名 新的数据类型;修改列名和数据类型ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型 [COMMENT注释];删除列(字段)ALTER TABLE 表名 DROP 列名;1.4删除(DROP)普通删除DROP TABLE 表名;删除并判断DROP TABLE IF EXISTS 表名;删除指定表并重新创建TRUNCATE TABLE 表名;
二、DML1.添加数据(INSERT)给指定列添加数据INSERT INTO 表名(列名1,[列名2],[...) VALUES (值1,[值2],[...]);给全部列添加数据INSERT INTO 表名[所有列名] VALUES (值1,值2,...);批量添加数据INSERT INTO 表名(列名1,[列名2],[...])VALUES(值1,值2,...),[(值1,值2,...)],[...];批量给全部列添加数据INSERT INTO 表名[所有列名] VALUES(值1,值2,...),(值1,值2,...),...;2.修改数据(UPDATE)UPDATE 表名 SET 列名1=值1,[列名2=值2],[...][WHERE条件];如果不使用WHERE条件,会将表中所有数据进行修改3.删除数据(DELETE)DELETE FROM 表名 [WHERE条件];如果不使用WHERE条件,会将表中所有的数据删除
三、DQLDQL编写顺序:SELECT 字段列表FROM 表名列表WHERE 条件列表GROUP BY 分组字段HAVING 分组后条件ORDER 排序字段LIMIT 分页限定
DQL执行顺序:④SELECT 字段列表①FROM 表名列表②WHERE 条件列表③GROUP BY 分组字段⑤HAVING 分组后条件ORDER BY 排序字段⑥LIMIT 分页限定
1.基础查询查询字段SELECT 字段1,[字段2],[...] FROM 表名;SELECT * FROM 表名 ;-- 查询表中所有字段-- 注意:查询表中所有字段虽然可以使用*,但是推荐使用字段列表(更加清晰)去除重复记录SELECT DISTINCT 字段1,[字段2],[...] FROM 表名;起别名SELECT 字段1 AS 别名1,[字段2 AS 别名2],[...] FROM 表名;-- 注意:起别名的关键字AS可以省略,但是别名和字段名要有空格隔开AS:可以给字段或表起别名,通常该关键字可以省略,但是要别名和字段/表要用空格隔开
2.条件查询SELECT 字段1,[字段2],[...] FROM 表名 WHERE 条件列表条件运算符:
2.1模糊查询模糊查询使用关键字LIKE,同时需要了解常用的通配符;%:表示任意长度的字符串,例如:a%表示,以a开始后面接任意长度的字符串_:表示任意单个字符,例如:a_表示,以a开始后面只能接一个字符
2.2排序查询排序查询使用关键字ORDER BY,同时需要了解常用的排序方式:·ASC:升序排序(MySQL默认的排序方式)·DESC:降序排序升序、降序是自上而下的;当使用两个排序条件时,只有前面的条件值一样时,才会根据第二个排序条件进行排序
3、聚合函数
COUNT(*)表示统计表的总行数,也可以使用主键的字段名DISTINCT:去除重复的值,即遇到重复的值不会加1ALL:不去重(MySQL默认)SELECT 聚合函数名([DISTINCT|ALL] 列名) FROM 表;
4、分组查询分组查询使用关键字GROUP BY,可以让查询结果按照某一列或多列的值进行分组分组的目的:为了细化聚合函数的作用对象SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];WHERE和HAVING的区别:·执行时机不一样:WHERE是分组之前进行限定,不满足WHERE条件,则不参与分组,而HAVING是分组之后对结果进行过滤·可判断的条件不一样:WHERE不能对聚合函数进行判断,HAVING可以
5、分页查询分页查询使用关键字LIMIT,该关键字是MySQL数据库的方言SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;索引是从0开始的,和数组中的索引是一样的
6、多表查询SELECT * FROM 表1,表2,...[WHERE条件];查询结果是多张表的笛卡尔积6.1内连接内连接是查询多张表的交集数据,它是从多张表中查询出满足条件的待查询字段数据,就是多张表先要满足给定的条件,等条件筛选后再进行查询隐式内连接SELECT 字段列表 FROM 表1,表2… WHERE 条件;显示内连接SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 [JOIN ...] ON 条件;
6.2外连接外连接就算查询一个表的所有数据和满足条件的其他表数据外连接分为:·左外连接:查询A集合的所有数据以及满足条件的B集合数据·右外连接:查询B集合的所有数据以及满足条件的A集合数据左外连接SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;右外连接SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
6.3 自连接6.4 联合查询7、子查询 查询中嵌套查询
四、DCL 数据控制语言,用来定义数据库中的访问权限和安全级别,以及创建用户1、管理用户查询用户select * from mysql.user;创建用户CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';修改用户密码ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;删除用户DROP USER '用户名'@'主机名' ;
2、管理权限
查询权限SHOW GRANTS FOR '用户名'@'主机名' ;授予权限GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';撤销权限REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
事务的ACID特性:·原子性:事务是数据库的不可分割的逻辑工作单位,要么全做,要么全不做·一致性:事务的执行结果必须使数据库从一个一致性状态转变成另一个一致性状态·隔离性:一个事务的执行不能被其他事务干扰·持续性:事务一旦提交或回滚,它对数据库的改变是永久的
并发性事务问题·读未提交:指事务未成功提交的数据也能够被其它事务所读取,存在脏读、不可重复读、幻读问题·读已提交:指只有事务提交成功后的数据才能够被其它事务所读取,存在不可重复读、幻读问题·可重复读:指事务开始读取到的数据和事务结束前读取到的数据必须保持一致,存在幻读问题·串行化:在每个读的数据行上,加上锁,使之不可能相互冲突,但是性能很低,容易发生请求超时和请求堆积问题从上往下,隔离强度逐渐增强,性能逐渐变差。MySQL默认的隔离级别是可重复读,而Oracle的默认隔离级别是读已提交
脏读:读到无效数据不可重复读:指同一事务中多次查询同一字段,出现数据不一致,通常针对数据更新(UPDATE)操作幻读:指的是同一个事务中在前后两次查询中,后一次的查询里面,出现了前一次查询没有查到的记录
|