mysql基本使用
# 登录
# 本地连接
mysql -uroot -proot
1
# 远程连接
mysql -h127.0.0.1 -uroot -proot
mysql --host=127.0.0.1 --user=root --password=root
1
2
2
# 退出
exit
# or
quit
1
2
3
2
3
# SQL
sql 语句不区分大小写,建议关键字使用大写。
# 注释
# 单行注释
--
和#
后面紧跟空格
SHOW DATABASE; -- 查询所有数据库名称
SHOW DATABASE; # 查询所有数据库名称
1
2
2
# 多行注释
/* 多行注释 */
1
# SQL 分类
- DDL(Data Definition Language) 数据定义语言。
- 用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter 等
- DML(Data Manipulation Language) 数据操作语言。
- 用来对数据库中表的数据进行增删改。关键字:insert,delete,update 等
- DQL(Data Query Language) 数据查询语言。
- 用来查询数据库中表的记录(数据)。关键字:select,where 等
- DCL(Data Control Language) 数据控制语言。
# DDL:操作数据库、表
# 操作数据库
- 创建(Create)
- 创建数据库:
create database db_name;
- 如果数据库不存在则创建:
create database if not exists db_name
- 指定字符集创建数据库:
create database db_name character set gbk;
- 创建数据库:
- 查询(Retrieve)
- 查询所有数据库的名称:
show databases;
- 查询某个数据库的创建语句(可以查看当前数据库的字符集):
show create database db_name;
- 查询所有数据库的名称:
- 修改(Update)
- 修改数据库的字符集:
alter database db_name character set utf8;
- 修改数据库的字符集:
- 删除(Delete)
- 删除数据库:
drop database db_name;
- 如果存在则删除数据库:
drop database if exists db_name;
- 删除数据库:
- 使用数据库
- 查询当前正在使用的数据库:
select database();
- 使用数据库:
use db_name;
- 查询当前正在使用的数据库:
# 操作表
创建(Create)
create table table_name2 like table_name1;
: 复制表,创建table_nam2
使其和table_name1
一样
create table table_name( column_name data_type, column_name data_type, ... column_name data_type ); create table student( id int, name varchar(20), age int, score double(4, 1), birthday date, create_time timestamp );
1
2
3
4
5
6
7
8
9
10
11
12
13
14注意:最后一列,不需要加逗号。
double(4,1)
表示最大 4 位数字,包含一个小数,也就是最大值为999.9
查询(Retrieve)
- 查询某个数据库中所有表的名称:
show tables;
- 查询指定表结构:
desc table_name;
- 查询某个数据库中所有表的名称:
修改(Update)
- 修改表名:
alter table table_name rename to new_table_name;
- 修改表的字符集:
alter table table_name character set gbk;
- 添加一列:
alter table table_name add column_name data_type;
: - 修改列的名称,类型:
alter table table_name change column_name new column_name new_data_type;
- 值修改列的数据类型:
alter table table_name modify column_name new_data_type;
- 删除列:
alter table drop column_name;
- 修改表名:
删除(Delete)
- 删除表:
drop table table_name;
- 如果存在删除表:
drop table if exists table_name;
- 删除表:
# DML:增删改数据表中数据
添加数据:
INSERT INTO table_name(列1, 列2,...) VALUES (列1值, 列2值);
1删除数据:
DELETE FROM table_name [WHERE condition]; TRUNCATE TABLE table_name; -- 截断表,也就是删除表然后创建个一模一样的空表
1
2- 如果不加条件将会删除所有数据
修改数据:
UPDATE table_name SET 列1 = 值1, 列2 = 值2 [WHERE condition];
1
# DQL:查询
-- 语法
SELECT
字段列表
FROM
表名
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组之后的条件限定
ORDER BY
排序
LIMIT
分页
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# WHERE
运算符 | 描述 |
---|---|
age = 16 | 等于于 |
age > 16 | 大于于 |
age < 16 | 小于于 |
age <> 16 | 不等于于 |
age >= 16 | 大于等于 |
age <= 16 | 小于等于 |
age > 5 and age < 7 | 大于 5 并且小于 7 |
age > 5 or age < 7> | 大于 5 或者小于 7 |
age BETWEEN 1 and 5 | 在 1 到 5 之间,有的数据库包含 1 和 5,有的不包含 |
age NOT BETWEEN 1 and 5 | 不在 1 到 5 之间 |
age IN (15, 12) | 在列表中 |
age NOT IN (15, 12) | 不在列表中 |
age IS NULL | 是否为 NULL,NULL 不能用=判断 |
age IS NOT NULL | 不为 NULL |
# LIKE 模糊查询
占位符:
_
: 任意单个字符%
: 任意多个字符
SELECT * FROM table_name WHERE name LIKE 'mr%'; -- 已mr开头的所有
SELECT * FROM table_name WHERE name LIKE '_c'; -- 第二个字符是c的所有
SELECT * FROM table_name WHERE name LIKE '___'; -- name是3个字符的
1
2
3
2
3
注意
NULL
参与的计算机国都为NULL
# 聚合函数
注意
聚合函数的计算,会排除 NULL 值。
# COUNT 计算个数
SELECT COUNT(*) FROM table_name; ---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录。
SELECT COUNT(1) FROM table_name;---忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录。
SELECT COUNT(column_name) FROM table_name;---只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。
SELECT COUNT(IFNULL(name, 0)) FROM table_name; --- 只包括指定列,不会忽略NULL
1
2
3
4
2
3
4
# MAX 计算最大值
# MIN 计算最小值
# SUM 计算和
# AVG 计算平均值
# 分组查询
语法:group by 分组字段
注意
分组之后查询的字段:分组字段、聚合函数
where
在分组之前进行限定,如果条件不满足则不参与分组;having
在分组之后进行限定,如果条件不满足,则不会被查询出来。where
后不可以进行聚合函数的判断,having
可以。
# 常用关键字及函数
# DISTINCT:去重
SELECT DISTINCT age, name FROM table_name; -- 去除age和name完全一样的
1
# IFNULL():空判断返回值
如果param1
为空返回param2
,否则返回param1
-- param1: 可以为表达式,字段等
IFNULL(param1, params2)
1
2
2
# 约束
# 主键约束: primary key
主键表示为非空且唯一
,一张表只能有一个主键,主键就是表中记录的唯一标识
-- 创建表的时候添加约束
CREATE TABLE stu(
id INT PRIMARY KEY, -- 给ID添加主键约束
name VARCHAR(20) NOT NULL -- name为非空
);
-- 删除主键
ALTER TABLE stu DROP PRIMARY KEY;
-- 创建表后添加约束
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 自动增长
如果某一列的值是数值类型的,使用auto_increment
可以来完成值的自动增长
-- 创建表的时候添加主键约束并自增长
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT, -- 给ID添加主键约束
name VARCHAR(20) NOT NULL -- name为非空
);
-- 删除自动增长
ALTER TABLE stu MODIFY id INT;
-- 添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 非空约束: not null
某一列的值不能为NULL
-- 创建表的时候添加约束
CREATE TABLE stu(
id INT,
name VARCHAR(20) NOT NULL -- name为非空
);
-- 删除name的非空约束
ALTER TABLE stu MODIFY name VARCHAR(20);
-- 创建表后添加约束
ALTER TABLE stu MODIFY name VARCHAR(20) NOT NULL;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 唯一约束: unique
某一列的值不能重复
-- 在创建表时创建唯一约束
CREATE TABLE stu(
id int,
mobile VARCHAR(20) UNIQUE
)
-- 删除唯一约束
ALTER TABLE stu DROP INDEX mobile;
-- 创建表后添加约束
ALTER TABLE stu MODIFY name VARCHAR(20) UNIQUE;
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
注意
- 唯一约束可以有 NULL 值,但只能有一条记录未 NULL;
- 唯一约束要以删除索引的方式删除约束;
# 外键约束: foreign key
让表与表产生关系,从而保证数据的正确性
-- 创建表时添加外间
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT,
category_id INT, -- 外键列
CONSTRAINT stu_category_id FOREIGN KEY (category_id) REFERENCES category(id)
-- stu_category_id: 外键名称
-- (category_id): 本表中哪列作为外键
-- category(id): 关联category表中的id列
)
-- 删除外键
ALTER TABLE stu DROP FOREIGN KEY stu_category_id;
-- 在创建表之后添加外键
ALTER TABLE stu ADD CONSTRAINT stu_category_id FOREIGN KEY (category_id) REFERENCES category(id);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
注意
- 外键值可以为
NULL
,但是不能为关联表不存在值
# 级联操作
ALTER TABLE stu ADD CONSTRAINT stu_category_id FOREIGN KEY (category_id) REFERENCES category(id) ON UPDATE CASCADE ON DELETE CASCADE;
1
# 级联更新
ALTER TABLE stu ADD CONSTRAINT stu_category_id FOREIGN KEY (category_id) REFERENCES category(id) ON UPDATE CASCADE;
1
# 级联删除
ALTER TABLE stu ADD CONSTRAINT stu_category_id FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE;
1
2
2
上次更新: 2023/09/22, 16:54:32