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 '分隔符'
浙公网安备 33010602011771号