D2、MySQL基础

1、配置

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 --paeeword=连接目标的密码
	
MySQL退出
	exit
	quit
	
MySQL目录结构
	1、MySQL安装目录:basedir="D:/develop/MySQL/"
		配置文件 my.ini
	2、MySQL数据目录:datadir="ProgramData/MySQL/MySQL Server5.5/Data"
		几个概念
		数据表:文件夹
		表:文件
		数据:数据

2、SQL

1、什么是SQL?
	Structured Query Language:结构化查询语言,其实就是定义了操作所有关系数据库的规则。
	每一种数据库操作的方式存在不一样的地方,称为“方言”
	
2、SQL通用语法
	1、SQL语句可以单行或者多行书写,以分号结尾
	2、可使用空格和缩进来增强语句的可读性
	3、MySQL 数据库的 SQL 语句不区分大小写,关键字建议大写
	4、三种注释
		单行注释:-- 注释内容 或 # 注释内容(mysql 特有)
		多行注释:/*注释*/
		
3、SQL分类
	1、DDL(Data Definition Language)数据定义语言
	用来定义数据库对象:数据库、表、列等,关键字:create,drop,alter等
	
	2、MDL(Data Manipulation Language)数据操作语言
	用来对数据库中表的数据与进行增删改查。关键字:insert,delete,update等
	
	3、DQL(Data Query Language)数据查询语言
	用来查询数据表中标的记录(数据),关键字:select,where等,
	
	4、DCL(Data Control Language)数据控制语言(了解)
	用来定义数据库的访问权限和安全级别,及创建用户,关键字:GRANT  REVOKE

3、DDL:操作数据库、表

1、操作数据库:CRUD
	1、C(create):创建
		创建数据库:
			create database 数据库名称;
		创建数据库 判断不存在,再创建:
			create database if not exists 数据库名称;
	2、R(Retrieve):查询
		查询所有数据库的名称
			show database
		查询某个数据库的字符集:查询某个数据库的创建语句
			show create database 数据库名称
	3、U(Update):修改
		修改数据库的字符集
			alter database 数据库名称 character set 字符集名称
	4、D(Delete):删除
		删除数据库
			drop database 数据库名称
		判断数据库存在,存在再删除
			drop database if exists 数据库名称
	5、使用数据库
		查询当前正在使用的数据库名称
			select database()
		使用数据库
			use 数据库名称
2、操作表
	1、C(create):创建
		create table 表名(
		列名1 数据类型1,
		列名2 数据类型2,
		.......
		列名n 数据类型n
		);
		注意:最后一列,不需要加逗号
		
		数据库类型:
			1、int:整形
			2、double:小数类型
				double(4,1) 表示4位长度,一位小数 314.1
			3、date:日期,只包含年月日,yyyy-MM-dd
			4、datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
			5、timetamp:时间戳类型 包含年月日时分秒yyyy-MM-dd HH:mm:ss
				如果将来不给这个字段赋值,或者赋值为null,则默认使用当前的系统时间
			6、varchar:字符串
	2、R(retrieve):查询
		查询某个数据库中所有的表名称
			show table;
		查询表结构
			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 表名

4、DML:增删改表中的数据

1、添加数据
	insert into 表名(列名1,列名2,列名3,列名n) value(值1,值2,值3,值n);
	注意:列名和值要一一对应,如果表名后,不定义列名,则默认给所有列添加值
		insert into 表名 value(值1,值2,值3,值n);
2、删除数据
	delete from 表名 [where 条件]
	如果不添加条件,则删除表中的所有记录
	如果删除所有记录
		delete from 表名 -- 不推荐使用,有多少条记录就会执行多少次删除操作
		TRUNCATE TABLE 表名 -- 推荐使用 效率较更高,先删除表,然后再创建一张一样的空表
3、修改数据
	update 表名 set 列名1=值1,列名2=值2.......[where 条件]
	如果不加条件,则会将表中所有记录全部修改完

DQL:查询表中的记录

	select * from 表名
1、语法		
	select
		字段列表
	from
		表名列表
	where
		条件列表
	group
		分组字段
	having
		分组之后的条件
	order
		排序
	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 或 !
		
4、排序查询
	order by字句
	ASC:升序,默认的
	DESC:降序
	如果有多个排序条件,则当前边的条件一样时,才会判断第二条件
	
5、聚合函数
	count:计算个数
		一般选择非空的列:主键
		count(*)
	max:计算最大值
	min:计算最小值
	sum:计算和
	avg:计算平均值
	
	注意:聚合函数的计算,排除null值
	解决方案:
		选择不包含非空的列进行计算
		ifnull函数
		
6、分组查询
	group by 分组字段
	注意:
		分组之后查询的字段:分组字段、聚合函数
		where和having的区别
			where在分组之前进行设定,如果条件不满足,则不参与分组
			having在分组之后限定,如果不满足结果,则不会被查询出来
			where 后不可以跟聚合函数
			having 可以进行聚合函数的判断
			
7、分页查询
	limit 开始的索引,每页查询的条数
	开始的索引 = (当前页码-1)
	
	每页显示3条记录
	select * from 表名 LIMIT 0,3; -- 第一页
	select * from 表名 LIMIT 3,3; -- 第二页
	select * from 表名 LIMIT 6,3; -- 第三页
	
	limit 是一个MySQL“方言”

约束

概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性
分类
	主键约束:primary key
	非空约束:not null
	唯一约束:unique
	外键约束:foreign key
	
非空约束:not null
	创建表时添加约束
		create table stu(
			id int.
			name varchar(20) not null -- name为非空约束
		)
	创建表完后,添加非空约束
		alter table stu modify name varchar(20) not null
	删除name的非空约束
		alter table stu modify name name varchar(20)
唯一约束:unique 某一列的值不能重复
	注意:唯一约束可以有null值,但是只能有一条记录为null
	在创建表时,条件唯一约束
		create table stu(
			id int unique
		)
	创建表完后,添加唯一约束
		alter table 表名 modify id int unique
	删除唯一约束
		alter table 表名 drop index 列名 
		
主键约束:primary key 非空且唯一
	注意
		一张表只能有一个字段为主键
		主键就是表中记录的唯一标识
	在创建表时,添加主键约束
		create table 表名(
			字段名 类型名 primary key
		)
	创建表完后,添加主键约束
		alter table 表名 modify 字段名  primary key
	删除主键
		(错误做法)alter table 表名 modify 字段名 字段类型
		alter table 表名 drop primary key
		
自动生长
	概念:如果某一列是数值类型的,使用auto_increment 可以来完成值的自动增长
	在创建表的时候,添加主键约束,并且完成自动增长
		create table 表名(
			id int primary key auto_increment
		) 
		添加的时候该字段可传null 自动生长
		也可以随便传个数字,然后下一条自动增长的时候会根据上一条记录
	增加自动增长
		alter table 表名 modify 字段 字段类型 auto_increment
	删除自动增长
		alter table 表名 modify 字段 字段类型 auto_increment

外键约束:foreign key,让表与表之间产生关系,从而保证数据的正确性
	在创建表时,可以添加外键
		create table 表名(
			....
			外键列
			constraint 外键名称 foreign key (外键列名称) references 主表名称(主列表名称)
		);
	创建表之后,添加外键
		alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称)
		主表要先存在
	删除外键
		alter table 表名 drop foreign key
	级联操作
		添加级联操作(使用需谨慎)
		意思就是当两个表被外键约束的时候,可以改或者删除记录一个表的内容(被关联的表),另一个表(关联的表)的内容也会发生改变或者被删除
			alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE
		分类:级联更新 ON UPDATE CASCADE 级联杉树ON DELETE CASCADE

数据库的设计

多表之间关系
	分类
		一对一,人和身份证:一个人只能有一张身份证,一张身份证也只能对应一个人
		一对多(多对一),部门与员工
		多对多,学生与课表
	实现关系
		一对多(多对一)
			实现方式:在多的一方建立外连接,指向一的一方的主键
		多对多
			实现方式:多对多关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
		一对一
			实现方式:可以在任意一方添加唯一外键指向另一张表的主键
数据库设计的范式
	概念:设计数据库时,需要遵循一些规范,要遵循后面范式的要求,必须先遵循前面的范式要求
	分类
		第一范式(1NF):每一类都是不可分割的原子数据项
		第二范式(2NF):在前面的基础上,非码属性必须完全依赖于候选码(在前面的基础上消除非主属性对主码的部分函数依赖)
		第三范式(3NF):在前面的基础上,任何非主属性不依赖于其他非主属性(在前面的基础上消除传递依赖)

多表查询

内连接查询,从哪些表中查询数据、条件是什么,查询哪些字段
	隐式内连接:使用where条件消除无用数据
	显示内连接:select 字段列表 form 表名1 [inner] join 表名2 on 条件
	
外连接查询:select 字段列表 form 表名1 [inner] join 表名2 on 条件
	左外连接:select 字段列表 form 表1 left [outer] join 表2 on 条件
		查询的是左表所有数据以及其交集部分
	右外链接::select 字段列表 form 表1 right [outer] join 表2 on 条件
		查询的是右表所有数据以及其交集部分
		
子查询
	概念:查询中嵌套查询,一般将查询的结果做为外查询的查询条件

事务

事务的基本介绍:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作做要么同时成功,要么同时失败
操作
	开启事务:start transaction
	回滚:rollback
	提交:commi
	MYSQL数据库中事务默认自动提交
		事务提交的两种方式
			自动提交:mysql就是自动提交;一条DML(增删改查)语句就会自动提交一次
			手动提交:Oracle 数据库默认是手动提交事务;需要先开启事务,在提交
		修改事务提交的默认提交方式
			查看事务的默认提交方式,select @@autocommit;1代表自动提交,0代表手动提交
			修改默认提交方式:set @@autocommit 0

事务的四大特征
	原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
	持久性:当事务提交或者回滚后,数据库会持久性的保存数据
	隔离性:多个事务之间,相互独立
	一致性:事务操作前后,数据总量不变
事务的隔离级别:多个事务隔离,相互独立,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
	存在问题
		脏读:一个事务中,读取到另一个事务中没有提交的事务
		不可重复读(虚读):在同一个事务中,两次读到的数据不一样
		幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
	隔离级别
		read uncommitted:读未提交 -> 产生的问题:脏读、不可重复读、幻读
		read committed:读已提交 -> 产生的问题:不可重复读、幻读
		repeatable read:可重复读(MYSQL默认) -> 产生的问题:幻读
		serializable:串行化 -> 可以解决所有的问题
	
	注意:隔离级别越高,效率越差
	数据库查询隔离级别:select @@tx_isolation
	数据库设置隔离级别:set global transaction isolation level 级别字符串

DCL

SQL分类:
	DDL:操作数据库和表
	DML:增删改查表中的数据
	DQL:查询表中的数据
	DCL:管理用户 授权

DBA:数据库管路员

DCL:管理用户,授权
	管理用户
		添加用户:create user '用户名'@'主机名' identified by 密码
		删除用户:drop user '用户名'@'主机名'
		修改用户密码
		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、打开任务管理器、手动结束mysql.exe的进程
			8、启动mysql服务
			9、使用新密码登录
		查询用户:
			1、切到mysql数据库
			USE mysql
			2、查询user表
			select * from user
			通配符:% 表示可以在任意主机使用用户名登录数据库
	授权
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值