下载
https://dev.mysql.com/downloads/mysql/
配置环境变量
找到mysql所在文件夹目录,是bin文件,添加到系统的环境变量path中
链接mysql
- 使用cmd终端链接(不推荐)
- 打开cmd
- 输入mysql -uroot -p你的密码
- 使用可视化工具链接Navicat,或者vscode中插件
认识sql语句
- SQL是Structured Query Language,称之为结构化查询语言,简称SQL
- 通常关键字使用大写的,比如CREATE、TABLE、SHOW等等
- 如果遇到关键字作为表明或者字段名称,可以使用``包裹
- 一条语句结束后,需要以 ; 结尾
sql语句分类
- DDL(Data Definition Language):数据定义语言。可以通过DDL语句对数据库或者表进行:创建、删除、修改等操作
- DML(Data Manipulation Language):数据操作语言。可以通过DML语句对表进行:添加、删除、修改等操作
- DQL(Data Query Language):数据查询语言。可以通过DQL从数据库中查询记录
- DCL(Data Control Language):数据控制语言。对数据库、表格的权限进行相关访问控制操作
数据库操作
查看所有数据库
SHOW DATABASES;
创建新的数据库
CREATE DATABASE IF NOT EXISTS goods_db;
查看当前正在使用数据库
SELECT DATABASE();
使用某一数据库
USE music_db;
删除数据库
DROP DATABASE IF EXISTS goods_db;
修改数据库的字符集和排序规则(了解,不建议使用)
ALTER DATABASE music_db CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;
sql的数据类型
MySQL支持的数据类型有:数字类型,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型
- 数字类型
- 整数数字类型: INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT
- 浮点数字类型:FLOAT,DOUBLE(FLOAT是4个字节,DOUBLE是8个字节)
- 精确数字类型:DECIMAL,NUMERIC(DECIMAL是NUMERIC的实现形式)
- 日期类型
- YEAR:以YYYY格式显示值。范围 1901到2155,和 0000
- DATE:具有日期部分但没有时间部分的值。以格式YYYY-MM-DD显示值。支持的范围是 ‘1000-01-01’ 到 ‘9999-12-31’
- DATETIME:用于包含日期和时间部分的值。以格式’YYYY-MM-DD hh:mm:ss’显示值。支持的范围是1000-01-01 00:00:00到9999-12-31 23:59:59;
- TIMESTAMP:用于同时包含日期和时间部分的值。以格式’YYYY-MM-DD hh:mm:ss’显示值。它的范围是UTC的时间范围:‘1970-01-01 00:00:01’到’2038-01-19 03:14:07’
- 字符串类型
- CHAR:创建表时为固定长度,长度可以是0到255之间的任何值。在被查询时,会删除后面的空格
- VARCHAR:可变长度的字符串,长度可以指定为0到65535之间的值。在被查询时,不会删除后面的空格
- BINARY和VARBINARY:用于存储二进制字符串,存储的是字节字符串
- BLOB:用于存储大的二进制类型
- TEXT:用于存储大的字符串类型
表约束
- 主键:PRIMARY KEY
- 一张表中,我们为了区分每一条记录的唯一性,必须有一个字段是永远不会重复,并且不会为空的,这个字段我们通常会将它设置为主键
- 主键是表中唯一的索引
- 并且必须是NOT NULL的,如果没有设置 NOT NULL,那么MySQL也会隐式的设置为NOT NULL
- 主键也可以是多列索引,PRIMARY KEY(key_part, …),我们一般称之为联合主键
- 建议:开发中主键字段应该是和业务无关的,尽量不要使用业务字段来作为主键
- 唯一:UNIQUE
- 某些字段在开发中我们希望是唯一的,不会重复的,比如身份证号码等,这个字段我们可以使用UNIQUE来约束
- UNIQUE 索引允许NULL包含的列具有多个值NULL
- 不能为空:NOT NULL
- 默认值:DEFAULT
- 自动递增:AUTO_INCREMENT
数据表操作
查看所有数据表
SHOW TABLES;
查看表结构
DESC table_single;
创建数据表
CREATE TABLE IF NOT EXISTS `t_songs`(
title VARCHAR(20),
single_id INT,
create_time DATETIME
);
创建一张完整的表
CREATE TABLE IF NOT EXISTS `t_mv`(
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(20) NOT NULL,
single_id INT NOT NULL
);
删除表(很少删除)
DROP TABLE IF EXISTS t_songs;
修改表(很少修改,开始确定)
# 修改表名
ALTER TABLE `table_single` RENAME TO `t_single`;
# 添加一个新的列
ALTER TABLE `t_single` ADD `update_time` DATETIME;
# 删除一列
ALTER TABLE `t_single` DROP `update_time`;
# 修改列的名称
ALTER TABLE `t_single` CHANGE `create_time` `createTime` DATETIME;
# 修改列的数据类型
ALTER TABLE `moment` MODIFY `id` INT;
删除表中所有的数据
DELETE FROM `products`;
除符合条件的数据
DELETE FROM `products` WHERE `title` = 'iPhone';
修改完数据后,直接可以显示最新的更新时间
ALTER TABLE `products` ADD `updateTime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
DQL数据查询语言
查询格式如下
SELECT select_expr [, select_expr]...
[FROM table_references]
[WHERE where_condition]
[ORDER BY expr [ASC | DESC]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[GROUP BY expr]
[HAVING where_condition]
基本查询
# 查询所有的数据并且显示所有的字段
SELECT * FROM `products`;
# 查询title、brand、price
SELECT title, brand, price FROM `products`;
# 给字段起别名
SELECT title as t, brand as b, price as p FROM `products`;
where条件查询
比较运算符
# 查询价格小于1000的手机
SELECT * FROM `products` WHERE price < 1000;
# 查询价格大于等于2000的手机
SELECT * FROM `products` WHERE price >= 2000;
# 价格等于3399的手机
SELECT * FROM `products` WHERE price = 3399;
# 价格不等于3399的手机
SELECT * FROM `products` WHERE price != 3399;
逻辑运算符
# 查询品牌是华为,并且小于2000元的手机
SELECT * FROM `products` WHERE `brand` = '华为' and `price` < 2000;
SELECT * FROM `products` WHERE `brand` = '华为' && `price` < 2000;
# 查询1000到2000的手机(不包含1000和2000)
SELECT * FROM `products` WHERE price > 1000 and price < 2000;
# OR: 符合一个条件即可
# 查询所有的华为手机或者价格小于1000的手机
SELECT * FROM `products` WHERE brand = '华为' or price < 1000;
# 查询1000到2000的手机(包含1000和2000)
SELECT * FROM `products` WHERE price BETWEEN 1000 and 2000;
# 查看多个结果中的一个
SELECT * FROM `products` WHERE brand in ('华为', '小米');
模糊查询
# 模糊查询使用LIKE关键字,%表示匹配任意个的任意字符; _表示匹配一个的任意字符
# 查询所有以v开头的title
SELECT * FROM `products` WHERE title LIKE 'v%';
# 查询带M的title
SELECT * FROM `products` WHERE title LIKE '%M%';
# 查询带M的title必须是第三个字符
SELECT * FROM `products` WHERE title LIKE '__M%';
排序
# ORDER BY有两个常用的值。ASC:升序排列;DESC:降序排列
SELECT * FROM `products` WHERE brand = '华为' or price < 1000 ORDER BY price ASC;
分页查询
# 用法有[LIMIT {[offset,] row_count | row_count OFFSET offset}]
SELECT * FROM `products` LIMIT 30 OFFSET 0;
SELECT * FROM `products` LIMIT 30 OFFSET 30;
SELECT * FROM `products` LIMIT 30 OFFSET 60;
# 另外一种写法:offset, row_count
SELECT * FROM `products` LIMIT 90, 30;