MySQL基础语法


[TOC]

MySQL 基础语法

数据库概述

数据的存储方式

Java 中创建对象: Student s = new Student(1, “张三”) 存在内存中

学习了 Java IO 流:把数据保存到文件中

存储位置 优点 缺点
内存 速度快 不能永久保存,数据是临时状态
文件 数据可以永久保存 操作数据不方便,查询某个数据
数据库 1)数据可以永久保存 2) 查询速度快 3) 对数据的管理方便 占用资源,需要购买

什么是数据库

  1. 存储数据的仓库
  2. 本质上是一个文件系统,还是以文件的方式存在服务器的电脑上的。
  3. 所有的关系型数据库都可以使用通用的 SQL 语句进行管理 DBMS DataBase Management System

常见数据库排行榜

  • MySQL:开源免费的数据库,小型的数据库,已经被 Oracle 收购了。MySQL6.x 版本也开始收费。后来 Sun 公司收购了 MySQL,而 Sun 公司又被 Oracle 收购

  • Oracle:收费的大型数据库,Oracle 公司的产品。

  • DB2 :IBM 公司的数据库产品,收费的。常应用在银行系统中。

  • SQL Server:MicroSoft 公司收费的中型的数据库。C#、.net 等语言常使用。

  • SQLite: 嵌入式的小型数据库,应用在手机端,如:Android。

为什么选择 MySQL

  1. 免费
  2. 功能强大

docker 操作MySQL

docker 查看可用版本:

[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11777     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4486      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   880                  [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   92                   
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   89                   
centurylink/mysql                 Image containing mysql. Optimized to be link…   59                   [OK]
databack/mysql-backup             Back up mysql databases to... anywhere!         53                   
prom/mysqld-exporter                                                              44                   [OK]
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                   [OK]
tutum/mysql                       Base docker image to run a MySQL database se…   35                   
linuxserver/mysql                 A Mysql container, brought to you by LinuxSe…   34                   
schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic backup…   31                   [OK]
mysql/mysql-router                MySQL Router provides transparent routing be…   23                   
centos/mysql-56-centos7           MySQL 5.6 SQL database server                   21                   
arey/mysql-client                 Run a MySQL client from a docker container      19                   [OK]
fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron tas…   16                   [OK]
openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 image…   6                    
cytopia/mysql-5.5                 MySQL 5.5 on CentOS 7                           4                    [OK]
ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                3                    [OK]
devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offici…   3                    
idoall/mysql                      MySQL is a widely used, open-source relation…   3                    [OK]
centos/mysql-80-centos7           MySQL 8.0 SQL database server                   2                    
jelastic/mysql                    An image of the MySQL database server mainta…   2                    
widdpim/mysql-client              Dockerized MySQL Client (5.7) including Curl…   1                    [OK]
monasca/mysql-init                A minimal decoupled init container for mysql    0                    
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# 

拉取MySQL镜像

先查看有没有MySQL镜像

[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

默认拉取最新镜像

[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
ffbb094f4f9e: Pull complete 
df186527fc46: Pull complete 
fa362a6aa7bd: Pull complete 
5af7cb1a200e: Pull complete 
949da226cc6d: Pull complete 
bce007079ee9: Pull complete 
eab9f076e5a3: Pull complete 
8a57a7529e8d: Pull complete 
b1ccc6ed6fc7: Pull complete 
b4af75e64169: Pull complete 
3aed6a9cd681: Pull complete 
23390142f76f: Pull complete 
Digest: sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
[root@iZwz98qdx9tvkknmzwtbl9Z ~]#

查看本地镜像

docker images

在上图中可以看到我们已经安装了最新版本(latest)的 mysql 镜像。

运行容器

安装完成后,我们可以使用以下命令来运行 mysql 容器:

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxx -d mysql 

参数说明:

  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=xxx:设置 MySQL 服务 root 用户的密码。
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker images # 查看镜像
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    bbf6571db497   26 hours ago   516MB
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql  #启动
0c4092bd7e1b02ae14a423733e720aafdc7bdbba38b5cb3584ead1f583726f00
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker exec -it mysql bash #进入容器
root@0c4092bd7e1b:/# mysql -u root -p #登录mysql
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE USER 'nateshao'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #登录mysql
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'nateshao'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> exit
Bye
root@cb30c0de2342:/# ll
bash: ll: command not found
root@cb30c0de2342:/# exit            
exit
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# ll
total 0
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS                                                  NAMES
cb30c0de2342   mysql     "docker-entrypoint.s…"   11 hours ago   Up 11 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    bbf6571db497   26 hours ago   516MB
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker rmi bbf6571db497
Error response from daemon: conflict: unable to delete bbf6571db497 (cannot be forced) - image is being used by running container cb30c0de2342
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS                                                  NAMES
cb30c0de2342   mysql     "docker-entrypoint.s…"   11 hours ago   Up 11 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker rm -f cb30c0de2342
cb30c0de2342
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    bbf6571db497   26 hours ago   516MB
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# docker rmi bbf6571db497
Untagged: mysql:latest
Untagged: mysql@sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727
Deleted: sha256:bbf6571db4977fe13c3f4e6289c1409fc6f98c2899eabad39bfe07cad8f64f67
Deleted: sha256:a72da99dce60d6f8d4c4cffa4173153c990537fcdfaa27c35324c3348d55dd5c
Deleted: sha256:8b535d432ef2fbd45d93958347b2587c5cbe334f07d6909ad9d2d480ebbafb65
Deleted: sha256:14d13a3b33fc76839f156cd24b4636dab121e6d3d026cefa2985a4b89e9d4df8
Deleted: sha256:77c21a5a897a1ba752f3d742d6c94ee7c6b0e373fd0aeecc4bf88b9a3982007e
Deleted: sha256:189162becec8bb4588c54fb4ea7e62d20121812e68aeb0291fb4bb5df9ec0985
Deleted: sha256:34980dadfd6a5bb9d7f9e8d4e408000e0a8f4840cc7d3092dc94357ebe7a89b6
Deleted: sha256:15b2beb64a91785c8f3709ecd2410d13577b3174faad164524434ce6a7633506
Deleted: sha256:e38dd14d47b61171927ea4b928f7296123b65a81ad1cfde8f5d00cadf1e81bbb
Deleted: sha256:865abdfd8444741f581ce582e4ac5746c4a00c282febf65aa808a235ec7abf78
Deleted: sha256:b1e35233e1ac953bd06fc8fa83afb3a88c39c1aeae0c89a46cb1b652d6821b38
Deleted: sha256:3bcfdf6641227ff63e3ddf9e38e45cf317b178a50a664e45c6ae596107d5bc46
Deleted: sha256:f11bbd657c82c45cc25b0533ce72f193880b630352cc763ed0c045c808ff9ae1
[root@iZwz98qdx9tvkknmzwtbl9Z ~]# 

DDL 操作数据库

  • 创建数据库

    CREATE DATABASE 数据库名; 
  • 判断数据库是否已经存在,不存在则创建数据库

    CREATE DATABASE IF NOT EXISTS 数据库名; 
  • 创建数据库并指定字符集

    CREATE DATABASE 数据库名 CHARACTER SET 字符集;

具体操作:

-- 直接创建数据库 db1
create database db1;
-- 判断是否存在,如果不存在则创建数据库 db2
create database if not exists db2;
-- 创建数据库并指定字符集为 gbk
create database db3 default character set gbk;
--------------------------------------------------------------------
mysql> --  db1
mysql> create database db1;
Query OK, 1 row affected (0.01 sec)

mysql> --  db2
mysql> create database if not exists db2;
Query OK, 1 row affected (0.00 sec)

mysql> --  gbk
mysql> create database db3 default character set gbk;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| db2                |
| db3                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

mysql> 

查看数据库

按 tab 键可以自动补全关键字

-- 查看所有的数据库 
show databases;
-- 查看某个数据库的定义信息
show create database db3;
show create database db1;

修改数据库

修改数据库默认的字符集

ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

具体操作:

  • 将 db3 数据库的字符集改成 utf8

    alter database db3 character set utf8;

删除数据库的语法:DROP DATABASE 数据库名;

drop database db2;

使用数据库

-- 查看正在使用的数据库
select database();
-- 改变要使用的数据库
use db4;

DDL 操作表结构

前提先使用某个数据库

MySQL 数据类型

分类 类型名称 类型说明
tinyInt 微整型:很小的整数(占 8 位二进制)
整数 mediumint 中整型:中等长度的整数(占 24 位二进制)
int(integer) 整型:整数类型(占 32 位二进制)
小数 float 单精度浮点数,占 4 个字节
double 双精度浮点数,占 8 个字节
time 表示时间类型
日期 date 表示日期类型
datetime 同时可以表示日期和时间类型
字符串 char(m) 固定长度的字符串,无论使用几个字符都占满全部,M 为 0~255 之间的整数
varchar(m) 可变长度的字符串,使用几个字符就占用几个,M 为 0~65535 之间的整数
tinyblob Big Large Object 允许长度 0~255 字节
blob 允许长度 0~65535 字节
大二进制 mediumblob 允许长度 0~167772150 字节 大二进制
longblob 允许长度 0~4294967295 字节
大文本 tinytext 允许长度 0~255 字节
text 允许长度 0~65535 字节
mediumtext 允许长度 0~167772150 字节
longtext 允许长度 0~4294967295 字节

具体操作:创建 student 表包含 id,name,birthday 字段

create table student (
    id int, -- 整数
    name varchar(20), -- 字符串
    birthday date -- 生日,最后没有逗号
);


查看 day21 数据库中的所有表
use day21;
show tables;
查看 student 表的结构
desc student;

查看 student 的创建表 SQL 语句 ---show create table student;
mysql> show create table student;
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                           |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
  `id` int DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `birthday` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

条件查询的语法

创建一个学生表,包含如下列:

CREATE TABLE student3 (
 id int, -- 编号
 name varchar(20), -- 姓名
 age int, -- 年龄
 sex varchar(5), -- 性别
 address varchar(100), -- 地址
 math int, -- 数学
 english int -- 英语
);
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','
杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩
',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港
',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);

运算符

比较运算符 说明
>、<、<=、>=、=、<> <>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
BETWEEN…AND 在一个范围之内,如:between 100 and 200 . 相当于条件在 100 到 200 之间,包头又包尾
IN (集合) 集合表示多个值,使用逗号分隔
LIKE ‘张%’ 模糊查询
IS NULL 查询某一列为 NULL 的值,注:不能写=NULL

具体操作:

-- 查询 math 分数大于 80 分的学生
select * from student3 where math>80;
-- 查询 english 分数小于或等于 80 分的学生
select * from student3 where english <=80;
-- 查询 age 等于 20 岁的学生
select * from student3 where age = 20;
-- 查询 age 不等于 20 岁的学生,注:不等于有两种写法
select * from student3 where age <> 20;
select * from student3 where age != 20;
  • 逻辑运算符
逻辑运算符 说明
and 或 && 与,SQL 中建议使用前者,后者并不通用。
or 或 ||
not 或 !

具体操作:

-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
select * from student3 where age>35 and sex='男';
-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
select * from student3 where age>35 or sex='男';
-- 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id=1 or id=3 or id=5;
  • in 关键字
SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);
in 里面的每个数据都会作为一次条件,只要满足条件的就会显示

具体操作:

-- 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id in(1,3,5);
-- 查询 id 不是 1 或 3 或 5 的学生
select * from student3 where id not in(1,3,5);
  • 范围查询
BETWEEN1 AND2
表示从值 1 到值 2 范围,包头又包尾
比如:age BETWEEN 80 AND 100 相当于: age>=80 && age<=100

like 关键字

LIKE 表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

通配符 说明
%     匹配任意多个字符串
_     匹配一个字符
  • MySQL 通配符
通配符 说明
% 匹配任意多个字符串
_ 匹配一个字符
-- 查询姓马的学生
select * from student3 where name like '马%';
select * from student3 where name like '马';
-- 查询姓名中包含'德'字的学生
select * from student3 where name like '%德%';
-- 查询姓马,且姓名有两个字的学生
select * from student3 where name like '马_';

文章作者: 千羽
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 千羽 !
评论
  目录