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外连接

相关推荐
夜泉_ly9 分钟前
MySQL -安装与初识
数据库·mysql
qq_529835351 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New4 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6754 小时前
数据库基础1
数据库
我爱松子鱼4 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo4 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser5 小时前
【SQL】多表查询案例
数据库·sql
Galeoto5 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)6 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231116 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql