这里是我的博客

mysql的基本运用

一,了解数据库
1,操作数据库
1):通过windows控制窗口操作
A:打开控制窗口
B:进入mysql安装bin目录
C:输入命令 进入mysql数据库中
命令:mysql -h ip地址 -u 数据库用户名 -p 密码 -D 操作的数据库名
mysql -h 127.0.0.1 -u root -p -D 数据库名
命令: show databases; 查看所有数据库名
use 数据库名; 使用某个数据库
show tables; 查看所有数据表
2):使用网页打开方式
A:需要打开apache
B:需要安装phpmyadmin 在phpstudy->环境->数据库工具(web)->点击下载
3):使用GUI操作(图形界面操作)
A:下载sqlyog
二,MYSQL的存储引擎和数据类型
mysql数据库引擎:mysql数据库的发动机,引擎越好效率越高
1,mysql的存储引擎
*MYISAM:拥有较高的插入,查询速度,但不支持事务
*InnoDB:支持事务,支出行级锁(安全性更高);但是他的插入和查询不如MYISAM
BOB:和InnoDB很相似,但支出的事务更多
Memory:利用内存(效率更高,安全更低)
Merge:多个MYISAM引擎的接合
存储引擎的作用在表上
创建表->高级属性->表类型(选择存储引擎)
2.mysql的数据类型-时间-日期
1).date 存储值:yyyy-MM-dd1
2).datetime 存储值:yyyy-MM-dd HH:mm:ss
3).time 存储值:HH:mm:ss
4).timestamp 存储值:yyyy-MM-dd HH:mm:ss(执行新增或修改时自动将其更新为当前日期和时间)
5).year 存储值:yyyy

实战操作
	1.创建数据库
		数据库名:			你自己使用的项目数据库名
		数据库的字符集:		定义数据库的编码格式 选择 utf-8
		数据库校对规则:		用来校对字符集的utf8_general_ci
	2.查看数据库的文件
		D:\phpstudy\Extensions\MySQL5.7.26\data  存储我们所有的mysql数据库的数据文件
	 sqlyog软件 用来 管理的就是data里面的数据
	 sqlyog软件管理数据库的软件, 管理的内容在 "...\data"里面的数据
	 
	3.创建数据库-表
		字段名:		表的名字
		数据类型:	这一列数据是什么类型(时间,数字,字符串)
		长度:		类型的长度(一般用于字符串)
		默认值:		这一列的默认值是什么
		主键:		一张表只有一个主键(目的:唯一标识这行数据与其他数据的不同之处)
		非空:		要求必须输入内容
		无符号:		是否符号
		自动递增:	自增
		零填充:		用0来填充到指定的位数(字符串11位,但是我的字符串"wo00000000")
		字符集:		utf-8
		校对规则:	utf8_general_ci
		注释:		用文字来解释说明这一列是干嘛的
	4.添加数据
		添加时间类型的数据,如何添加的数据 不合法 默认值
	5.更改表结构
		表类型:指的是 存储引擎

数字数据类型和字符串类型
	1.数字数据类型
		整数:
			1):bool或boolean	整数	 	存储值:0或1
			2):bigint			大整数	 	存储值范围:19位的整数
			3):int(常用)		整数	 	存储值范围:-2147483648或2147483647(10位)
			4):smallint		小整数	 	存储值范围:-32768到32767
			5):tinyint			更小整数 	存储值范围:-128到127
		小数:
			1):float			单精度		存储值:
			2):double			双精度		存储值:
			3):decimal(m,n)	自定义小数	m表示总的位数,n表示的小数位数
				decimal(4,2)    12.45
	2.字符串数据类型
		1):char(length)			固定长度字符串		length<=255
			char(5)					值:aa  但是余下的三个是有空白填充上去的,总长度必须是5个字符串
		2):varchar(length)			可变字符串			length<=255
			varchar(5)				值: aa   那么长度就是2个字符串 最多五个
		3):longtext				长文本类型			最大支持4294967295(10位)字符
		4):text					文本类型			最大支持65535字符
		2):tinytext				小文本				最大支持255字符
		二进制:(了解)
			longbolb				长二进制
			mediumblob				稍长二进制
			blob					二进制
	3.其他类型
		enum:枚举类型	包含65535个成员
		aet:集合类型	包含64成员
	4.属性
		default				设置默认值	当前时间CURRENT_TIMESTAMP
		primary key			设置主键	用于整数类型
		null/not null		设置非空
		auto_increment		设置自动递增用于整数类型
		zerofill			设置零填充   用于整数类型
		index				设置普通索引
		unqiue				设置唯一索引
		
		注意:主键和唯一索引的区别
			相同点:他们都是唯一的
			不同点:主键不允许为空,唯一索引允许为空,但只能有一个

三,
1.使用sql语句创建库,表,删除表
1):创建数据库
create database 数据库名

	2):使用数据库
		use 数据库名
		
	3):删除数据库
		drop database 数据库名
		
	建议:创建数据库不要使用我们的sql语句,因为手动创建字符集和校对规则单词太多太难记
	4):创建数据表
		create table 表名(
				字段名1 数据类型 [数据属性],
				字段名2 数据类型 [数据属性],
				字段名3 数据类型 [数据属性],
				......
				字段名N 数据类型 [数据属性]
			)
			mysql的自增使用auto_increment
			sql的自增使用的identity
			
	5):删除表
		drop table 表名
		
	6):查看表结构
		describe 表名
		desc 表名
		
	7):修改表
		对项目越来越完善 就会新增 或者删除数据中的字段
		A:新增字段
			alter table 表名 add 字段名 字段类型 [数据属性]
		B:修改字段名或者修改数据类型和属性
			alter table 表名 change 字段名 新字段名 字段类型
		C:修改表名
			alter table 表名 rename to 新表名
		D:删除字段名
			alter table 表名 drop 字段名
		
	8):复制表
		A:复制表数据源,但不复制表结构
			create table 表名 select *from 要复制的表名
		B:复制表结构,但不复制表数据
			create table 表名 like 要复制的表名
	9):insert 新增数据(3种)
		A:insert.....values
			例子:insert into 表名[(字段名)] values(值...)
		B:insert.....set
			例子:insert into 表名 set 字段名=值,字段名=值,字段名n=值n
		C:insert.....select
			例子:insert into 表名1 select *from 表名2
	10):upfate 修改数据
		update 表名 set 字段名1='值',字段名2='值' where 字段名='值'
	11):delete 删除数据
		例子:delete from 表名 [where 字段名=值]
		
		delete from 表名 删除数据(可以带条件删除部分数据,也可以删除全部数据,id继续递增)
		truncate 表名 删除数据(删除全部数据,并且重置ID)
		drop table 表名 删除表(删除表数据和表结构)
	12):select 查询数据
		A:查询所有数据
			select *from 表名
		B:查询部分字段的全部数据
			select 字段名1,字段名2 from 表名
		C:查询部分数据
			select *from 表名 limit 查询的条数
			select 字段名1,字段名2 from 表名 limit 查询的条数
			select *from 表名 limit 前几列不显示(2*(第几页-1)),显示多少条数
		D:排序查询 order by 字段 asc/desc
		E:单条件查询 where 字段1=值
		F:多条件查询 where 字段1=值 and/or 字段2=值
		G:对字段从命名查询
			select 字段名 重名,字段名 重名,字段名 重名 from 表名
		H:消除重复
			select distinct 字段名 from 表名
	主键可以修改吗,但是只能修改为不存在的的值,不能修改为存在的值
	条件:
		1:between....and...  在什么什么之间
			select *from 表名 where age between 20 and 22  //查询age在20岁到22岁之间的数据
		2:in /not in    //等于或不等于
			select *from 表名 where id in (1,2,5) //查询id为1,2,5的数据
			select *from 表名 where id not in (1,2,5) //查询id不为为1,2,5的数据
		3:like  //包含 % 站位,站0个或多个
			select *from 表名 where name like("张%")  //查询name里姓张的数据
		4:is null/is not null  为空或非空
			select *from 表名 where sex is null      //查询sex为空的数据
			select *from 表名 where sex is not null  //查询sex不为空的数据
					
2.
	1):分组查询 group by 
		select *from 表名 group by 字段名
	2):聚合函数 sum() avg() count() max() min()
		select sex,count(id) from 表名 group by 字段名
	3):having聚合带条件
		select sex,count(id) from 表名 group by 字段名 having count(id)>3
	4):多表联合查询
		A:交叉查询 笛卡尔积
			语法:select *from 表名1,表名2,....,表名n   //数据总条数等于表1数据*表2数据*表n
		
		B:内联查询
			语法:select *from 表名1 inner join 表名2 on 表1.关系字段=表2.关系字段   //查询总条数 : 满足表与表之间的关系的数据
		C:外联查询
			左:语法:select *from 表名1 left join 表名2 on 表1.关系字段=表2.关系字段
			右:语法:select *from 表名1 right join 表名2 on 表1.关系字段=表2.关系字段
		D:自联查询   // 查询一张表的主键与外键相同的数据
			语法:select *from 表名1 a ,表名1 b where a.主键字段=b.外键字段
		F:子查询
			语法:select *from (select * from 表名 where 字段名 = 值) a
			
			where条件子查询
			语法:select * from 表1 where 外键字段名 = (select 主键字段名 from 表2 where 字段名 = 值)
	5):导出/导入 数据库	
		A:未登录时候的导出(备份)
			命令:mysqldump -uroot -p123456 schooldb(数据名) > 导出地址(D:/schooldb.sql)
			第一步:打开windows的控制窗口
			第二步:进入masql数据库安装目录的bin目录
			第三步:执行命令

四,MYsql安全
1.权限系统验证方式
1):验证。确定用户是否允许连接服务器
2):授权。确定用户是否拥有足够的权限执行查询要求
如果验证不成功,授权就无法进行,所以可以认为过程分为两个阶段

	1):掌控用户数据表
		select *from user;  --user 登录mysql数据库的用户表
		host:表示主机名
		user:表示用户名
		select *from tables_priv; --用户可以操作的数据库中特定的表
		table_name:表名(可以操作的数据表)
		grantor:谁给的权限
		table_priv:权限 
	2):创建用户
		A:创建 关键词 create
			create user "[user]"@"host" identified by "密码";
		B:删除用户
			drop user "[删除的用户名]"@"[host]";
		C:用户从命名
			rename user "[原user]"@"host" to "[新user]"@"host";
		
	3):给用户权限,收回权限
		A:用户权限
			grant 权限 on 数据库名.表名 to "[user]"@"[host]";
				权限: select ,update ,insert ,delete
		B:收回权限
			revke 权限 on 数据库名.表名 from "[user]"@"[host]";
		 C:查看某个用户的权限
			show grants for "[user]"@"[host]";
			查看当前用户的权限
			show grants for current_user();

五:视图
1:了解视图
1):什么是视图:
是一张虚拟的表

		--实表  在某个数据库中的数据表展示出来的,
		--虚拟表 在某个数据库中的视图里面展示的表
	
	2):实表与虚拟表 的区别
		不同之处:
			a.存放的位置不一样
			b.虚拟表是由实表构成(实表可能是一张表,可能是多张表,可能是一个或多个字段)
			c.实表数据发生改变,虚拟表数据也一样改变;反之一样的
		相同之处:
			a.虚拟表的操作和实表的操作是一样的
	
	3):为啥使用视图
		a.简单性
		b.安全性
		c.可维护性
		
2.应用视图
	1):创建视图
		语法:create view 视图名 as select语句;
						建议:视图名 以v开头或以view开头
	
	2):查看视图
		a.查看语法:show tables; -查看所有的表(包括实表和续表)
		b.在sqluog的视图列表中查看
		c.查看视图表结构的语法:describe 视图名;
	3):修改视图
		语法:
			alert view 视图名 as select语句;
	4):删除视图
		语法:
			drop view 视图名;
	5):更新视图
		增(insert),删(delete),改(update),查(select)

六:存储过程
1.了解存储过程
1):什么是存储过程
存储过程的相当于是我们学过的php函数
存储过程就是sql数据库的函数、
不同的数据库,存储过程不一样(mysql与sqlserver的存储过程一样)
2):为啥要使用存储过程
优点:
A.提高效率(存储过程只能编译一次,sql语句每次需要编译)
B.可以重复使用
C.简化操作(有时候用的sql语句可能设计很多表)
D.安全
缺点:
A.移植性太差(每个数据库的存储过程不一样)
B.对应简单的sql语句,毫无意义
C.对于简单的数据库的安全 毫无意义
D.团队开发,标准定义麻烦
E.开发和调用项目中,都很不方便
F.复杂的逻辑计算,存储过程很吃力

2.存储过程的应用
	1):创建存储过程
		语法:create procedure 过程名() [select语句,update语句,insert语句,delete语句]
	2):运行存储过程
		语句:call 过程名();
	3):创建带参数的存储过程
		create procedure 过程名(in 参数名 参数类型,out 显示参数名 参数类型)
			[select语句,update语句,insert语句,delete语句];
			变量,条件判断,循环语句
	4):删除存储过程
		语法:drop procedure 过程名;
	5):查看存储过程
		语法:show create procedure 存储过程名;
	6)
		定义变量:declare 变量名 变量类型;
		给变量赋值:set 变量名 =值;
		if语句:
			if [条件] then
			end if;
		
		begin
			每条语句必须加(;)分号
		end
		
		分割:
			delimiter $$
				内容;
			$$

七.触发器
1.了解触发器
1):什么是触发器
是与表有关的数据库对象,在满足定义条件是触发并执行触发器中定义的语句集合
2):为什么使用触发器
优点:自动触发一些操作,简化执行
缺点:触发器用占用资源,不建议使用
2.创建触发器
语法:
create trigger 触发器名
[after/before] [insert.update/delete] on 表名
for each row
begin
sql语句集合;
end

			trigger:触发器
			after:在...之后触发
			before:在...之前触发
			insert/update/delete:在之后或之前触发
			
			alter insert:在新增之后触发
			before delete:在删除之前触发
			
			on 表名 :作用在指定的表上
			for each row:对表中的每行数据都循环
			begin...end:包含触发之后或之前执行的sql语句
			
			触发器名字 以ai,au,ad,bi,bu,bd开头
			ai=after insert
			au=after update
			ad=after delete
			bi=before insert
			bu=before update
			bd=before delete
			
			new 与old的区别
			new.字段名:获取字段名新增的数据(获取新数据)
			old.字段名:获取字段名以前的数据(获取旧数据)
			curtime():获取当前时间
			new.id:获取被修改的id

2.删除触发器
	drop trigger 触发器名;
3.查看触发器
	show triggers;

八。导出导入
1.使用sqlyong工具导入导出
1):使用工具导出
选中要导出数据库
鼠标右击,选择“以sql转储文件备份数据库”
选择"结构/数据/结构和数据"中的一个,并选择存储位置
2):使用工具导入
保证没有数据库或者数据库为空,具体要不要数据库更具sql文件决定
CREATE DATABASE /!32312 IF NOT EXISTS/studb /*!40100 DEFAULT CHARACTER SET utf8 */;
USE studb;
数据库中不能存在数据库 studb

2.使用命令导入和导出数据
	1):导出数据针对表数据
		语法:select *from 表名 into outfile '路径'
		错误:
		The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
		使用:
			开启 secure-file-priv 权限
				第一步:找到mysql数据库的配置文件(my.ini)
				第二步: 在[mysqld]部分,加入 secure-file-priv = 路径
				secure-file-priv = C:/Users/Administrator/Desktop/php
				第三部:修改了my.ini 配置文件,需要重启mysql服务
	2):导入数据
		语法:load data infile '路径' into table 表名 fields terminated by '分隔符'

posted on 2020-05-07 21:42  梦黑客  阅读(160)  评论(0)    收藏  举报

导航