MySQL的详细使用教程
目录
- 1. 连接到MySQL服务器
- 2. 创建和删除数据库
-
- 2-1创建数据库
- 2-2删除数据库
- 3. 数据表操作
-
- 3.1 选择数据库
- 3.2 创建数据表
- 3.3 查询数据表
- 3.4 修改数据表
- 3.5 删除数据表
- 4. 数据内容操作
-
- 4.1数据操作
-
- 1. 插入数据
- 2. 查询数据
-
- (1)like模糊查询(%表示通配符)
- (2)限制查询的结果集
- (3)分组查询
- (4)分组统计
- (5)结果集过滤
- (6)结果集排序
- 3. 更新数据
- 4. 删除数据
- 4.2表字段操作
-
- 1.增加表字段
- 2.修改表字段
- 3.删除表字段
- 4.表字段改名
- 5.统计函数
-
- 5.1常见的统计函数
- 6.联合查询
-
- 6.1内连接
- 6.2外连接
- 6.3子嵌套查询
- 7.窗口函数
-
- (1)序号函数:
- (2)分布函数:
- (3)前后函数:
- (4)头尾函数:firs_value() / last_value()
1. 连接到MySQL服务器
在使用MySQL之前,需要先连接到MySQL服务器。可以使用命令行工具(如MySQL Shell或终端)或图形化工具(如phpMyAdmin)来连接。以下是使用命令行工具连接到MySQL服务器的示例:
mysql -u root -p
其中,root 是你的MySQL用户名。执行上述命令后,系统会提示你输入密码,输入正确的密码后即可连接到MySQL服务器。
(密码输入为不可见,这是正常的)

2. 创建和删除数据库
2-1创建数据库
在MySQL中,可以使用create database语句来创建数据库。以下是创建一个名为my_database的数据库的示例:
create database my_database;

执行上述语句后,MySQL将创建一个名为my_database的数据库。如果要查看所有数据库,可以使用show database语句
show databases;

2-2删除数据库
使用drop database语句来删除数据库,语法如下:
drop database my_database;
注意:删除数据库是一个危险操作,因为它将永久删除数据库及其包含的所有数据表和数据。在执行此操作之前,请确保你已经备份了重要的数据
3. 数据表操作
3.1 选择数据库
在创建数据表之前,需要先选择要在其中创建数据表的数据库。使用USE语句来选择数据库,语法如下:
use my_database;
3.2 创建数据表
使用create table语句来创建数据表,语法如下:
CREATE TABLE table_name ( column1 datatype constraints, column2 datatype constraints, ...);
其中,table_name是数据表的名称,column1、column2等是数据表的列名,datatype是列的数据类型,constraints是列的约束条件(如主键、非空等)。
例如,创建一个名为users的数据表,包含id、name和email三个列:
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE)engine = innodb default charset = utf-8;
以下是MySQL中常见的数据库表字段数据类型的表格列举:
tinyintCREATE TABLE test (id TINYINT);smallintnum SMALLINT;mediumintcount MEDIUMINT;intage INT;bigintbig_num BIGINT;float(m,d)price float(5,2);double(m,d)FLOAT有更高的精度和更大的表示范围。weight double(10,2);decimal(m,d)amount DECIMAL(10,2);charcode CHAR(5);varcharname VARCHAR(255);textTINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT等不同的长度限制。description TEXT;dateYYYY-MM-DD。birth_date DATE;timeHH:MM:SS。start_time TIME;datetimeYYYY-MM-DD HH:MM:SS。create_time DATETIME;timestampDATETIME小,从1970-01-01 00:00:01到2038-01-19 03:14:07。并且在插入或更新记录时,TIMESTAMP列会自动更新为当前时间。last_update TIMESTAMP;binaryCHAR。binary_data BINARY(10);varbinary(M)VARCHAR。varbinary_data VARBINARY(255);blobTINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB等不同的长度限制。CREATE TABLE test (image_data BLOB);3.3 查询数据表
要查看数据库中的所有数据表,可以使用show tables语句:
show tables;

这将列出当前选择的数据库中的所有数据表。
要查看数据表的结构,可以使用describe(可以缩写成desc)或show colunmns from语句,如查看名为users的数据表结构:
describe users;

3.4 修改数据表
语法:alter table 旧数据表名 rename 新数据表名字;
示例:
alter table users rename new_users;
3.5 删除数据表
使用drop table 语句来删除数据表,如删除名为users的数据表:
drop table users;

4. 数据内容操作
4.1数据操作
1. 插入数据
使用insert into语句来向数据表中插入数据,语法如下:
insert into table_name (column1, column2,...) values (value1, value2,...);
例如,向名为users的数据表中插入一条记录:
insert into users (name,email) values (\'john\',\'john@qq.com\');
注意值的数量和数据表字段的数量保持一致,除非有默认值可以不用写
如果要插入多条记录,写法如下:
INSERT INTO users (name, email) VALUES (\'Jane Smith\', \'jane@example.com\'), (\'Bob Johnson\', \'bob@example.com\');
2. 查询数据
使用select语句来查询数据表中的数据,语法如下:
SELECT column1, column2,... FROM table_name WHERE condition;
其中,column1、column2等是要查询的列名,如果要查询所有列,可以使用*代替;table_name是要查询的数据表名称;WHERE子句用于指定查询条件,可根据需要省略。
例如,查询名为users的数据表中的所有记录:
SELECT * FROM users;
查询名为users的数据表中name为Jane Smith的记录:
SELECT * FROM users WHERE name = \'Jane Smith\';
指定字段组合不重复记录
(1)like模糊查询(%表示通配符)
示例:
select * from users where username like \'王%\'; #表示查询姓名中姓王的数据
(2)限制查询的结果集
(3)分组查询
(4)分组统计
(5)结果集过滤
(6)结果集排序
- 单字段排序,基本语法:
select 字段名 from 数据表名字 order by 字段 排序关键字;
示例:
select * from users order by age asc; #查询出users的数据,按照age字段的升序排序
- 多字段排序:
users表中所有的数据,按照money字段降序,若money字段值一样,按照age字段升序- 限制排序后的结果集:
users表中所有的数据,按照money字段降序,最有钱的3个人;- 结果集区间选择:
users表中按照money字段降序,从第4条数据开始往后取3条数据;3. 更新数据
使用update语句来更新数据表中的数据,语法如下:
update 数据表名 set 字段1 = 新的值, 字段2 = 新的值,... where 条件;
例如,将名为users的数据表中id为1的记录的name字段更新为John Smith:
update users set name = \'John Smith\' where id = 1;

4. 删除数据
使用delete from 语句来删除数据表中的数据,语法如下:
delete from 数据表名 where 条件;
例如,删除名为users的数据表中id为1的记录:
delete from users where id = 1;

注意,如果where后面没有跟条件,默认是删除所有数据

4.2表字段操作
1.增加表字段
2.修改表字段
3.删除表字段
4.表字段改名
5.统计函数
5.1常见的统计函数
6.联合查询
多表联合查询
先创建几个表单和数据
create table user(id int auto_increment,username char(100),password char(100),gid int,primary key(id));
insert into user(username,password,gid) values(\'张三\',123,2),(\'李四\',987,4),(\'王五\',5677,1),(\'赵六\',88776,3),(\'宋琦\',23435,0),(\'刘元\',34545,7),(\'郭德纲\',456,2),(\'王波\',123,0),(\'王强\',123,3),(\'宋桥\',123,3);
create table goods(id int auto_increment,name char(100),price int(20),primary key(id));
insert into goods(name,price) values(\'奥迪\',99999),(\'比亚迪\',99999),(\'奔驰\',99999),(\'大众\',99999),(\'特斯拉\',99999),(\'宝马\',99999),(\'丰田\',99999);
6.1内连接
- 隐式内连接
注意:以上的方式属于隐式内连接,是因为sql语句中未出现inner join关键字。

- 显式内连接
注意:在显式内连接,通过inner join 关键字实现表之间的连接,inner可以省略。
6.2外连接
- 外连接之左连接
注意:左外连接会把左表中所有的数据查询出来,会把右表中符合条件的数据查询出来。

- 外连接之右连接
注意:右外连接会把右表中所有的数据查询出来,会把左表中符合条件的数据查询出来。

6.3子嵌套查询

7.窗口函数
用法:窗口函数 over(partition by 分组字段 order by 排序字段)
(1)序号函数:
例如:
select *,rank() over(partition by class order by score desc) as ranking,dense_rank() over(partition by class order by score desc) as decse,row_number() over(partition by class order by score desc) as rownumberfrom student;

(2)分布函数:
需求:按照订单数统计在总订单数中的占比
select *,cume_dist() over(partition by user_num order by amount desc) as cume from order1;

(3)前后函数:
- lag() 向上偏移
- lead()向下偏移
应用场景:
- 取时间间隔为N天的记录
- 计算本次记录与上次记录的差值
- 取某一字段的前N行数据或后N行数据
三个参数:第一个参数是表达式或字段,第二个参数是偏移量,第三个参数是控制赋值。
如:查询上一个订单距离当前订单的时间间隔
select *,datediff(dt,last_date) as diff from(select user_num,dt,lag(dt,1,dt) over w as last_date from order1window w as (order by dt) #给窗口函数起个别名)t;#t表示给sql语句起别名

(4)头尾函数:firs_value() / last_value()
按照时间顺序记录每个用户的最早订单和最晚订单,并不是最小金额和最大金额的订单;
需求:截止当前订单,按照日期排序第一个订单和最后一个订单的订单金额;
select * from(select *,first_value(amount) over w as first_amount,last_value(amount) over w as last_amountfrom order1window w as (partition by user_num order by dt))t; #t表示给sql语句起个别名



