MySQL数据库

MySQL基本语法

操作系统:Debian11

数据库工具:MariaDB
Ver 9.1 Distrib 10.5.18-MariaDB, for debian-linux-gnu on x86_64

参考教程:菜鸟教程+数据管理课程教学内容


每条指令均以 , 作为结束标志

连接

xxx@debian:~/桌面$ sudo mysql -u root -p
[sudo] xxx 的密码:
Enter password:

成功登陆出现以下提示:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.5.18-MariaDB-0+deb11u1 Debian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

若是出现以下报错

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)

考虑是不是数据库未开启,查看状态

$ sudo systemctl status mariadb

若是发现

Status: "MariaDB server is down"

表明数据库服务端已关闭,使用以下指令开启

sudo systemctl start mariadb

数据库创建

CREATE DATABASE xxx;

实例:创建employees数据库

MariaDB [(none)]> CREATE DATABASE employees;
Query OK, 1 row affected (0.000 sec)

看看现在数据库有无变化

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| employees          |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

成功创建employees数据库

反复添加会如何

MariaDB [(none)]> CREATE DATABASE employees;
ERROR 1007 (HY000): Can't create database 'employees'; database exists

ERROR,该数据库已存在

数据库删除

DROP DATABASE xxx;

实例:删除employees数据库

MariaDB [(none)]> DROP DATABASE employees;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)

数据库选择

use xxx;

实例:选择employees数据库

MariaDB [(none)]> CREATE DATABASE employees;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> use employees;
Database changed

MariaDB [employees]> 
//不得不讲这就比MySQL优雅挺多的,直接显示出所操作的数据库

数据表创建

创建的数据表有三要素:表名,表字段名,定义每个表的字段

通用语法:

CREATE TABLE table_name (column_name column_type);

实例:在RUNOOB数据库中创建runoob_tbl数据表

MariaDB [(none)]> CREATE DATABASE RUNOOB;
Query OK, 1 row affected (0.022 sec)

MariaDB [(none)]> use RUNOOB;
Database changed

MariaDB [RUNOOB]> CREATE TABLE IF NOT EXISTS `runoob_tbl`(
    ->    `runoob_id` INT UNSIGNED AUTO_INCREMENT,
    ->    `runoob_title` VARCHAR(100) NOT NULL,
    ->    `runoob_author` VARCHAR(40) NOT NULL,
    ->    `submission_date` DATE,
    ->    PRIMARY KEY ( `runoob_id` )
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.019 sec)

MariaDB [RUNOOB]> show tables;
+------------------+
| Tables_in_RUNOOB |
+------------------+
| runoob_tbl       |
+------------------+
1 row in set (0.001 sec)

数据表删除

通用语法:

DROP TABLE table_name ;

实例:在RUNOOB数据库中删除runoob_tbl数据表

MariaDB [RUNOOB]> drop table runoob_tbl;
Query OK, 0 rows affected (0.011 sec)

MariaDB [RUNOOB]> show tables;
Empty set (0.001 sec)

插入数据

通用语法:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

实例:

MariaDB [RUNOOB]> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("JAVA", "RUNOOB", '2023-03-26');

读取数据表

通用语法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

特别的:可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

实例:

MariaDB [RUNOOB]> select * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | 学习 PHP     | 菜鸟教程      | 2023-03-25      |
|         2 | JAVA         | RUNOOB        | 2023-03-26      |
+-----------+--------------+---------------+-----------------+
MariaDB [RUNOOB]> select runoob_id, runoob_title from runoob_tbl;
+-----------+--------------+
| runoob_id | runoob_title |
+-----------+--------------+
|         1 | 学习 PHP     |
|         2 | JAVA         |
+-----------+--------------+

WHERE子句

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

通用语法:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....

实例:

MariaDB [RUNOOB]> SELECT submission_date from runoob_tbl WHERE runoob_id <= 1;
+-----------------+
| submission_date |
+-----------------+
| 2023-03-25      |
+-----------------+
MariaDB [RUNOOB]> SELECT * from runoob_tbl WHERE runoob_id <= 1;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | 学习 PHP     | 菜鸟教程      | 2023-03-25      |
+-----------+--------------+---------------+-----------------+

区分大小写

插入一行小写的数据与原先数据进行对比

MariaDB [RUNOOB]> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("java", "runoob", '2023-04-19');

查看一下

MariaDB [RUNOOB]> SELECT * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | 学习 PHP     | 菜鸟教程      | 2023-03-25      |
|         2 | JAVA         | RUNOOB        | 2023-03-26      |
|         3 | java         | runoob        | 2023-04-19      |
+-----------+--------------+---------------+-----------------+

使用where语句选出其中title为java的

MariaDB [RUNOOB]> SELECT * from runoob_tbl WHERE runoob_title="java";
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         2 | JAVA         | RUNOOB        | 2023-03-26      |
|         3 | java         | runoob        | 2023-04-19      |
+-----------+--------------+---------------+-----------------+

发现大小写均被选出

MySQL 的 WHERE 子句的字符串比较是不区分大小写的,可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。

MariaDB [RUNOOB]> SELECT * from runoob_tbl WHERE BINARY runoob_title="java";
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         3 | java         | runoob        | 2023-04-19      |
+-----------+--------------+---------------+-----------------+

UPDATE更新

如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。

通用语法:

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

实例:

MariaDB [RUNOOB]> UPDATE runoob_tbl SET runoob_title='python' WHERE runoob_id=3;

update后结果

MariaDB [RUNOOB]> SELECT * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | 学习 PHP     | 菜鸟教程      | 2023-03-25      |
|         2 | JAVA         | RUNOOB        | 2023-03-26      |
|         3 | python       | runoob        | 2023-04-19      |
+-----------+--------------+---------------+-----------------+

实例2:

MariaDB [RUNOOB]> UPDATE runoob_tbl SET runoob_title='python' WHERE runoob_id>=1;

update后

MariaDB [RUNOOB]> SELECT * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | python       | 菜鸟教程      | 2023-03-25      |
|         2 | python       | RUNOOB        | 2023-03-26      |
|         3 | python       | runoob        | 2023-04-19      |
+-----------+--------------+---------------+-----------------+

DELETE语句

你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。

通用语法:

DELETE FROM table_name [WHERE Clause]

如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除

实例:

删除runoob_tbl第三条记录

MariaDB [RUNOOB]> DELETE FROM runoob_tbl WHERE runoob_id=3;

查看删除后结果

MariaDB [RUNOOB]> SELECT * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | python       | 菜鸟教程      | 2023-03-25      |
|         2 | python       | RUNOOB        | 2023-03-26      |
+-----------+--------------+---------------+-----------------+

LIKE子句

类似于正则表达式对数据进行筛选

SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。

如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

通用语法:

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

实例:

筛选出上传时间为三月的数据

MariaDB [RUNOOB]> SELECT * from runoob_tbl WHERE submission_date LIKE '%03%';
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | python       | 菜鸟教程      | 2023-03-25      |
|         2 | python       | RUNOOB        | 2023-03-26      |
+-----------+--------------+---------------+-----------------+

注意要筛选部分的组成结构,如:

MariaDB [RUNOOB]> SELECT * from runoob_tbl WHERE submission_date LIKE '%03';
Empty set (0.001 sec)

UNION

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

ALL: 可选,返回所有结果集,包含重复数据。

实例:

先创建两张tables

MariaDB [RUNOOB]> CREATE TABLE IF NOT EXISTS `Websites`(
    -> `id` INT,
    -> `name` VARCHAR(20),
    -> `url` VARCHAR(20),
    -> `alexa` INT,
    -> `country` VARCHAR(10),
    -> PRIMARY KEY (`id`)
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.011 sec)

MariaDB [RUNOOB]> CREATE TABLE `apps`(
    -> `id` INT,
    -> `app_name` VARCHAR(20),
    -> `url` VARCHAR(20),
    -> `country` VARCHAR(10),
    -> PRIMARY KEY (`id`)
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.010 sec)

MariaDB [RUNOOB]> SHOW TABLES;
+------------------+
| Tables_in_RUNOOB |
+------------------+
| Websites         |
| apps             |
| runoob_tbl       |
+------------------+
3 rows in set (0.001 sec)

为表格填充数据

MariaDB [RUNOOB]> INSERT INTO Websites
    -> (id, name, url, alexa, country)
    -> VALUES
    -> (1, 'Google', 'www.google.com', 1, 'USA');
Query OK, 1 row affected (0.003 sec)

MariaDB [RUNOOB]> INSERT INTO Websites
    -> (id, name, url, alexa, country)
    -> VALUES
    -> (2, '淘宝', 'www.taobao.com', 13, 'CN');
Query OK, 1 row affected (0.003 sec)

MariaDB [RUNOOB]> INSERT INTO Websites
    -> (id, name, url, alexa, country)
    -> VALUES
    -> (3, '菜鸟教程', 'www.runoob.com', 4689, 'CN');
Query OK, 1 row affected (0.004 sec)

MariaDB [RUNOOB]> INSERT INTO Websites
    -> (id, name, url, alexa, country)
    -> VALUES
    -> (4, '微博', 'weibo.com', 20, 'CN');
Query OK, 1 row affected (0.004 sec)

MariaDB [RUNOOB]> INSERT INTO Websites
    -> (id, name, url, alexa, country)
    -> VALUES
    -> (5, 'Facebook', 'www.facebook.com', 3, 'USA');
Query OK, 1 row affected (0.003 sec)

MariaDB [RUNOOB]> INSERT INTO Websites
    -> (id, name, url, alexa, country)
    -> VALUES
    -> (7, 'stackoverflow', 'stackoverflow.com', 0, 'IND');
Query OK, 1 row affected (0.003 sec)

MariaDB [RUNOOB]> SELECT * FROM Websites;
+----+---------------+-------------------+-------+---------+
| id | name          | url               | alexa | country |
+----+---------------+-------------------+-------+---------+
|  1 | Google        | www.google.com    |     1 | USA     |
|  2 | 淘宝          | www.taobao.com    |    13 | CN      |
|  3 | 菜鸟教程      | www.runoob.com    |  4689 | CN      |
|  4 | 微博          | weibo.com         |    20 | CN      |
|  5 | Facebook      | www.facebook.com  |     3 | USA     |
|  7 | stackoverflow | stackoverflow.com |     0 | IND     |
+----+---------------+-------------------+-------+---------+
6 rows in set (0.001 sec)

MariaDB [RUNOOB]> INSERT INTO apps
    -> (id, app_name, url, country)
    -> VALUES
    -> (1, 'QQ APP', 'im.qq.com', 'CN');
Query OK, 1 row affected (0.003 sec)

MariaDB [RUNOOB]> INSERT INTO apps
    -> (id, app_name, url, country)
    -> VALUES
    -> (2, '微博 APP', 'weibo.com', 'CN');
Query OK, 1 row affected (0.003 sec)

MariaDB [RUNOOB]> INSERT INTO apps
    -> (id, app_name, url, country)
    -> VALUES
    -> (3, '淘宝 APP', 'www.taobao.com', 'CN');
Query OK, 1 row affected (0.003 sec)

MariaDB [RUNOOB]> SELECT * FROM apps;
+----+------------+----------------+---------+
| id | app_name   | url            | country |
+----+------------+----------------+---------+
|  1 | QQ APP     | im.qq.com      | CN      |
|  2 | 微博 APP   | weibo.com      | CN      |
|  3 | 淘宝 APP   | www.taobao.com | CN      |
+----+------------+----------------+---------+
3 rows in set (0.001 sec)

问:INSERT语句一次只能插入一条吗?我记得应该有插入大量数据的方法吧

哦,是我犯蠢了,每条语句后添加逗号即可,尝试一下

MariaDB [RUNOOB]> DELETE FROM apps;
Query OK, 3 rows affected (0.004 sec)

MariaDB [RUNOOB]> SELECT * FROM apps;
Empty set (0.001 sec)

MariaDB [RUNOOB]> INSERT INTO apps
    -> (id, app_name, url, country)
    -> VALUES
    -> (1, 'QQ APP', 'im.qq.com', 'CN'),
    -> (2, '微博 APP', 'weibo.com', 'CN'),
    -> (3, '淘宝 APP', 'www.taobao.com', 'CN');
Query OK, 3 rows affected (0.003 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [RUNOOB]> SELECT * FROM apps;
+----+------------+----------------+---------+
| id | app_name   | url            | country |
+----+------------+----------------+---------+
|  1 | QQ APP     | im.qq.com      | CN      |
|  2 | 微博 APP   | weibo.com      | CN      |
|  3 | 淘宝 APP   | www.taobao.com | CN      |
+----+------------+----------------+---------+
3 rows in set (0.001 sec)

试一试union吧

从 “Websites” 和 “apps” 表中选取所有不同的country(只有不同的值):

MariaDB [RUNOOB]> SELECT country FROM Websites
    -> UNION
    -> SELECT country FROM apps
    -> ORDER BY country;
+---------+
| country |
+---------+
| CN      |
| IND     |
| USA     |
+---------+
3 rows in set (0.001 sec)

使用 UNION ALL 从 “Websites” 和 “apps” 表中选取所有的country(有重复的值):

MariaDB [RUNOOB]> SELECT country FROM Websites
    -> UNION ALL
    -> SELECT country FROM apps
    -> ORDER BY country;
+---------+
| country |
+---------+
| CN      |
| CN      |
| CN      |
| CN      |
| CN      |
| CN      |
| IND     |
| USA     |
| USA     |
+---------+
9 rows in set (0.001 sec)

ORDER BY干嘛用的?去掉好像也没影响?

貌似是排序语句,接下来再说吧。

markdown太长了也比较卡了,分上中下记录吧,此处暂时作为上篇的完结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值