1. MySQL简介
MySQL数据库,是由瑞典MySQL AB公司开发的一种关系型数据库。所谓关系型数据库,就是不同的数据表之间存在关联关系的数据库。
2. 安装MySQL
进入官网社区版下载页面:MySQL :: MySQL Community Downloads,之后需要登录自己的Orcale账户。
根据需要选择对应的操作系统的版本:
对于windows系统,可以直接下载傻瓜式安装包,一路点击下一步即可完成安装。
而对于Linux系统,则可根据需要,选择源码安装或者二进制包傻瓜式直接安装。
当安装完成后,建议将安装根目录下的bin目录添加到系统的环境变量中,以便直接调用mysql。初始安装后,默认的root用户密码为空,可直接进入mysql控制台,修改root密码。
连接数据库:
# 初始进入mysql,可直接进入控制台
$ mysql
# 在修改密码之后,则需要认证
$ mysql -u root -p
之后,输入该用户的密码,按回车,就可以进入mysql的控制台界面。出现以下界面,就表示成功进入mysql数据库的管理界面!在该控制台界面中,即可输入sql相关语句进行各种操作。
3. 针对数据库(DDL)的操作
创建数据库
# 创建数据库DB1(注意数据库的名字是区分大小写的,不过在windows系统中默认并不区分大小写,这一点要注意!!)
CREATE DATABASE DB1;
如果该数据库不存在,就可以成功创建该数据库,同时,会将该数据库的信息存入information_schema数据库中。
显示数据库
# 显示所有的数据库
SHOW DATABASES;
可以看出,存在上述已存在的数据库,其中,information_schema,mysql,performance_schema,sys是mysql内置的已有数据库,存有与mysql本身基本信息的数据。
先要操作某一个数据库,那么就必须先进入该数据库:
# 进入刚刚创建的数据库
USE DB1;
当出现“Database changed”之后,就表示进入到了该数据库之中。同时,为了确认是否处在该数据库中。可以通过以下命令查看当前所在的数据库:
# 查看当前所在的数据库
SELECT DATABASE();
显示表格
# 显示所有的表格
SHOW TABLES;
发现结果是“Empty set”(空集合)。由于我们并没有创建相关表格,所以也就没有表格信息。
删除数据库
# 删除数据库
DROP DATABASE DB1;
当然,为了保证严谨性,也可以通过加上限定条件来删除存在的数据库,防止报错:
# 删除存在的数据库
DROP DATABASE IF EXISTS DB1;
# 删除不存在的数据库
DROP DATABASE IF EXISTS DB2;
查看表的结构
对于表的结构,可以进入到已有的内置数据库information_schema中查看:
首先,我们先进入到该数据库中
# 进入到information_schema数据库
USE information_schema;
# 查看该数据库中表的信息
SHOW TABLES;
之后,我们通过desc+表名命令查看该表的结构
# 查看该表CHARACTER_SETS的结构
desc CHARACTER_SETS;
我们可以得到如下的结果,其中包括六列的内容,包括:Field(字段)、Type、Null、Key、Default和Extra。
- Field,字段,相当于Excel中的列名
- Type,类型,数据类型,相当于excel中的单元格类型
- null,是否可以为空值
- key,键类型,是否为主键
- Default,默认值
- Extra,备注信息
其中,比较值得关注的是字段的数据类型,不同的数据类型可以用以下的表格总结:
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 | 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/’838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 |
TIMESTAMP | 4 | ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
操作表
#创建表
# CREATE TABLE 表名 (
field1 type1,
field2 type2,
field3 type3,
...,
fieldn typen,
);
# 我们可以创建一个示例表table1(注意:最后一行不要有逗号)
create table table1 (
id int,
username varchar(20),
password varchar(32)
);
#修改表名
# ALTER TABLE 表名 RENAME TO 新表名;
ALTER TABLE table1 RENAME TO new_table1;
#添加一列
# ALTER TABLE 表名 ADD 列名 数据类型;
ALTER TABLE new_table1 ADD address varchar(32);
#修改数据类型
# ALTER TABLE 表名 MODIFY 列名 新数据类型;
ALTER TABLE new_table1 MODIFY address varchar(64);
#修改列名和数据类型
# ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
ALTER TABLE new_table1 CHANGE address address1 varchar(33);
#删除列
# ALTER TABLE 表名 DROP 列名;
ALTER TABLE new_table1 DROP address1;
4. navicat安装使用
Navicat官网:Navicat | 支持 MySQL、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理。若找不到免费激活版,可参考页面底部的TJUPT站点,自行申请账号进行下载。
5. 数据操作(DML)增删改
添加数据
# INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);
# 注意,字符串必须要加上引号
INSERT INTO new_table1(id,username,password) VALUES(1,'liming','123');
INSERT INTO new_table1(id,username,password) VALUES(2,"liming1","123");
#添加数据
# INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);
# 注意,字符串必须要加上引号
INSERT INTO new_table1(id,username,password) VALUES(1,'liming','123');
INSERT INTO new_table1(id,username,password) VALUES(2,"liming1","123");
# 给指定列添加数据
INSERT INTO new_table1(id,username) VALUES(3,"lingling");
#批量添加数据
# INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
# 注意,字符串必须要加上引号
INSERT INTO new_table1(id,username,password) VALUES(4,'daming','123'),(5,'amy','123'),(6,'xiaohai','123');
# 可以省略列名
# INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
INSERT INTO new_table1 VALUES(7,'daming','123'),(8,'amy','123'),(9,'xiaohai','123');
修改数据
#修改表数据
# UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件];
# 注意,字符串必须要加上引号
UPDATE new_table1 SET username="haimeimei" WHERE id=1;
删除表数据
# DELETE FROM 表名 [WHERE 条件];
# 注意,若不加限制条件,所有数据均会被删除
DELETE FROM new_table1 WHERE id=2;
6. DQL查询数据操作
基础查询
#查询多个字段数据
# SELECT 字段1,字段2,... FROM 表名;
SELECT id,username,password FROM new_table1;
# 查询所有字段
# SELECT 字段1,字段2,... FROM 表名;
SELECT * FROM new_table1 where id=1;
#去除重复记录
# SELECT DISTINCT 字段1,字段2,... FROM 表名;
SELECT DISTINCT id,username,password FROM new_table1;
条件查询
# SELECT * FROM 表名 WHERE id BETWEEN start AND end;
SELECT * FROM new_table1 WHERE id BETWEEN 1 AND 3;
# 查询特定值的结果
SELECT * FROM new_table1 WHERE id = 1;
# 查询不连续范围的结果
SELECT * FROM new_table1 WHERE id = 1 OR id = 3 OR id = 5;
SELECT * FROM new_table1 WHERE id in (1,3,5);
# 查询password为/不为NULL的结果
(错误)SELECT * FROM new_table1 WHERE password = NULL;
(正确)SELECT * FROM new_table1 WHERE password is NULL;
(正确)SELECT * FROM new_table1 WHERE password is not NULL;
符号 | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
<>或!= | 不等于 |
= | 等于 |
BETWEEN … AND … | 在某个范围内 |
IN(…,…) | 多选一 |
LIKE 占位符 | 模糊查询 _单个字符 %多个字符 |
IS (NOT) NULL | 是否为NULL |
AND(&&), OR(||) | 且或运算 |
NOT | 非,不是 |
排序查询
#排序查询法(默认是升序)
# DESC: 降序
# ASC: 升序
# ASC: 升序
#SELECT 字段 FROM 表名 ORDER BY 字段名;
SELECT * FROM new_table1 ORDER BY id;
# DESC: 降序
SELECT * FROM new_table1 ORDER BY id DESC;
聚合查询
用法: select 聚合函数名(字段名) from 表名;
# SELECT count(字段) FROM 表名;
SELECT COUNT(id) FROM new_table1;
# 获取最大值/最小值/平均值/总和
SELECT max(id) FROM new_table1;
SELECT min(id) FROM new_table1;
SELECT avg(id) FROM new_table1;
SELECT sum(id) FROM new_table1;
分组查询
# SELECT 字段列表 FROM 表名 [where 条件 分组前条件过滤] GROUP BY 字段名 [having分组后条件过滤];
# 筛选new_table1中以username进行分组后对id数量进行统计
SELECT username, count(id) FROM new_table1 GROUP BY username;
# 筛选new_table1中以username进行分组且id<=7后对id数量进行统计
SELECT username, count(id) FROM new_table1 where id <= 7 GROUP BY username;
# 筛选new_table1中以username进行分组且id<=7后对id数量进行统计,筛选出count值>=2的数据
SELECT username, count(id) FROM new_table1 where id <= 7 GROUP BY username having count(id)>=2;
分页查询
# SELECT 字段名 FROM 表名 LIMIT 起始索引, 查询条目;
SELECT * FROM new_table1 LIMIT 0, 3;
# 每页显示3条数据,查询第1页数据
SELECT * FROM new_table1 LIMIT 0, 3;
# 每页显示3条数据,查询第2页数据
SELECT * FROM new_table1 LIMIT 3, 3;
# 每页显示3条数据,查询第3页数据
SELECT * FROM new_table1 LIMIT 6, 3;