一、定义
1、数据库:存储数据的软件
2、关系型数据库(支持SQL语言,数据结构是表):DB2、oracl、mysq l (Oracle 旗下)
非关系型数据库(不支持SQL语言,数据结构可以是文档、图片等):mongodb、redis
二、安装
1、官网安装MySQL Community Edition(社区版):https://dev.mysql.com/downloads/file/?id=467574
2、安装集成软件:
1)xampp:https://www.apachefriends.org/download.html
2)phpstudy:http://www.phpstudy.net/
三、入门
1、mysql的服务
mysqld:mysql的主服务
mysql:mysql的客户端服务
1)启动服务:
windows:我用phpstudy,故启动phpstudy里的mysql
linux:service mysqld start
2)检查服务和端口
①查看进程:
windows:tasklist | find "mysqld" / tasklist | findstr mysqld
linux:ps -ef | grep mysqld
②查看端口:
windows:netstat -an | find "3306" / netstat -an | findstr 3306
linux:netstat -an | grep 3306
2、mysql的登录
1)添加环境变量Path
例如:D:\PhpStudy\phpstudy_pro\Extensions\MySQL5.7.26\bin
2)登录命令
①mysql -u root -p:管理员登陆本地数据库
管理员:root
密码:123456
----->mysql -uroot -p123456
②mysql -u root -h 127.0.0.1 -p:管理员登陆IP为127.0.0.1数据库
3)登录后的命令
【注:不要漏掉“;”】
①show databases;----->查看当前所有数据库
②use 数据库名;----->选择某数据库
③select database();----->查看当前所在数据库
④show tables;----->查看当前所在数据库的所有表
⑤select * from 表名\G;----->查看某表的所有数据(按列展示)
⑥desc 表名;----->查看某表的结构
4)退出登录
quit
PS:
- 创建数据库:create database 数据库名 default charset utf8;
- 删除数据库:drop database 数据库名;
- 查看创建数据库的语句:show create database 数据库名;
3、mysql的表结构
1)表结构:表头、行、列、数据
其中、数据类型:
①数字类型int
②字符类型char / varchar
char和varchar的区别:
char的长度是固定的,varchar的长度是可变化的。例如:存储字符串“abc”,对于char(10) 表示你存储的字符将占10个字节的长度(包括7个空字符),对于varvhar(10) 表示你存储的字符只占3个字节的长度(10只是最大值,当你存储的字符小于10时,按实际长度存储)。
③日期时间类型date
2)表结构的创建:
语法:create table 表名(
列 数据类型,
列 数据类型
);
例如:创建商品表(goods),商品名称(gname )字符类型 最多10个字符,价格(price) 数字类型,出厂日期(ddate) 日期类型。
mysql> create table goods(
-> gname char(10),
-> price int,
-> ddate date
-> );
3)表结构的操作:
①新增列
需求:goods表中新增商品id(sid)列 数字类型----->alter table goods add sid int;
②修改列
需求:goods表中商品id列修改为字符类型----->alter table goods modify sid char(10);
③删除列
删除一列:alter table 表名 drop 列名;
删除多列:alter table 表名 drop 列名1, drop 列名2;
需求:goods表中删除商品id列----->alter table goods drop (column) sid;
④删除表结构
需求:删除goods表----->drop table goods;
4、mysql数据的增删改查
1)新增数据
①向表中所有列新增数据:insert into 表 values(值1,值2,值3...)
需求:向韩国表新增数据,泡菜名称 sawadika,价格 250,出厂日期 2000-01-01
- ----->insert into 韩国 values("sawadika",250,"2000-01-01");
②向表中指定列新增数据:insert into 表(列1,列2,列3...) values(值1,值2,值3...),(值1,值2,值3...);
插入一条数据的需求:向韩国表新增数据,泡菜名称 baga,价格 500
- ----->insert into 韩国(泡菜名称,价格) values("baga",500);
插入多条数据的需求:向韩国表新增数据,泡菜名称 baga,价格 500;泡菜名称 nani,价格 100
- ----->insert into 韩国(泡菜名称,价格) values("baga",500),("nani",100);
2)删除数据:delete from 表 [where ...];
例子:delete from student where name="mary";
3)更新数据:update 表 set 列=新值 [where ...]
例子:update student set age=age+1,sex="男" where name="tom";
4)查询数据:select 列 [as 别名] from 表 where ... group by ... having ... order by[asc/desc] ... limit ...;
①单表查询:select 列 [as 别名] from 表 where 条件
②多表查询:
a、内联查询:
方法1(直接筛选有用数据):select 列 from 表1 inner join 表2 on 表1.列 = 表2.列;
方法2(先做笛卡尔积,后筛有用数据):select 列 from 表1,表2 where 表1.列 = 表2.列;
b、左联查询
c、右联查询
③子查询
④分组查询
分组函数:max()、min()、avg()、sum()、count()
a、select 列 from 表 where 条件 group by 分组条件;
b、select 列 from 表 where 条件 group by 分组条件 having 分组后的过滤条件;
[where是分组前过滤,后面不能直接跟分组函数;having是分组后过滤,后面可以直接跟分组函数]
c、排列
select 列 from 表 order by 列 / select 列 from 表 order by 列 asc:升序
select 列 from 表 order by 列desc:降序
d、分页
select 列 from 表 limit
limit 5----->前5行;limit5,10----->前6-10行
5、mysql的存储引擎
优先选择innodb和myiasm,区别如下:
1)innodb 读写都可以,支持事务,支持大部分约束。查询数据相对较慢,不适合大量的select;并发量较大,适合大量update。
2)myisam读为主,不支持事务,不支持部分约束。查询数据相对较快,适合大量的select,可以全文索引;并发量较小,不适合大量update。
6、mysql的约束
1)定义:约束实际上就是表中数据的限制条件。
2)作用:表在设计的时候加入约束的目的就是为了保证表中的数据的完整性和有效性。
3)种类:
①主键约束(primary key= 唯一约束 + 非空约束):对外键约束而言,列中数据是唯一的、不重复,每张表中只有一个主键,不能为空。
②外键约束(foreign key):对主键约束而言,列中数据依赖于另外一张表中的列数据。
若有两张表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键。外键约束主要用来维护两个表之间数据的一致性,实现1对1或1对n的关系。
注意事项:
a、被参考表的被参考列一定存在
b、被参考表的被参考列是主键约束
c、参考列和被参考列的数据类型必须一致
③唯一约束(unique):列中数据是唯一的,作为主键约束的补充,可以为空
如:email varchar(128) unique,如果插入相同email,则会报错。
④检查约束(check,目前MySQL不支持、Oracle支持):列中数据是否满足条件
⑤非空约束(not null ):列中数据不能为空
如:name varchar(32) not null,如果没插入name字段数据,则会报错。
语法如下:
create table 表(
列 数据类型 primary key,
列 数据类型 unique,
列 数据类型 check(条件),
列 数据类型 not null,
列 数据类型 foreign key references 被参考表(被参考列)
7、mysql的事务
1)MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务。
2)事务必须满足4个条件(ACID):
-
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
-
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
-
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
-
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
3)事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交