数据库(MySQL)从0到精通笔记

MySQL服务启用、停用、登录、退出

1、MySql服务的启动和停止:

	启动:mysql>net start mysql
	停止:mysql>net stop mysql

2、登录MySql

	mysql> mysql -u root -p
	然后输入你的密码

2、退出mysql:

	mysql>quit

MySQL数据模型:

1)关系型数据库
	关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的二维表组成的数据库
		1)、都是使用表结构,格式一致,易于维护。
		2)、使用通过的SQL语言操作,使用方便,可用于复杂查询。
		3)、数据存储在磁盘中、安全。
SQL分类:
DDL(数据定义语言):用来定义数据库对象,数据库、表、列等
DML(数据操作语言):用来对数据库中表的数据进行增删改
DQL(数据查询语言):用来查询数据库中表的记录(数据)
DCL(数据控制语言):用来定义数据库的访问权限和安全级别,及创建用户
DDL–操作数据库:
(1)查询:Show DataBases;
(2)创建:
	2.1)创建数据库:Create DataBase 数据库名称;
	2.2)创建数据库(判断,如果不存在则创建):Create DataBase If Not Exists 数据库名称;
(3)删除:
	3.1)删除数据库:Drop DataBase 数据库名称;
	3.2)删除数据库(判断,如果存在则删除):Drop DataBase If Exists 数据库名称;
(4)使用数据库:
	4.1)查看当前使用的数据库:Select DataBase();
	4.2)使用数据库:Use 数据库名称;
DDL–操作表:
(1)创建:
	1.1)创建表:
	Create Table 表名(
		字段名1 数据类型1,
		字段名2 数据类型2,
		...
		字段名n 数据类型n	--最后一行末尾,不能加逗号
	);
(2)查询:
	2.1)查询当前数据库下所有表名称:Show Tables;
	2.2)查询表结构:Desc 表名称;
(3)修改:
	3.1)修改表名:Alter Table 表名 Rename To 新的表名;
	3.2)添加一列:Alter Table 表名 Add 列名 数据类型;
	3.3)修改数据类型:Alter Table 表名 Modify 列名 新数据类型;
	3.4)修改列名和数据类型:Alter Table 表名 Change 列名 新列名 新数据类型;
	3.5)删除列:Alter Table 表名 Drop 列名;
(4)删除:
	4.1)删除表:Drop Table 表名;
	4.2)删除表时判断表是否存在:Drop Table If Exists 表名;
DML–表的数据进行增删改:
(1)添加:
	1.1)给指定列添加数据:Insert Into 表名(列名1,列名2,...) Values(值1,值2,...);
	1.2)给全部列添加数据:Insert Into 表名 Values(值1,值2,...);
	1.3)批量添加数据:
		Insert Into 表名(列名1,列名2,...) Values(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
		Insert Into 表名 Values(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
(2)修改:
	2.1)修改表数据:Update 表名 Set 列名1=值1,列名2=值2,... [Where 条件] ;	-- 修改语句中如果不加条件,则将所有数据都修改
(3)删除:
	3.1)删除数据:Delete From 表名 [Where 条件] ;	-- 删除语句中如果不加条件,则将所有数据都删除!
DQL–查询数据库中表的记录: 基本语法:
	Select
		字段列表
	From
		表名列表
	Where
		条件列表
	Group By
		分组字段
	Having
		分组后条件
	Order By
		排序字段
	Limit
		分页限定
(1)基础查询:
	1.1)查询多个字段:
		Select 字段列表 From 表名;
		Select * From 表名;	-- 查询所有数据
	1.2)去除重复记录:
		Select Distinct 字段列表 From 表名;
	1.3)起别名:
		As: as 也可以省略
(2)条件查询:
	2.1)条件查询语法:
		Select 字段列名 From 表名 Where 条件列表;
		模糊查询(like):"_"表示单个任意字符,"%"表示多个任意字符
(3)排序查询:
	3.1)排序查询语法:
		Select 字段列表 From表名 Order By 排序字段名1 [排序方式1],排序字段名2 [排序方式2] ...;
		排序方式:
			ASD:升序排列(默认值)
			DESC:降序排列

		-- 如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
(4)分组查询:
	4.1)聚合函数:
		4.1.1)概念:将一列数据作为一个整体,进行纵向计算。
		4.1.2)聚合函数分类:
			count(列名):统计数量(一般选用不为null的列)
			max(列名):最大值
			min(列名):最小值
			sum(列名):求和
			avg(列名):平均值
		4.1.3)聚合函数语法:
			Select 聚合函数名(列名) From 表;	-- null值不参与所有聚合函数运算
	4.2)分组查询语法:
		Select 字段列表 From 表名 [Where 分组前条件限定] Group By 分组字段名 [Having 分组后条件过滤];
		
			注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。
			Where和Having的区别:
				执行时机不一样:Where是分组之前进行限定,不满足Where条件,则不参与分组,而Having是分组之后对结果进行过滤。
				可判断的条件不一样:Where不能对聚合函数进行判断,Having可以
			执行顺序:Where > 聚合函数 > Having
(5)分页查询:
	5.1)分页查询语法:
		Select 字段列表 From 表名 Limit 起始索引 , 查询条目数;
			起始索引:从0开始
			计算公式:起始索引=(当前页码数-1)*每页显示的条目数
		tips:
			分页查询limit是MySQL数据库的方言
			Oracle分页查询使用rownumber
			SQL Server分页查询使用top
数据库约束:
(1)约束:
	1.1)约束的概念:
		约束是作用于表中列上的规则,用于限制加入表的数据
		约束的存在保证了数据库中数据的正确性、有效性和完整性
	1.2)约束的分类:
		非空约束:保证列中所有数据不能有null值(NOT NULL)
			1.2.1)添加约束:
				-- 创建表时添加非空约束
				Create Table 表名(
					列名 数据类型 NOT NULL,
					...
				);
				-- 建完表后添加非空约束
				Alter Table 表名 Modify 字段名 数据类型 NOT NULL;
			1.2.2)删除约束:
				Alter Table 表名 Modify 字段名 数据类型;
		唯一约束:保证列中所有数据各不相同(UNIQUE)
			1.2.3)删除约束:
				Alter Table 表名 Drop Index 字段名;
		主键约束:主键是一行数据的唯一标识,要求非空且唯一(PRIMARY KEY)
			1.2.4)建完表后添加主键约束:
				Alter Table 表名 Add Primary Key(字段名);
			1.2.5)删除约束:
				Alter Table 表名 Drop PrimaryKey;
		检查约束:保证列中的值满足某一条件(CHECK)
		默认约束:保存数据时,未指定值则采用默认值(DEFAULT)
			1.2.6)建完表后添加默认约束:
				Alter Table 表名 Alter 列名 Set DEFAULT 默认值;
			1.2.7)删除约束:
				Alter Table 表名 Alter 列名 Drop DEFAULT;
		外键约束:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性(FOREIGN KEY)
			1.2.8)添加约束:
				-- 创建表时添加外键约束
				Create Table 表名(
					列名 数据类型,
					...
					[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
				);
				-- 建完表后添加外键约束
				Alter Table 表名 Add CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
			1.2.9)删除约束:
				Alter Table 表名 Drop FOREIGN KEY 外键名称;
		-- MySQL不支持检查约束
	1.3)自动增长:当列是数字类型并且唯一约束(auto_increament)
数据库设计:
(1)软件的研发步骤:
	 |	1.1)需求分析:产品原型(墨刀软件等)
	 |	1.2)设计:软件结构设计(功能、模块、模块之间的关系等)、数据库设计(数据、表、表之间的关系等)、接口设计(功能的出参与入参是什么等问题)、过程设计(如何开发)
	 |	1.3)编码
	 |	1.4)测试
	 V	1.5)安装部署
(2)数据库设计概念:
	2.1)数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。
	2.2)建立数据库中的表结构以及表与表之间的关联关系的过程。
	2.3)有哪些表?表里有哪些字段?表和表之间有什么关系?
(3)数据库设计的步骤:
	3.1)需求分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么)
	3.2)逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
	3.3)物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
	3.4)维护设计(1.对新的需求进行建表;2.表优化)
(4)表关系的实现:
	4.1)一对多:在“多”的一方建立外键,指向“一”的一方的主键
	4.2)多对多:建立第三张中间表,中间表至少包括两个外键,分别关联两方主键
	4.3)一对一:
		一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能。
		实现:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
多表查询:
(1)笛卡尔积:取A,B集合所有组合情况
(2)多表查询:从多张表查询数据
	2.1)连接查询:
		2.1.1)内连接:相对于查询A、B交集数据
		2.1.2)外连接:
			2.1.2.1)左外连接:相对于查询A表所有数据和交集部分数据
			2.1.2.2)右外连接:相对于查询B表所有数据和交集部分数据
	2.2)子查询
(3)内连接:相对于查询A、B交集数据
	3.1)内连接查询语法:
		-- 隐式内连接
		Select 字段列表 From 表1,表2... Where 条件;

		-- 显示内连接
		Select 字段列表 From 表1 [Inner] Join 表2 On 条件;
(4)外连接:
	4.1)外连接查询语法:
		-- 左外连接
		Select 字段列表 From 表1 Left [Outer] Join 表2 On 条件;
		
		-- 右外连接
		Select 字段列表 From 表1 Right [Outer] Join 表2 On 条件;
(5)子查询:
	5.1)子查询概念:查询中嵌套查询,称嵌套查询为子查询
	5.2)子查询根据查询结果不同,作用不同:
		5.2.1)单行单列:作为条件值,使用=、!=、>、<等进行条件判断
			Select 字段列表 From 表 Where 字段名 = (子查询);
		5.2.2)多行单列:作为条件值,使用in等关键字进行条件判断
			Select 字段列表 From 表 Where 字段名 in (子查询);
		5.2.3)多行多列:作为虚拟表
			Select 字段列表 From (子查询) Where 条件;
事务:
(1)事务简介:
	1.1)数据库的事务是一种机制、一个操作序列,包含了一组数据库操作命令
	1.2)事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
	1.3)事务是一个不可分割的工作逻辑单元
(2)事务3个操作:
	-- 开启事务
	Start Transaction;
	或者 Begin;
	-- 提交事务
	Commit;
	-- 回滚事务
	RollBack;
(3)事务四大特性:(*面试经常被问)ACID
	3.1)原子性(A):事务时不可分割的最小操作单位,要么同时成功,要么同时失败
	3.2)一致性(C):事务完成时,必须使所有的数据都保持一致状态
	3.3)隔离性( I):多个事务之间,操作的可见性
		隔离性越强,操作越不可见,性能就越低
		隔离性越弱,操作是可见的,性能就越高
	3.4)持久性(D):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
(4)MySQL事务默认自动提交
	-- 查看事务的默认提交方式
	Select @@autocommit;
	-- 1 自动提交  0 手动提交
	-- 修改事务提交方式
	Set @@autocommit = 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Puzzle harvester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值