MySQL的简单使用(一)

2020-11-20  本文已影响0人  哆啦_
  1. 下载MySQL
  2. 终端执行MySQL命令
    1. 会发现 command not found: mysql
    2. 因为MySQL没有添加到环境变量中(如果想要在任意地方命令得到执行 必须把命令添加到环境变量中)
    3. Mac添加环境变量:终端执行 export PATH=$PATH:/usr/local/mysql/bin

终端连接MySQL

mysql -uroot -p********

或者可以mysql -uroot -p 然后回车,再输入密码

常见命令

show databases; 展示所有的数据库(默认会有四个数据库)

// 默认数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

information_schema:信息数据库。其中包括MySQL在维护的其他数据库、表、列、访问权限等信息

performance_schema:性能数据库。记录着MySQL Server数据库引擎在运行过程中资源消耗相关的信息

mysql:用于存储数据库管理者的用户信息、权限信息以及日志信息等

sys:相当于是建议版的performance_schema,将性能数据库中的数据汇总成更容易理解的形式;

create database 名称;:创建数据库

select database();:查看当前使用的数据库,没有选择的话就是NULL

+------------+
| database() |
+------------+
| NULL       |
+------------+

use 数据库名;:使用选择的数据库

show tables;:查看当前数据库中有哪些表

create table users(
    -> name varchar(10),
    -> age int,
    -> height double);

创建一张表,并指定表中字段以及类型。这里创建一个名为users的表,表中字段有name,age以及height。

select * from 表名; 查询表中所有的数据

insert into 表名 (字段1,字段2,...) vaules (vaule1,value2, ...);:插入数据

insert into users (name, age, height) values ('lilei', 20, 1.88);

GUI工具

使用终端操作数据库有很多不方便的地方,比如语句没有高亮、没有任何提示、格式不美观,容易出现错误等等。所以在开发中可以使用一些GUI工具

常见的MySQL的GUI工具有很多,比如:Navivat(收费),SQLYog(免费),TablePlus(常用功能都可以使用,但有一些限制)

这里使用的是Navicat,下载安装之后,点击左上角的连接,选择MySQL,创建一个连接

image.png

创建之后双击我们创建的连接名,就可以连接到数据库。可以看到我们已经有的数据库。

SQL语句

跟数据库进行沟通的语言就是SQL。SQL是Structured Query Language的缩写,称之为结构化查询语言。使用SQL编写的语句就是SQL语句,SQL语句可以用于对数据库进行操作。

常见的关系型数据库SQL语句都是比较类似的。所以学习了MySQL之后再去学习Oracle或者其他关系型数据库也是很方便的。

SQL语句的常用规范:

* 通常关键字是大写的,比如`CREATE`、`TABLE`、`SHOW`等
* 一条语句结束后需要以`;`分号结尾
* 如果关键字作为表名或者字段名,需要使用``进行包裹。

SQL语句的分类

常见的SQL语句可以分为四类:

数据库的操作

image.png

字符集:代表存到数据库中的数据以什么样的编码存储,默认为utf8mb4。但不能正常存储emoji表情。

排序规则:ai表示排序的时候不区分轻重音,as的话表示区分轻重音。ci表示不区分大小写,cs表示区分大小写。

比如创建数据库时可以指定对应的编码和排序规则(不常用):

CREATE DATABASE IF NOT EXISTS huya DEFAULT CHARACTER SET utf8mb4
                COLLATE utf8mb4_0900_ai_ci;

修改数据库的编码(COLLATE是排序规则):

# 修改数据库的编码 
ALTER DATABASE bili CHARACTER SET = utf8 
                COLLATE = utf8_unicode_ci;

MySQL的数据类型

MySQL支持的数据类型有:数字类型,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型。

MySQL支持的数据类型有:数字类型,日期,时间类型,字符串(字符和字节)类型,空间类型和JSON数据类型

数字类型

MySQL数字类型有很多。

整数类型有:INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT

Type Storage (Bytes) Minimum Value Signed Minimum Value Unsigned Maximum Value Signed Maximum Value Unsigned
TINYINT 1 -128 0 127 255
SMALLINT 2 -32768 0 32767 65535
MEDIUMINT 3 -8388608 0 8388607 16777215
INT 4 -2147483648 0 2147483647 4294967295
BIGINT 8 -263 0 263-1 264-1

浮点数字类型:FLOAT,DOUBLE(FLOAT是4个字节,DOUBLE是8个字节)

精确数字类型:DECIMAL,NUMERIC (DECIMAL是NUMERIC的实现形式);

日期类型

日期和时间类型有:DATE, TIME, DATETIME, TIMESTAMP, YEAR

DATETIME和TIMESTAMP都是以格式YYYY-MM-DD hh:mm:ss显示值,他们的主要区别在于DATETIME支持的范围是1000-01-01 00:00:009999-12-31 23:59:59;TIMESTAMP数据类型的范围是UTC时间:1970-01-01 00:00:012038-01-19 03:14:07

表约束

主键:PRIMARY KEY

唯一:UNIQUE

默认值:DEFAULT

自动递增:AUTO_INCREMENT

CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT, # id设置为主键,并且是递增的 
    name VARCHAR(20) NOT NULL, # name设置为可变字符类型,并且长度在20以内,且不能为空 
    age INT DEFAULT 0, # age设置为INT类型 默认为0 
    phoneNum VARCHAR(20) UNIQUE DEFAULT '', # 手机号为20个字符以内的 唯一 且默认为‘’
    createTime TIMESTAMP
)
# 删除数据表
DROP TABLE users;
DROP TABLE IF EXISTS users;

修改表

修改表的名字

语法:ALTER TABLE 表名 RENAME TO 新表名;

// 将数据表users改名为user
ALTER TABLE `users` RENAME TO `user`;

添加新的列

语法:ALTER TABLE 表名 ADD 新列的名 类型;

# 2.添加新的列 在user表中新增TIMESTAMP类型的updateTime字段 
ALTER TABLE `user` ADD `updateTime` TIMESTAMP;

修改字段的名字

语法:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段的类型;

# 3.修改字段名称 将user表中的phoneNum字段名修改为telphone 类型为 VARCHAR(20)
ALTER TABLE `user` CHANGE `phoneNum` `telPhone` VARCHAR(20);

修改字段的类型

语法:ALTER TABLE 表名 MODIFY 字段名 新的字段类型;

# 4.修改字段的类型 将user表中的name字段的类型修改为VARCHAR(30)
ALTER TABLE `user` MODIFY `name` VARCHAR(30);

删除字段

语法:ALTER TABLE 表名 DROP 要删除的字段;

# 5.删除字段 删除user表中的age字段
ALTER TABLE `user` DROP `age`;

根据表的结构创建另一张表

语法:CREATE TABLE 新表名 LIKE 表名

只会复制表的结构,而不会把表的内容复制到新创建的表

# 根据user表的结构创建表user2
CREATE TABLE `user2` LIKE `user`;

根据表的内容创建另一张表

语法:CREATE TABLE 新表名 AS(可省略) (SELECT * FROM 表名);

# 根据user表中的内容创建user3表
// CREATE TABLE `user3` AS (SELECT * FROM `user`);
CREATE TABLE `user3` (SELECT * FROM `user`);

DML-对数据库的增删改

插入数据

语法:INSERT INTO 表名 (字段1,字段2,...) VALUES (value1,value2,...)

# 向user表中插入数据
INSERT INTO user VALUES (110,'lwy','15665431234','2020-11-11','2020-12-12');
# 向user表中插入对应字段的数据
INSERT INTO user (name,telPhone,createTime,updateTime) 
                        VALUES ('zhangsan','020-123456','2020-11-12','2020-12-13');
                        
INSERT INTO user (name, telPhone) 
                        VALUES ('lisi','030-213456');

设置字段的默认值

# createTime 默认为创建时的时间 
ALTER TABLE user MODIFY createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
# updateTime 默认为创建时间 在修改时自动设置修改时间 
ALTER TABLE user MODIFY updateTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
INSERT INTO user (name, telPhone) 
                        VALUES ('lris','050-213456');

删除数据

语法:DELETE FROM 表名; DELETE FROM 表名 WHERE 条件;

# 删除user表中所有的数据 
DELETE FROM user;
# 删除user表中id为110的数据
DELETE FROM user WHERE id = 110;

更新数据

# 更新所有的数据 
UPDATE user SET name = '李四', telPhone = '012-12345600';
# 更新符合条件的数据 
UPDATE user SET name = '李四', telPhone = '012-12345600' WHERE id = 111;

DQL语句

DQL:Data Query Language(数据查询语言)

官方文档介绍的很详细。

基本查询

# 1.基本查询 
# 查询表中所有字段和所有数据 
SELECT * FROM products;
# 查询指定的字段 
SELECT title, price FROM products;
# 对字段结果起别名 
SELECT title AS phoneName, price AS currentPrice FROM products;

WHERE查询条件

  1. 基本查询

    # WHERE后面是查询条件 
    SELECT * FROM products WHERE price = 1000;
    SELECT title, price FROM products WHERE price > 1000;
    # 下面两种写法是一样的 都是不等于 
    SELECT * FROM products WHERE price != 1000;
    SELECT * FROM products WHERE price <> 1000;
    
  2. 逻辑运算符

    # 案例一:价格1000到2000的手机 
    SELECT * FROM products WHERE price > 1000 AND price < 2000;
    SELECT * FROM products WHERE price > 1000 && price < 2000;
    # BETWEEN AND包含等于的情况 
    SELECT * FROM products WHERE price BETWEEN 1000 AND 2000;
    
    
    # 逻辑或 
    SELECT * FROM products WHERE price > 5000 || brand = '华为';
    
    # 查询一个值是否为NULL 
    # 查询url为NULL的数据 
    SELECT * FROM products WHERE url IS NULL;
    # 查询url不为NULL的数据 
    SELECT * FROM products WHERE url IS NOT NULL;
    
  3. 模糊查询

    模糊查询使用LIKE关键字,结合两个特殊的符号:

    • %表示匹配任意个(0个或多个)的任意字符
    • _表示匹配一个的任意字符;
    # 查询 title中有M的数据 
    SELECT * FROM products WHERE title LIKE '%M%';
    # 查询title中第二个字母是P的数据 
    SELECT * FROM products WHERE title LIKE '_P%';
    
  4. IN:取多个值中的一个即可

    SELECT * FROM products WHERE brand = '华为' || brand = '小米' || brand = '苹果';
    # 这句跟上面的作用相同 
    SELECT * FROM products WHERE brand IN ('华为','小米','苹果');
    

排序

通过ORDER BY关键字进行排序

ASC: 升序

DESC:降序

# 查询结果的排序 
# ASC: 升序 DESC:降序 
# 查询的结果根据价格的升序排序 
SELECT * FROM products WHERE brand IN ('华为','小米','苹果') ORDER BY price ASC;
# 查询的结果以价格的升序排序 价格相同时以score的降序排序 
SELECT * FROM products WHERE brand IN ('华为','小米','苹果') ORDER BY price ASC, score DESC;

分页查询

LIMIT查询的数据,OFFSET:偏移量

语法:LIMIT limit OFFSET offset

或者可以 LIMIT offset,limit

SELECT * FROM products LIMIT 20 OFFSET 0;
# 偏移量0 长度为20 等同于上面的
SELECT * FROM products LIMIT 0,20;

聚合函数

聚合函数表示对值集合进行操作的组(集合)函数

默认情况下,聚合函数相当于是将整张表的数据看作一组数据,对这一组数据进行某些操作使用的函数就是聚合函数。

1.聚合函数的使用
 # 1.1 求所有手机价格的总和 
SELECT SUM(price) FROM products;
## 设置名称 
SELECT SUM(price) AS totalPrice FROM products;
## AS可以省略 
SELECT SUM(price) totalPrice FROM products;
2.GROUP BY

GROUP BY通常和聚合函数一起使用。表示我们先对数据进行分组,再对每一组数据,进行聚合函数的计算;

按照品牌来分组计算对应的平均价格 数量 平均评分

SELECT AVG(price), COUNT(*), AVG(score) FROM products GROUP BY brand;

结果如下:


但可以看出来并没有显示对应的品牌名称,如果要显示对应的品牌名称

SELECT brand, AVG(price), COUNT(*), AVG(score) FROM products GROUP BY brand;

需要注意的是,因为是根据brand进行分组(GROUP BY)的,所以SELECT后面跟着的是brand,而不能是title等其他的字段。当然brand和AVG(price)等的顺序可以自由调节

HAVING的使用
如果要对分组之后的数据再进行筛选,需要使用HAVING语句,而不是WHERE

# 3.1 按照品牌来分组计算对应的平均价格 数量 平均评分之后 筛选出其中平均价格大于2000的数据 
# 可能会在结果后面跟上WHERE筛选条件 这样是语法错误的 
# SELECT brand, AVG(price) avgPrice, COUNT(*), AVG(score) FROM products GROUP BY brand WHERE avgPrice > 2000;
# 应该是 
SELECT brand, AVG(price) avgPrice, COUNT(*), AVG(score) FROM products GROUP BY brand HAVING avgPrice > 2000;

WHERE和HAVING的区别:

WHERE是用来筛选数据表中的某些条件的,HAVING是对分组(GROUP BY)之后的数据进行筛选。也就是WHERE是跟在表的后面,作用于表,HAVING是跟在GROUP BY后面,作用于GROUP BY分组之后的。


Github

上一篇下一篇

猜你喜欢

热点阅读