MySQL的详细使用教程

目录

1. 连接到MySQL服务器

在使用MySQL之前,需要先连接到MySQL服务器。可以使用命令行工具(如MySQL Shell或终端)或图形化工具(如phpMyAdmin)来连接。以下是使用命令行工具连接到MySQL服务器的示例:

python 复制代码
mysql -u root -p

其中,root 是你的MySQL用户名。执行上述命令后,系统会提示你输入密码,输入正确的密码后即可连接到MySQL服务器。

(密码输入为不可见,这是正常的)

选项 说明 示例
-u 指定用户名 -u root
-p 提示输入密码(密码可跟在后面但不安全) -p1234 或 -p
-h 指定主机名(默认 localhost) -h 192.168.1.100
-P 指定端口(默认 3306) -P 3307
--ssl 启用 SSL 安全连接 --ssl
--socket 指定套接字文件 --socket=/tmp/mysql.sock
--database 登录后直接使用指定数据库 --database=testdb

2. 创建和删除数据库

2-1创建数据库

在MySQL中,可以使用create database语句来创建数据库。以下是创建一个名为my_database的数据库的示例:

python 复制代码
create database my_database;

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

python 复制代码
show databases;

2-2删除数据库

使用drop database语句来删除数据库,语法如下:

python 复制代码
drop database my_database;
注意:删除数据库是一个危险操作,因为它将永久删除数据库及其包含的所有数据表和数据。在执行此操作之前,请确保你已经备份了重要的数据

3. 数据表操作

3.1 选择数据库

在创建数据表之前,需要先选择要在其中创建数据表的数据库。使用USE语句来选择数据库,语法如下:

python 复制代码
use my_database;

3.2 创建数据表

使用create table语句来创建数据表,语法如下:

php 复制代码
CREATE TABLE table_name (
    column1 datatype constraints,
    column2 datatype constraints,
   ...
);

其中,table_name是数据表的名称column1column2等是数据表的列名datatype是列的数据类型constraints是列的约束条件(如主键、非空等)。

例如,创建一个名为users的数据表,包含idnameemail三个列:

php 复制代码
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中常见的数据库表字段数据类型的表格列举:

数据类型 描述 示例
整数类型
tinyint 1字节,取值范围: -128~127 CREATE TABLE test (id TINYINT);
smallint 2字节,取值范围: -32768~32767 num SMALLINT;
mediumint 3字节,取值范围: -8388608~8388607 count MEDIUMINT;
int 4字节,取值范围: -2147483648~2147483647 age INT;
bigint 8字节,取值范围: -9223372036854775808到9223372036854775807 big_num BIGINT;
浮点数类型
float(m,d) 单精度浮点数,占用4个字节,m总个数,小数位。 price float(5,2);
double(m,d) 双精度浮点数,占用8个字节,比FLOAT有更高的精度和更大的表示范围。 weight double(10,2);
decimal(m,d) 精确数值类型,用于存储精确的小数。可以指定精度和小数位数。 amount DECIMAL(10,2);
字符串类型
char 固定长度的字符串,长度在创建时指定,不足指定长度时会用空格填充。 code CHAR(5);
varchar 可变长度的字符串,长度在创建时指定,存储时只占用实际字符串长度的空间。 name VARCHAR(255);
text 用于存储较长的文本数据,有TINYTEXTTEXTMEDIUMTEXTLONGTEXT等不同的长度限制。 description TEXT;
日期和时间类型
date 用于存储日期,格式为YYYY-MM-DD birth_date DATE;
time 用于存储时间,格式为HH:MM:SS start_time TIME;
datetime 用于存储日期和时间,格式为YYYY-MM-DD HH:MM:SS create_time DATETIME;
timestamp 也用于存储日期和时间,范围比DATETIME小,从1970-01-01 00:00:01到2038-01-19 03:14:07。并且在插入或更新记录时,TIMESTAMP列会自动更新为当前时间。 last_update TIMESTAMP;
二进制类型
binary 固定长度的二进制数据,类似于CHAR binary_data BINARY(10);
varbinary(M) 可变长度的二进制数据,类似于VARCHAR varbinary_data VARBINARY(255);
blob 用于存储大量的二进制数据,有TINYBLOBBLOBMEDIUMBLOBLONGBLOB等不同的长度限制。 CREATE TABLE test (image_data BLOB);

3.3 查询数据表

要查看数据库中的所有数据表,可以使用show tables语句:

php 复制代码
show tables;

这将列出当前选择的数据库中的所有数据表。

要查看数据表的结构,可以使用describe(可以缩写成desc)或show colunmns from语句,如查看名为users的数据表结构:

php 复制代码
 describe users;

3.4 修改数据表

语法:alter table 旧数据表名 rename 新数据表名字;

示例:

php 复制代码
alter table users rename new_users;

3.5 删除数据表

使用drop table 语句来删除数据表,如删除名为users的数据表:

php 复制代码
drop table users;

4. 数据内容操作

4.1数据操作

1. 插入数据

使用insert into语句来向数据表中插入数据,语法如下:

php 复制代码
insert into table_name (column1, column2,...) values (value1, value2,...);   

例如,向名为users的数据表中插入一条记录:

php 复制代码
 insert into users (name,email) values ('john','john@qq.com');
注意值的数量和数据表字段的数量保持一致,除非有默认值可以不用写

如果要插入多条记录,写法如下:

php 复制代码
INSERT INTO users (name, email) VALUES 
    ('Jane Smith', 'jane@example.com'),
    ('Bob Johnson', 'bob@example.com');    

2. 查询数据

使用select语句来查询数据表中的数据,语法如下:

php 复制代码
SELECT column1, column2,... FROM table_name WHERE condition;

其中,column1column2等是要查询的列名,如果要查询所有列,可以使用*代替;table_name是要查询的数据表名称;WHERE子句用于指定查询条件,可根据需要省略。

例如,查询名为users的数据表中的所有记录:

php 复制代码
SELECT * FROM users;

查询名为users的数据表中nameJane Smith的记录:

php 复制代码
SELECT * FROM users WHERE name = 'Jane Smith';   

指定字段组合不重复记录

语法:

php 复制代码
select distinct 字段名 from 数据表名;#distinct 表示去重

示例:

php 复制代码
select distinct username from users;

示例说明:

php 复制代码
表示查询users表中username不重复的记录

like模糊查询(%表示通配符)

示例:

php 复制代码
select * from users where username like '王%'; #表示查询姓名中姓王的数据

限制查询的结果集

类型 说明
基本语法 select 字段 from 表名 limit 数量;
示例 select * from users limit 3;
示例说明 查询users表中的前3条数据

分组查询

类型 说明
基本语法 select 字段 from 表名 group by 字段名;
示例 select username from users group by username;
示例说明 查询users表中的数据按用户名分组,查询总共有哪些用户;

分组统计

类型 说明
基本语法 select count(字段名) ,字段名 from 表名 group by 字段名;
示例 select count(*) as 数量,province from users group by province ;
示例说明 统计users表中各个省份的明星的数量;

结果集过滤

类型 说明
基本语法 select count(字段名) as result,字段名 from 表名 group by 字段名 having 条件;
示例 select count(*) as result,province from users group by province having result >=2;
示例说明 统计users表中明星的数量大于等于2的省份;

3. 更新数据

使用update语句来更新数据表中的数据,语法如下:

php 复制代码
update 数据表名 set 字段1 = 新的值, 字段2 = 新的值,... where 条件;

例如,将名为users的数据表中id1的记录的name字段更新为John Smith

php 复制代码
update users set name = 'John Smith' where id = 1;

4. 删除数据

使用delete from 语句来删除数据表中的数据,语法如下:

php 复制代码
delete from 数据表名 where 条件;   

例如,删除名为users的数据表中id1的记录:

php 复制代码
delete from users where id = 1;
注意,如果where后面没有跟条件,默认是删除所有数据

4.2表字段操作

1.增加表字段

语法:alter table 数据表名称 add 字段名 类型;

示例:

php 复制代码
alter table users add age int;

示例说明:

php 复制代码
向users 表中添加一个age字段,类型为int;

2.修改表字段

语法:alter table 数据表名称 modify 字段名 类型;

示例:

php 复制代码
alter table users modify username varchar(33);

示例说明:

php 复制代码
将users表中的username字段的类型修改为varchar(33);

3.删除表字段

语法:alter table 数据表名称 drop 字段名;

示例:

php 复制代码
alter table users drop password;

示例说明:

php 复制代码
将表users中的password字段删除;

4.表字段改名

语法:alter table 数据表名称 change 原字段名 新字段名 类型;

示例:

php 复制代码
alter table users change age nianling int(3);

示例说明:

php 复制代码
将表users中的age字段名称改为nianling 类型为int(3);

4.3结果集排序

  1. 单字段排序,基本语法:
python 复制代码
select 字段名 from 数据表名字 order by 字段 排序关键字;
关键词 说明
asc 升序排序(默认值)
desc 降序排序

示例:

php 复制代码
select * from users order by age asc; #查询出users的数据,按照age字段的升序排序
  1. 多字段排序:
类型 说明
基本语法 select 字段名 from 表名 order by 字段1 desc
示例 select * from users order by money desc ,age asc;
示例说明 查询users表中所有的数据,按照money字段降序,若money字段值一样,按照age字段升序
  1. 限制排序后的结果集:
类型 说明
基本语法 select 字段名 from 表名 order by 字段 排序规则 limit 数量;
示例 select * from users order by money desc limit 3;
示例说明 查询users表中所有的数据,按照money字段降序,最有钱的3个人;
  1. 结果集区间选择:
类型 说明
基本语法 select 字段名 from 表名 order by 字段 排序规则 limit 偏移量 数量;
示例 select * from users order by money desc limit 3 3;
示例说明 查询users表中按照money字段降序,从第4条数据开始往后取3条数据;

5.统计函数

5.1常见的统计函数

类型 说明 示例
sum 求和 select sum(money) as 别名 from users;统计users表中的money字段的总和
count 统计数量 select count(id) as 别名 from users;统计users表中的数据总条数
max 最大值 select max(money) as 最大值 from users;统计users表中的money字段的最大值
min 最小值 select min(money) as 最大值 from users;统计users表中的money字段的最小值
avg 平均值 select avg(money) as 最大值 from users;统计users表中的money字段的平均值

6.联合查询

多表联合查询

先创建几个表单和数据

python 复制代码
create table user(id int auto_increment,username char(100),	password char(100),	gid int,primary key(id));
python 复制代码
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);
python 复制代码
create table goods(	id int auto_increment,	name char(100),	price int(20),	primary key(id));
python 复制代码
insert into goods(name,price) values('奥迪',99999),('比亚迪',99999),('奔驰',99999),('大众',99999),('特斯拉',99999),('宝马',99999),('丰田',99999);

6.1内连接

  • 隐式内连接
类型 说明 示例
基本语法 select 表1.字段名【as 别名】,表n.字段名 from 表1【as 别名】,表n where 条件;
示例 select user.username,goods.name from user,goods where user.gid=goods.id;
示例说明 查询用户表中的哪些用户购买过商品以及商品名称;gid和goods中的id必须一一对应

注意:以上的方式属于隐式内连接,是因为sql语句中未出现inner join关键字。

  • 显式内连接
类型 说明 示例
基本语法 select 表1.字段名【as 别名】,表n.字段名 from 表1 inner jion 表n on 条件;
示例 select user.username,goods.name from user inner join goods on user.gid=goods.id;
示例说明 查询用户表中的哪些用户购买过商品以及商品名称;gid和goods中的id必须一一对应

注意:在显式内连接,通过inner join 关键字实现表之间的连接,inner可以省略。

6.2外连接

相关推荐
嶔某25 分钟前
MySql:基本查询
数据库·mysql
开心工作室_kaic2 小时前
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
开发语言·数据库·vue.js·php·apache
毕设资源大全2 小时前
基于SpringBoot+html+vue实现的林业产品推荐系统【源码+文档+数据库文件+包部署成功+答疑解惑问到会为止】
java·数据库·vue.js·spring boot·后端·mysql·html
weisian1513 小时前
Redis篇--常见问题篇3--缓存击穿(数据查询上锁,异步操作,熔断降级,三种缓存问题综合优化策略)
数据库·redis·缓存
圆蛤镇程序猿3 小时前
【什么是事务?】
数据库·oracle
施嘉伟3 小时前
你的Oracle生产数据库遭受过哪些迫害?
数据库·oracle
凡人的AI工具箱3 小时前
每天40分玩转Django:Django测试
数据库·人工智能·后端·python·django·sqlite
Tttian6224 小时前
Pycharm访问MongoDB数据库
数据库·mongodb·pycharm
HEU_firejef5 小时前
redis——布隆过滤器
数据库·redis·缓存
一只小爪子5 小时前
Redis 常用配置项说明
linux·运维·数据库·redis