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 * on | join的联结条件 | |
union all | 两个或多个表的拼接,扩充表的行 | |
union | union all的去重版本,慎用,因为很难分清楚到底是要去重还是单纯忘了写all | |
group by | 把相同数据分到同一组,返回唯一值 | group by gender |
SQL语言的书写顺序和执行顺序是完全不同的,执行顺序为
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY