一,简介
1.1 数据库是用来存放数据的,对数据库的操作需要用到SQL语句
1.2 数据库种类有也非常多:
关系型数据库:
Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、SQLite
非关系型数据库:
NoSql、Cloudant、MongoDb、redis、HBase
1.3 常用的是Oracle、MySQL、SQLite
二 常用语句操作,MySQL创建用户表为例
2.1 mysql其他数据类型五大类
整数类型:BIT、BOOL、TINY INT等。
浮点数类型:FLOAT、DOUBLE、DECIMAL。
字符串类型:TEXT、MEDIUM TEXT、LONGTEXT等。
日期类型:Date、DateTime、TimeStamp、Time、Year。
其他数据类型:BINARY、VARBINARY、ENUM、SET等。
2.2 登录MySQL数据库,cmd命令进入MySQL安装目录bin
cd D:\PHPTools\mysql-5.7.25\bin
2.3 登录数据库,执行命令,输入密码
mysql -u root -p
2.4 创建数据库
create database DONG;
2.5 删除数据库
drop database DONG;
2.6 使用数据库
use DONG;
2.7 创建用户表
CREATE TABLE IF NOT EXISTS `user`(
`uid` INT UNSIGNED AUTO_INCREMENT,
`account` VARCHAR(100) NOT NULL,
`password` VARCHAR(100) NOT NULL,
`name` VARCHAR(100),
`sign` VARCHAR(500),
`avatar` VARCHAR(100),
`time` DATE,
PRIMARY KEY (`uid` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.8 查看全部表
show tables;
2.9 查看表数据结构
desc user;
2.10 删除表
DROP TABLE user;
2.11 插入用户表数据
INSERT INTO user
(account,password,name,sign,time)
VALUES
("test" , "123456" , "zhangsan" , "hahahahaha" , NOW());
2.12 查询用户表数据
select * from user;
2.13 where 根据用户id查询
select * from user where uid =2;
2.14 更新用户id是2的,用户的名字和签名
UPDATE user SET name="lisi-lisi222" , sign="吼吼吼吼-吼吼吼吼222" where uid=2;
再次查询可以看到用户名和签名已变
select * from user where uid =2;
2.15 删除用户id==1的那条数据
DELETE FROM user WHERE uid=1;
再次查询用户表,可以看到没有用户id==1的数据了
三 进阶查询,MySQL创建文章表为例
3.1 创建文章表,并关联用户表,创建用户表外键
CREATE TABLE IF NOT EXISTS `article`(
`id` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`content` TINYTEXT NOT NULL,
`time` DATE,
PRIMARY KEY (`id` ),
uid INT references user(uid)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.2 创建多个文章数据
INSERT INTO article
(title,content,time,uid)
VALUES
("哈哈" , "哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈" , NOW() , 1);INSERT INTO article
(title,content,time,uid)
VALUES
("吼吼" , "吼吼吼吼吼吼吼吼吼吼吼吼吼吼吼吼" , NOW() , 1);INSERT INTO article
(title,content,time,uid)
VALUES
("嗷嗷" , "嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷" , NOW() , 2);INSERT INTO article
(title,content,time,uid)
VALUES
("呵呵" , "呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵" , NOW() , 2);
3.3 查询文章表数据,可以看到有4条数据
select * from article;
3.4 LIKE 模糊查询
select * from article where content like "%哈哈";
3.5 查询uid==1的文章
select * from article where uid =1;
3.6 文章表按用户ID降序排序,ASC,DESC
select * from article ORDER BY uid DESC;
3.7 ORDER BY分组,文章表按用户分组,统计每个人有多少文章
SELECT COUNT(*) FROM article GROUP BY uid;
3.8 LIMIT 限制返回条数,如下限制返回2条数据
select * from article LIMIT 2;
3.9 分页
select * from table_name limit [offset,] rows
offset:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为0
rows:返回具体行数
如下,文章表从第2行开始,检索3行记录,即:检索记录行 3-4
select * from article limit 2 ,3;
分页格式,查询每页10条数据,page页码,pageSize每页条数
select * from table limit (page-1)*pageSize,pageSize;
select * from article limit 0,10;
3.10 ALTER修改表
MODIFY修改文章表字段类型,修改title 从 VARCHAR 改为 TEXT
ALTER table article MODIFY title TEXT;
或使用CHANGE 修改文章表字段名字,修改 title 为 name。CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型
ALTER table article CHANGE title name TEXT;
查询后可以看到title的名字和类型都变了
3.11 UNION 连接两个以上的表,将结果合并到一个集合中,多个 SELECT 语句会删除重复的数据
SELECT uid FROM user
UNION
SELECT uid FROM article
ORDER BY uid;
用户表和文章表都存在用户id是1,2的数据
四 多表联合查询
4.1 OIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
4.2 先看下两个表的全部数据
4.2 INNER JOIN 内连接
查询两个表的相同uid的
select a.name , b.name from user a INNER JOIN article b ON a.uid=b.uid;
4.3 LEFT JOIN 左连接
select a.name , b.name from user a LEFT JOIN article b ON a.uid=b.uid;
4.4 RIGHT JOIN 右连接
select a.name , b.name from user a RIGHT JOIN article b ON a.uid=b.uid;
五 事务
5.1 事务概念
- 在数据库中,我们将一条 SQL 语句称为一次基本的操作。将若干条 SQL 语句“打包”在一起,共同执行一个完整的任务,这就是事务。
- 事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。
5.2 事务控制语句:
BEGIN 或 START TRANSACTION 显式地开启一个事务;
COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;
ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
ROLLBACK TO identifier 把事务回滚到标记点;
SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
5.3 MYSQL 事务处理主要有两种方法
1、用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交
5.4 事务的使用
begin;开始, commit;结束,中间是执行的语句称之为事务
begin;
INSERT INTO user
(account,password,name,sign,time)
VALUES
("shiwu" , "123456" , "shiwu_name" , "事务签名" , NOW());
INSERT INTO article
(name,content,time,uid)
VALUES
("事务" , "事务事务事务事务事务事务" , NOW() , 1);
commit;
六 临时表
6.1 作用:
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间
6.2 TEMPORARY创建临时表
CREATE TEMPORARY TABLE IF NOT EXISTS `article_te`(
`id` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`content` TINYTEXT NOT NULL,
`time` DATE,
PRIMARY KEY (`id` ),
uid INT references user(uid)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
6.3 使用 SHOW TABLES命令显示数据表列表时,你将无法看到 article_te表
6.4 删除临时表,默认情况下,当你断开与数据库的连接后,临时表就会自动被销毁。当然你也可以在当前MySQL会话使用 DROP TABLE 命令来手动删除临时表。
DROP TABLE article_te;
七 导出数据
7.1 使用 SELECT ... INTO OUTFILE 语句导出数据
SELECT * FROM user INTO OUTFILE 'D:\\PHPTools\\mysql-5.7.25\\outfile\\user.txt';
7.2 可能出现导出失败的提示
这是mysql设置的权限的问题,可以使用show variables like ‘%secure%’;查看 secure-file-priv 当前的值是什么
可以看到最后一行 secure_file_priv 是 NULL就代表禁止导出,需要在my.ini里面配置一下
MySQL服务重启一下
再次执行导出
SELECT * FROM user INTO OUTFILE 'D:\\PHPTools\\mysql-5.7.25\\outfile\\user.txt';
可以看到成功了
在目录里面会生成一个文本文件
打开文件内容如下
八 导入数据
8.1 使用 LOAD DATA 导入数据
新建一个 user2 空白表
8.2 查询空数据
8.3 导入刚的 user.txt 文件
LOAD DATA LOCAL INFILE 'D:\\PHPTools\\mysql-5.7.25\\outfile\\user.txt' INTO TABLE user2;
8.4 再次查询,看到数据已经导入进来了
8.5 注意:
如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件