MySQL数据库

一、数据库的概念

  1. 什么是数据库(DataBase)
  2. 用于存储和管理数据的仓库,简称DB
  3. 数据库的特点***
  4. 持久化存储数据的(硬盘).实际上数据库就是一个文件系统
  5. 方便存储和管理数据(对数据进行增删改查)
    a) -DBMS(数据库管理系统)
    i. MySQL—>很多数据库—>很多表—>很多列—>具体数据
  6. 3)使用了统一的方式操作数据库–SQL
    a) 多种DBMS通用的语法–SQL
  7. 常见的数据库软件
    a) MySQL 默认端口是3306
    b) Oracle
    c) db2
    二、MySQL数据库-端口号3306
  8. MySQL数据库的安装
    a) 详见操作手册
  9. MySQL建议用360卸载
    a) 详见操作手册
  10. 配置
    a) *查看状态
  11. win+R services.msc
  12. netstat -ano | findStr"3306"
    a) *开启服务(管理员身份运行cmd)
    b) net start mysql
    c) *关闭服务(管理员身份运行cmd)
    d) net stop mysql
  13. MySQL的登陆和退出
  1. 本地mysql
    b) *MySQL数据库的登陆(本地)
    c) -mysql -u+用户名 -p
    d) 输入密码(此时密码是密文显示)
    e) -或者mysqul -u+用户名 -p+密码
    f) -当前用户密码 mysql -uroot -proot
    g) *MySQL数据库的退出
    h) -exit/quit
  1. 2)远程登陆
    a) *MySQL数据库的登陆(远程)
    b) mysql -h+ip -u目标的用户名 -p目标的密码
    c) *退出
    d) -exit/quit
  2. MySQL的目录结构(了解)
  1. MySQL安装目录
    b) my.ini是配置文件,可以修改
  1. 2)MySQL数据目录
    a) 在my.ini可以查看到
    b) #Path to the database root
    c) datadir=“C:/ProgramData/MySQL/MySQL Server 5.5/Data/”
  2. 3)几个概念:
    a) 数据库-文件夹
    b) 表-文件
    c) 列-表的一部分,相当于表头
    d) 数据-存储的数据
  3. 6.SQL语法*****
  1. 什么是SQL?–Structure Query Language:结构化查询语言
  1. 它定义了操作所有关系型数据库(Relational DataBase)的规则
  2. 2)SQL的通用语法
    a) *SQL语句可以单行或多行书写,以分号结尾
    b) *可以使用空格和缩进来增强语句的可读性
    c) *MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
    d) *3种注释
  1. -单行注释: – 注释 或 # 注释
  2. -多行注释: /* 注释 */
  3. 注意:空格一定要打, #注释是MySQL的特有语法,可以不用空格,建议使用通用语法
  4. SQL的分类*****面试可能会用到
    e) *DDL 数据定义语言-Data Definition Language
  5. 操作数据库的语言:对数据库和表的增删改查
    f) *DML 数据操纵语言-Data Manipulation Language
  6. 增删改表中的数据
    g) *DQL 数据查询语言-Data Query Language
  7. 查询表中的数据
    h) *DCL 数据控制语言-Data Control Language
  8. 对用户权限的设置
  1. DDL:操作数据库、表 - 以文件夹SQL语句内容为主
  2. 操作数据库:CRUD
    b) *C(Create):创建 CREATE
  1. SELECT DATABASE();
    c) *R(Retrieve):查询 SHOW
    d) *U(Update):修改 ALTER
    e) *D(Delete):删除 DROP
    f) *使用数据库:USE 数据库名称; 不是USE DATABASE 数据库名称
  1. 操作表:CRUD
    g) *C(Create):创建 CREATE
  1. -CREATE TABLE 表名(
  1. 列名1 数据类型1,
    a) 列名2 数据类型2,
    b) …
    c) 列名N 数据类型N
    d) )
  2. 注意:最后一列,不需要加逗号.
  1. -数据库类型:
  1. **int 整数类型
    a) **double 小数类型 double(5,2)表示长度5,小数点后保留两位
    b) **date 日期,只包含年月日, yyyy-MM-dd;
    i. datetime 日期,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
    ii. timestamp:时间戳类型:包含年月日时分秒 **和datatime的区别,面试
    iii. 如果不给这个字段赋值,默认为当前系统时间
    c) 字符串
    面试题
    i. varchar:字符串 varchar(20) 表示最大20个字符
    ii. char:char(长度)
    iii. text:定义不需要给长度,保存超大文本/和文本文件
    iv. 注意:char和varchar在定义的时候必须给长度 varchar(30),char(20)
    v. char和varchar的区别:如果存入长度小于给定长度,char用空格补满
    i. 而varchar的长度根据输入字符串内容改变
    h) -复制表 CREATE TABLE stu LIKE student;
    i) *R(Retrieve):查询 SHOW TABLES/DESC(descraption) 表名
    i. SHOW CREATE TABLE
    j) *U(Update):修改 ALTER
  1. -修改表名 ALTER TABLE 表名 RENAME TO 新的表名
    i. RENAME TABLE 表名 TO 新表名
  2. -修改表的字符集 ALTER TABLE 表名 CHARACTER SET 字符集名
  3. -添加一列 ALTER TABLE 表名 ADD 列名 数据类型;
  4. -修改一列 ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
    i. ALTER TABLE 表名 MODIFY 列名 新数据类型;
  5. -删除列: ALTER TABLE DROP 列名;
    k) *D(Delete):删除 DROP
  1. DML:增删改表中的数据
  2. 添加数据:
    b) *语法:
  3. INSERT INTO 表名(列名1,列名2,…,列名N) VALUES(值1,值2,…,值N),(值1,值2,…,值N)
    c) *注意:
  4. 列名和数据要一一对应
  5. 如果表名后不写内容,则给所有列添加值
  1. 除了数字类型,其他类型需要使用引号引起来,单双引号都可以
  2. 删除数据
    d) *语法
  1. DELETE FROM 表名 WHERE 条件;
  2. TRUNCATE TABLE 表名;
    e) *注意
  3. 如果不加条件,则删除表中所有记录,如果要删除所有数据,建议使用TRUNCATE TABLE,效率高
  4. truncate先删除表,再创建一张一模一样的表,效率高,推荐使用
    f) *TRUNCATE 和 DELETE FROM 的区别*****面试题
  5. –DELETE属于DML(可以通过事务进行还原),TRUNCATE属于DDL(不能通过事务进行欢颜)
  1. 修改数据
    g) *语法
  1. UPDATE 表名 SET 列名 = 值,列名2=值2 WHERE 条件
    h) *注意:
  2. 如果不加条件,表内的所有数据都会被修改
  3. DQL:查询表中的记录
    a) *SELECT * from 表名;

SQL查询语句
一、DQL查询语句

  1. 基本查询
    a) IFNULL(字段,替换的值) 字段的值为NULL则改为的替换的值
     字段 AS 别名 可以给字段写别名
     AS可以省略,直接谢伟字段 别名
    b) 公式!
    ****
    c) SELECT 列名 FROM 表名
    d) WHERE 条件
    e) GROUP BY 列名 HAVING 条件
    f) ORDER BY ASC/DEDC
    g) LIMIT 索引,条数
  2. 条件查询
    a) *运算符
     -<>不等,=等于,!=不等(不建议)
     -BETWEEN 值 AND 值 是闭区间
     -IN(集合)
     -LIKE 模糊查询 %任意多个字符,_一个字符
     -&& || ! 建议用AND 和 OR NOT
  3. 排序查询
    a) *语法:
     ORDER BY 排序字段1 排序方式1,排序字段2 排序方式2
    b) *排序方式:
     ASC:升序,默认的 Ascending
  4. DESC:降序 Descending
    c) *注意:
     如果有多个排序规则,只有当前一个规则生效后后一个规则才会生效
  5. 聚合函数->将一列数据作为一个整体,进行纵向计算
  6. COUNT:计算个数
    b) -一般选择非空的列来计算(主键)
     -COUNT(*) 也可以避免自动排除NULL的问题,但不推荐使用
  7. MAX:计算最大值 数字/日期
  8. MIN:计算最小值 数字/日期
  9. 4)SUM:求和 数字
  10. AVG:计算平均值 数字
  11. 语法:
    b) SELECT 聚合函数(字段) FROM 表名称
  12. 注意:聚合函数一般都是配合分组使用
  13. 注:聚合函数的计算会排除NULL值
  14. 5.分组查询
    a) *语法:
    b) GROUP BY 分组字段
    c) *注意:
    d) 分组之后查询的字段必须为分组字段或聚合函数
    e) *WHERE和HAVING的区别-******面试题可能考
     -WHERE在分组之前进行限定,如果不满足条件,则不参与分组;HAVING在分组之后进行限定,如果不满足条件,则不会被查询出来
     -WHERE后不可以跟聚合函数,HAVING可以进行聚合函数的判断
  15. 6.分页查询
    a) *语法:
     LIMIT 开始的索引,每页查询的条数
    b) *公式:
     开始的索引 = (页码-1)*每页显示的条数
    c) *注意:
     LIMIT语法是一个"方言",只能在MySQL中使用
    二、约束
  16. 约束的概念
    a) 对表中的数据进行限定,保证数据的准确性、有效性和完整性
  17. 约束的分类
  1. 主键约束:PRIMARY KEY [AUTO_INCREMENT]
  2. 非空约束:NOT NULL
  3. 唯一约束:UNIQUE
  4. 外键约束:FOREIGN KEY
  1. 非空约束:NIT NULL
    a) *语法-创建约束
    b) CREATE TABLE 表名(字段 值 约束);
    c) ALTER TABLE 表名 MODIFY 字段 数据类型 约束
    d) 当后面的约束为空时,可以认为改为没有约束
  2. 唯一约束:UNIQUE
    a) *注意:
    i. 唯一约束可以有NULL值,但只能有一个
    ii. 唯一约束必须用DROP INDEX字段来删除
    iii. -ALTER TABLE 表名 DROP INDEX 列名
  3. 如果当前表中有唯一约束,那么添加不了唯一约束
  4. 主键约束:PRIMARY KEY*****
    a) *语法:PRIMARY KEY AUTO_INCREMENT;
    b) *注意:
    i. -主键约束要求主键非空且唯一
    a) -一张表中只有一个字段为主键
    b) -主键就是表中记录的唯一标识
    c) *AUTO_INCREMENT-自动增长
    i. 如果某一列是数值类型的,使用AUTO_INCREMENT可以来完成值的自动增长
    d) *主键的删除:
    i. ALTER TABLE 表名称 DROP PRIMARY KEY;
  5. 外键约束:FOREIGN KEY*****
  1. 在创建表时,可以添加外键
    b) *语法:
    c) CREATE TABLE 表名 (
    i. …
    ii. CONSTRAINT 外键名称 FOREIGN KEY (从表列名) REFERENCES 主表(主表主键) – CONSTRAINT 外键名称可以省略
    iii. );
    iv. -主表:被依托的表
    v. -从表:谁有外键谁就是从表
    d) *删除外键
    e) ALTER TABLE 从表名 DROP FOREIGN KEY 外键名
    f) *创建表之后添加外键
    g) ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键列名) REFERENCES 主表名称(主表列名称)
    h) ALTER TABLE 表名 ADD FOREIGNKEY (外键列名) REFERENCES 主表名称(主表列名称)
  1. CONSTRAINT 外键名称可以省略
  2. 2)级联操作(了解)-记住关键字CASCADE即可
    a) *添加级联操作
    i. 语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
  3. FOREIGN KEY(外键字段名称) REFERENCES 主表(主表列名称)
  4. ON UPDATE CASE ON DELETE CASE;
    b) *级联操作:
  5. ON UPDATE CASCADE
  6. ON DELETE CASCADE;
    c) *级联操作比较危险,效率也不高,尽量慎重使用
    三、数据库的设计
  7. 多表之间的关系
  1. 一对一(了解)
  2. 一对多(多对一)
    a) 如:部门和员工
    b) 分析:一个部门又多个员工,一个员工只能对应一个部门
  3. 多对多
    c) 如:学生和课程
    d) 分析:一个学生可以有多个课程,一个课程也可以有很多学生
  1. 多表关系的实现
  1. 一对一
    b) 在其中一方创建一个外键列(值不能重复),指向另一方的主键列
  1. 2)一对多(多对一)
    a) 在多的一方创建外键列,指向一的一方主键列
  1. 多对多
    b) 创建一个中间表,至少有两列,创建外键分别指向2个主表的主键
    c) *联合主键:中间表中的主键对不重复
  2. PRIMARY KEY(主键1,主键2)
  1. 数据库设计的范式(当前了解即可)-以下所有笔记应结合视频理解
  1. 概念:设计数据库时,要尊徐一些规范.
  2. 要遵循后边的范式要求,必须先遵循前边的所有范式要求
  3. 分类-第1/2/3/巴斯-科德/4/5范式,当前只学习123范式
    b) *第一范式(1NF)
  4. 每一列都是不可分割的原子数据项
    c) *第二范式(2NF)
  5. 在1NF的基础上,非码属性必须完全依赖于候选码
  1. (在1NF基础上消除非主属性对主码的部分函数依赖)
    d) *第三范式(3NF)
  1. 在2NF的基础上,任何非主属性不依赖于其他非主属性
  1. (在2NF基础上消除传递依赖)
  1. 第一范式:1NF
    e) *原子数据项:仅有一列,没有子列
    f) 数据库创建表时必然满足第一范式
    g) *第一范式存在的问题:
    h) -存在非常严重的数据冗余
    i) -数据添加存在问题
    j) -数据删除存在问题
  2. 第二范式:2NF
    k) *几个概念:
  3. -函数依赖: A–>B,如果通过A的属性(或属性组)的值可以确定唯一B属性的值
  4. -完全函数依赖:A–>B,如果A是一个属性组,则B属性值的确定需要依赖A属性组中所有的属性值
  5. -部分函数依赖:A–>B,如果A是一个属性组,则B属性值的确定需要依赖A属性组中部分的属性值
  6. -传递函数依赖:A–>B, B–>C
  1. 如果通过A的属性(或属性组)的值可以确定唯一B属性的值,再通过B的属性可以确定C属性的值
  1. -码:如果在一张表中,如果一个属性或属性组被其他所有属性组完全依赖,则称此属性或属性组为该表的码
  1. **主属性:码属性组中的所有属性
  2. **非主属性:除了码属性组的属性
    l) *第二范式存在的问题:
  1. -数据添加存在问题
  2. -数据删除存在问题
  3. 第三范式:3NF
    m) 解决了传递依赖
    n) 不存在主要问题
  1. 数据库的备份和还原
    a) 详见 MYSQL语句-重置密码&备份还原数据库,一般用不着
  2. 总结公式:
  3. SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 条件 ORDER BY ASC/DESC LIMIT index,rows
  4. CONSTRAINT 外键名称 FOREIGN KEY (从表列名) REFERENCES 主表(主表主键)

多表
一、多表查询

  1. 多表查询的分类
    a) *内连接查询
    b) *外连接查询
    c) *子查询
    d) *笛卡尔积:
    i. 集合A,集合B,区多表中数据的所有组合情况
    ii. 要完成多表查询,需要消除笛卡尔积中无用的数据
  2. 内连接查询:
  1. 隐式内连接:使用WHERE消除无用数据
    b) *语法:
    i. SELECT 字段 FROM 表1,表2 WHERE 关联条件 AND 普通条件
    c) *例子:
    d) SELECT t1.name, – 注释
  2. t1.gender,-- 注释
  3. t2.name – 注释
    e) FROM
  4. emp t1, – 注释
  5. dept t2 – 注释
    f) WHERE
    i. t1.dept_id = t2.id;
  1. 2)显式内连接
    a) *语法:SELECT 字段 FROM 表1
    b) [INNER] JOIN 表2 ON 关联条件
    c) [INNER] JOIN 表3 ON 关联条件
  1. WHERE 普通条件
  2. -INNER 是可选操作,可以不写
    d) *例子:
  3. SELECT * FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
  4. 内连接查询的思维逻辑
    e) *从哪些表中查询数据
    f) *查询条件是什么
    g) *查询哪些字段
  5. 内连接查询的是左右两表的交集部分****
  1. 外链接查询
  1. 左外连接
    b) *语法:SELECT 字段 FROM 表1
  2. LEFT [OUTER] JOIN 表2 ON 关联条件
  3. LEFT [OUTER] JOIN 表3 ON 关联条件
    i. WHERE 普通条件
    c) 左外连接查询的是左表所有数据及左右表交集部分***
  1. 2)右外连接
    a) 语法:SELECT 字段 FROM 表1
    b) RIGHT [OUTER] JOIN 表2 ON 条件
    c) RIGHT [OUTER] JOIN 表3 ON 条件
    d) WHERE 普通条件
    e) 左外连接查询的是右表所有数据及左右表交集部分
    **
  2. 3)内连接与外链接的区别****
    a) -内连接查询的是连接的表的交集
    b) -外链接查询的是左(右)表的所有数据及与连接的表的交集
  3. 4.子查询
    a) *概念:查询中嵌套查询,称嵌套的查询为子查询
    b) *例:
    i. SELECT *FROM emp WHERE emp.salary = (SELECT MAX(salary) FROM emp);
    c) *子查询的不同情况
    i. -标量子查询:
  1. 子查询可以作为条件,使用运算符去判断
  2. 例:查询工资小于平均工资的人
  3. SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
    ii. -列子查询:子查询的结果是N行1列
  4. 子查询可以作为条件,使用操作符去判断
  5. 例:查询部门是财务部或市场部的人
  6. SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME IN(‘财务部’,‘市场部’));
    iii. -行子查询:子查询的结果是1行N列
    iv. -子查询的结果是多行多列的:
  7. 子查询可以作为虚拟表,使用内/外连接去查询
  8. 例:查询员工的入职日期是2011-11-11日之后的员工信息
  9. SELECT *
  10. FROM (SELECT * FROM emp WHERE join_date > ‘2011-11-11’) t1, dept t2
  11. WHERE t1.dept_id = t2.id;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值