MySQL&SQL Tutorial

58 阅读3分钟

MySQL&SQL Tutorial

此文档正在完善中,未经允许不得转载

1 SQL && 数据库基本概念

MySQL是一个数据库的开源项目,有瑞典公司开发,目前被Oracle收购

SQL是一种语言,专门用于处理数据库的语言

那么哪些数据库或者引擎用这种语言呢?不完全统计有 MySQL/ Hive/ Spark/ Flink/ ClickHouse

tips: mysql和hive的应用非常广泛,它们两个的区别是,hive库有时延,mysql库没有时延

数据库的一些基本概念

名称英文概念解释
数据库database相当于文件夹的概念,保存数据的容器
数据表table相当于一个excel表格,某一个结构化清单
column数据表的一列就是一个属性
row数据表的一行就是一个数据记录
主键primary key一列或一组列可以唯一标识表

MySQL用的查询语言是SQL,因此后面以MySQL为指导平台,学些SQL的用法

指路MySQL安装指南 juejin.cn/post/721404…

2 创建数据库数据表

创建数据库

数据库是存储数据的容器。一个数据库中可以包含多个表,数据库就相当于一个文件夹,里面存储的文件就相当于一个个数据表。要想创建表,必须首先创建数据库。

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

mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)

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

mysql> use mydb;
Database changed
mysql>

创建语句表示创建了这个数据库create database mydb;

切换语句表示切换到了这个数据库user mydb;

更详细的功能参考www.sjkjc.com/mysql/datab…

创建表

mysql> create table `user` (
    ->   `user_id` int not null auto_increment,
    ->   `name` varchar(45) not null,
    ->   `age` int null default 18,
    ->   `created_at` datetime not null,
    ->   primary key (`user_id`)
    ->   );
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql> show full tables;
+----------------+------------+
| Tables_in_mydb | Table_type |
+----------------+------------+
| user           | BASE TABLE |
+----------------+------------+
1 row in set (0.01 sec)

mysql> 

创建语句表示创建了这个数据库create table user

属性语句表示中间的列的属性,not null表示不接受空值,auto_increment表示该列自增,default 0表示默认值为0

主键语句表示哪一列为主键primary key (user_id)

``这两个符号中间通常是库名表名列名等,如果是中文必须有这两个符号,如果是英文有无均可

更详细的说明参考www.sjkjc.com/mysql/table…

查看该表的数据

mysql> describe user;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| user_id    | int         | NO   | PRI | NULL    | auto_increment |
| name       | varchar(45) | NO   |     | NULL    |                |
| age        | int         | YES  |     | 18      |                |
| created_at | datetime    | NO   |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> select * from user
    -> ;
Empty set (0.02 sec)

mysql>

查看属性语句看这个表有哪些属性以及这些属性是怎么描述的describe user

查看内容语句看这个表具体的内容select * from user

向该表中插入数据

创建表后就可以向该表中插入数据了

mysql> insert into user (name, age, created_at) values ('kokoro96', 26, now());
Query OK, 1 row affected (0.00 sec)

mysql> insert into user (name, age, created_at) values ('Sdafan', 29, now());
Query OK, 1 row affected (0.00 sec)

mysql> insert into user (name, age, created_at) values ('heiha', 23, now());
Query OK, 1 row affected (0.00 sec)

mysql> insert into user (name, age, created_at) values ('LordZzz', 24, now());
Query OK, 1 row affected (0.00 sec)

mysql>

现在就创建好了一个基本的表

其他的一些指令,(其实这些已经算作是SQL语言了)

命令释义
drop table_name删除表
truncate table_name清空表
ALTER TABLE table_name DROP COLUMN column_name, DROP COLUMN column_name;删除某一列
DELETE FROM table_name WHERE user_id=1删除某一行
show databases查看所有数据库
show tables查看所有数据表
describe table_name查看一列
desc table_name同上
show columns from table_name同上

3 SQL关键字

关键字释义距离
select选择表的一列select gender
where选择表的一行where age = 18
from从哪个表中选择from student_info
join两个或多个表的联结,扩充表的列
join * onjoin的联结条件
union all两个或多个表的拼接,扩充表的行
unionunion all的去重版本,慎用,因为很难分清楚到底是要去重还是单纯忘了写all
group by把相同数据分到同一组,返回唯一值group by gender

SQL语言的书写顺序和执行顺序是完全不同的,执行顺序为

FROM

WHERE

GROUP BY

HAVING

SELECT

DISTINCT

UNION

ORDER BY