MySQL 介绍
MySQL 是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据比如用户信息
由于 MySQL 是开源免费并且比较成熟的数据库,因此,MySQL 被大量使用在各种系统中。任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL 的默认端口号是3306(Oracle默认端口是1521)。
MySQL中的数据类型
MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:
- 数字类型
- 整数: tinyint、smallint、mediumint、int、bigint
- 浮点数: float、double、real、decimal
- 补充:int(4)长度只是影响显示长度,这里的显示长度是指左侧补0后的长度(比如存储1,显示的时候前面会补三个0),不影响存储长度
- 日期和时间: date、time、datetime、timestamp、year
- 字符串类型
- 字符串: char、varchar
- 文本: tinytext、text、mediumtext、longtext
- 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob
使用MySQL数据库
登录到MySQL
mysql -h 主机名 -u 用户名 -p
- -h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;
- -u : 所要登录的用户名;
- -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
创建数据库和表:
/**
创建数据库
create database 数据库名;
*/
CREATE DATABASE mydatabase;
-- 创建带有编码的:
create database 库名 character set 编码
-- 查看数据库编码:
show create database 库名
/**
命令查看已经创建了哪些数据库。
*/
show databases;
/**
使用数据库
Use 数据库名;
*/
USE mydatabase;
/**
创建数据表的格式
create table 表名(
列名1 数据类型 约束,
列名2 数据类型 约束,
);
创建用户表,用户编号,姓名,用户的地址
将编号列,设置为主键约束,保证列的数据唯一性,非空性
primary key AUTO_INCREMENT
让主键列数据,实现自动增长
*/
CREATE TABLE users(
uid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20),
uaddress VARCHAR(50)
);
/*
show tables 显示所有数据表
desc users 查看表中结构
drop table users删除数据表
*/
SHOW TABLES;
修改表:
CREATE TABLE users(
uid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20),
uaddress VARCHAR(50)
);
/*
添加列,添加字段
alter table 表名 add 列名 数据类型 约束
*/
ALTER TABLE users ADD tel INT;
/*
修改列,在原有的列上修改
修改列名,数据类型,约束
alter table 表名 modify 列名 数据类型 约束
*/
ALTER TABLE users MODIFY tel VARCHAR(50);
/*
修改列名
alter table 表名 change 旧列名 新列名 数据类型 约束
*/
ALTER TABLE users CHANGE tel newtel DOUBLE;
/*
删除列
alter table 表名 drop 列名
*/
ALTER TABLE users DROP newtel;
/*
修改表名
rename table 表名 to 新名
*/
RENAME TABLE users TO newuser;
向表中插入数据
/*
像表中添加数据
insert into 表名(列名1,列名2,列名3) values (值1,值2,值3)
*/
INSERT INTO product(id,pname,price) VALUES (1,'电脑',1234.44);
INSERT INTO product(pname,price) VALUES ('手机',1323.34);
INSERT INTO product VALUES (3,'被子',123.2);
/*
添加数据格式,批量写入
格式:
insert into 表名 (列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3)
*/
INSERT INTO product (id,pname,price) VALUES (4,'箱子',123.44),(5,'鞋子',234.23);
修改表数据:
/*
对数据进行更新操作
数据在原有的基础上修改
update 表名 set 列1=值1,列2=值2 where 条件
where 条件:数据中的唯一性
*/
USE mydatabase;
-- 修改电脑为电灯
UPDATE product SET pname='电灯' WHERE id=1;
-- 修改被子价格为234
UPDATE product SET price=234 WHERE id=3;
/*
修改条件的写法
id=6
id<>6 //不等于6
id<=6
&& || !
&&:and
||or
!not
id in(1,2,3)包含
*/
-- 将箱子的价格和鞋子的价格修改为300
UPDATE product SET price=300 WHERE id=4 OR id=5;
/*
删除表中的数据
delete from 表名 where 条件
drop table 表名 删除整个表
*/
DELETE FROM product WHERE id=1;
查询表数据:
CREATE TABLE zhangwu(
id INT PRIMARY KEY AUTO_INCREMENT,
zname VARCHAR(200),
zmoney DOUBLE
);
INSERT INTO zhangwu (id,zname,zmoney) VALUES (1,'吃饭支出',247);
INSERT INTO zhangwu (id,zname,zmoney) VALUES (2,'工资收入',12345);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (3,'服装支出',1000);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (4,'吃饭支出',325);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (5,'股票收入',8000);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (6,'打麻将支出',8000);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (7,NULL,5000);
/*
查询指定的数据
select 列名1,列名2 from 表名
*/
SELECT zname FROM zhangwu;
SELECT zmoney,zname FROM zhangwu;
/*
查询所有列的数据
select * from 表名
*/
SELECT * FROM zhangwu;
/*
查询去掉重复记录
DISTINCT
*/
SELECT DISTINCT zmoney FROM zhangwu;
/*
查询重新命名列
as关键字
*/
SELECT zname AS 'name' FROM zhangwu;
/*
查询数据中,直接进行数学计算
*/
SELECT zname,zmoney+100 AS 'sum' FROM zhangwu;
/*
查询所有的吃饭支出
*/
SELECT * FROM zhangwu WHERE zname='吃饭支出';
-- 查询金额大于1000
SELECT * FROM zhangwu WHERE zmoney>1000;
-- 查询金额在2000到5000之间
SELECT * FROM zhangwu WHERE zmoney BETWEEN 2000 AND 5000;
-- 查询金额是 1000,3500,5000 其中一个
SELECT * FROM zhangwu WHERE zmoney IN(1000,3500,5000);
-- like 模糊查询 配合通配符
-- 查询所有的支出
SELECT * FROM zhangwu WHERE zname LIKE '%支出%';
-- 查询账务名字,四个字符的
SELECT * FROM zhangwu WHERE zname LIKE'____'
-- 查询账务名,不为空的
SELECT * FROM zhangwu WHERE zname IS NOT NULL;
查询排序:
/*
查询,对结果集进行排序
升序,降序,对指定列排序
order by 列名 [desc][asc]
desc 降序
asc 升序排列,可以不写
*/
-- 查询账务表,价格进行升序
SELECT * FROM zhangwu ORDER BY zmoney ASC;
-- 查询账务表,价格进行降序
SELECT * FROM zhangwu ORDER BY zmoney DESC;
-- 查询账务表,查询所有的支出,对金额降序排列
-- 先过滤条件 where 查询的结果再排序
SELECT * FROM zhangwu WHERE zname LIKE'%支出%' ORDER BY zmoney DESC;
聚合函数:
/*
count 求和,对表中的数据个数求和
查询统计账务表中,一共有多少条数据
*/
SELECT COUNT(*) AS 'count' FROM users ;
-- sum求和,对一列数据进行求和计算
SELECT SUM(zmoney) FROM users;
-- 求和,统计所有支出的总金额
SELECT SUM(zname) FROM users WHERE zname LIKE'%收入%'
-- max 函数,对某列数据,获取最大值
SELECT MAX(zmoney) FROM users;
-- avg,计算一个列所有数据的平均数
SELECT AVG(zmoney)FROM users;
分组查询:
/*
查询所有的数据
吃饭支出 共计多少
工资收入 共计多少
服装支出 共计多少
股票收入 共计多少
打麻将支出 共计多少钱
分组查询: group by 被分组的列名
必须跟随聚合函数
select 查询的时候,被分组的列,要出现在select 选择列的后面
*/
USE mydatabase;
SELECT SUM(zmoney),zname FROM users GROUP BY zname;
-- 对zname 内容进行分组查询求和,但只要支出
SELECT SUM(zmoney) AS 'getsum',zname FROM users
WHERE zname LIKE '%支出%' GROUP BY zname
ORDER BY getsum DESC;
-- 对zname内容进行分组查询求和,但只要支出,显示金额大于5000
-- 结果集是分组查询后,再次进行筛选,不能使用where, 分组后再次过滤,关键字 having
SELECT SUM(zmoney) AS 'getsum',zname FROM users WHERE zname LIKE'%支出%'
GROUP BY zname HAVING getsum>5000;
分页查询
-- 分页查询使用的是limit关键字进行查询。它后面有两个参数。
-- 第一个参数[取值为:(需要查看第几页-1)乘以第二个参数] 是起始的位置,
-- 第二个参数是每页需要显示的条目数
select * from table limit (pageNo-1)*pageSize, pageSize;
查询语句中关键字的顺序
select 一般在的后面的内容都是要查询的字段
from 要查询到表
where
group by
having 分组后带有条件只能使用having
order by 它必须放到最后面
limit (pageNo-1)*pageSize, pageSize
创建索引
-
添加 PRIMARY KEY(主键索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
-
添加 UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
-
添加 INDEX(普通索引)
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
-
添加 FULLTEXT(全文索引)
ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
-
添加联合索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )