mysql基础命令

登录

输入命令后,输入密码

1
mysql -u root -p

数据库

查看库

显示全部数据库

1
SHOW DATABASES;

使用数据库

1
USE db;

查看当前正在使用的数据库

1
SELECT DATABASE();

创建库

创建数据库

1
CREATE DATABASE db;

使用IF NOT EXISTS,在创建数据库时,判断数据库是否不存在,若不存在则创建

1
CREATE DATABASE IF NOT EXISTS db;

使用DEFAULT CHARSET,在创建数据库时设置字符集

1
CREATE DATABASE db DEFAULT CHARSET utf8mb4;

删除库

删除数据库

1
DROP DATABASE db;

使用IF EXISTS,删除数据库时,判断数据库存在,存在则删除

1
DROP DATABASE IF EXISTS db;

数据表

查看表

显示数据表

1
SHOW TABLES;

查看数据表结构

1
DESCRIBE soft;

显示建表语句

1
SHOW CREATE TABLE soft;

创建表

创建数据表

1
2
3
4
5
CREATE TABLE soft(
softName VARCHAR(20),
softSize FLOAT,
updateTime DATETIME
);

使用COMMENT,创建数据表时添加描述信息

1
2
3
4
5
CREATE TABLE soft(
softName VARCHAR(20) COMMENT '软件名',
softSize FLOAT COMMENT '软件大小',
updateTime DATETIME COMMENT '更新时间'
) COMMENT '软件表';

字段约束

非空约束

使用NOT NULL,创建数据表时给某字段添加非空约束,标注该字段不能为空值,即在插入时必须为其添加一个值

1
2
3
4
CREATE TABLE soft(
softName VARCHAR(20) NOT NULL, # 非空约束
softSize FLOAT
);

如下语句,插入时报错,因为没有为非空约束指定值

1
INSERT INTO soft softSize VALUES 1.1;

唯一约束

使用UNIQUE,创建数据表时给某字段添加唯一约束,标注每条记录中该字段的值不能出现重复

1
2
3
4
CREATE TABLE soft(
softName VARCHAR(20) UNIQUE, # 唯一约束
softSize FLOAT
);

主键约束

使用PRIMARY KEY,创建数据表并给指定字段添加主键约束,主键约束能够唯一确定一张表中的一条记录,某个字段添加主键约束后,每条记录中该字段的值不重复且不为空

1
2
3
4
5
CREATE TABLE soft(
id INT PRIMARY KEY, # 主键约束
softName VARCHAR(20),
softSize FLOAT
);

联合主键,由多个字段组合的主键,使idsoftName联合起来的联合值不重复且idsoftName不为空

1
2
3
4
5
6
CREATE TABLE soft(
id INT,
softName VARCHAR(20),
softSize FLOAT,
PRIMARY KEY(id,softName)
);

通俗讲,idsoftName不能为空,而且这两个不能同时和其他词条的一样

1
2
3
4
5
6
7
# 先插入如下数据
INSERT INTO soft (id, softName) VALUES (1, 'N1');
# 若插入如下数据则会报错,因为id和name都一样
INSERT INTO soft (id, softName, softSize) VALUES (1, 'N1', 1.1);
# 插入下面两条数据不会报错
INSERT INTO soft (id, softName) VALUES (2, 'N1');
INSERT INTO soft (id, softName) VALUES (1, 'N2');

默认约束

使用DEFAULT,创建数据表时给字段添加默认约束,当插入词条时未指定该字段的值,将会自动使用默认值

1
2
3
4
CREATE TABLE soft(
softName VARCHAR(20) DEFAULT '未命名',
softSize FLOAT
);

自增约束

使用AUTO_INCREMENT,创建数据表时给字段添加自增约束,该约束只能标注在带有的字段上,即必须配合PRIMARY KEYUNIQUE使用

1
2
3
4
CREATE TABLE soft(
id INT PRIMARY KEY AUTO_INCREMENT, # 自增约束
softName VARCHAR(20)
);

修改表

soft表修改为software

1
ALTER TABLE soft RENAME TO software;

soft表中添加INT类型的id字段

1
2
3
ALTER TABLE soft ADD id INT;
# 添加字段并设置唯一约束和自增
ALTER TABLE soft ADD id INT UNIQUE AUTO_INCREMENT;

soft表中删除INT类型的id字段

1
ALTER TABLE soft DROP COLUMN id;

修改soft表中id字段的数据类型为INT UNSIGNED

1
ALTER TABLE soft MODIFY id INT UNSIGNED;

修改soft表中id字段的名为sid

1
ALTER TABLE soft CHANGE id sid BIGINT UNSIGNED;

删除表

删除数据表

1
DROP TABLE soft;

删除数据表,如果数据表存在

1
DROP TABLE IF EXISTS soft;

字段

向数据表中插入数据记录

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE soft(
softName VARCHAR(20),
softSize FLOAT
);

# 插入数据
INSERT INTO soft VALUES (
'name1',
3.4
);

# 批量插入数据
INSERT INTO soft VALUES ('name1', 3.4),('name2', 4.2);

向数据表中插入数据记录,给指定字段赋值

1
2
3
4
5
INSERT INTO soft (softName) VALUES ('name3');
INSERT INTO soft (softName, softSize) VALUES ('name3', 22);

# 批量插入
INSERT INTO soft (softName) VALUES ('name4'), ('name5');

删除数据(删除soft表中所有softNametest.apk的词条)

1
DELETE FROM soft WHERE softName = 'test.apk';

修改数据(将soft表中所有softNametest2.apk的词条的softName修改为test.apk)

1
UPDATE soft SET softName = 'test.apk' WHERE softName = 'test2.apk';

数据查询语句的基本格式

1
2
3
4
5
6
7
8
9
select    目标字段
from 目标表名
where 查询条件

group by 分组字段列表
having 分组后的条件列表

order by 排序条件
limit 分页条件

基本查询

查询soft表中的词条,显示所有字段

1
SELECT * FROM soft;

查询soft表中的词条,显示指定字段

1
2
# 显示softName和softSize字段
SELECT softName, softSize FROM soft;

查询soft表中的词条,显示指定字段,并给字段取别名

1
2
# 显示softName和softSize字段,并取别名'软件名''软件大小'
SELECT softName as '软件名', softSize as '软件大小' FROM soft;

使用DISTINCT,查询soft表中指定字段的词条并去重,字段完全相同的词条只显示一条

1
2
# 显示softName和softSize字段,并去重
SELECT DISTINCT softName, softSize FROM soft;

条件查询

查询soft表中所有softNametest.apk的词条

1
2
3
4
5
6
7
SELECT * FROM soft WHERE softName = 'test.apk';

# AND表示与运算,也可写作 &&
SELECT * FROM soft WHERE softSize < 20 AND sid < 5;

# OR表示或运算,也可写作 ||
SELECT * FROM soft WHERE softSize < 20 OR sid < 5;

查询soft表中所有softSize1.010.0之间的词条

1
SELECT * FROM soft WHERE softSize BETWEEN 1.0 AND 10.0;

查询soft表中所有sid123的词条

1
SELECT * FROM soft WHERE sid IN ('1', '2', '3');

查询soft表中所有softName为空的词条

1
2
3
4
SELECT * FROM soft WHERE softSize IS NULL;

# 查询soft表中所有softName不为空的词条
SELECT * FROM soft WHERE softSize IS NOT NULL;

模糊查询,查询soft表中所有softNamename开头的词条

1
SELECT * FROM soft WHERE softName LIKE 'name%';

模糊查询,查询soft表中所有softName.apk结尾的词条

1
SELECT * FROM soft WHERE softName LIKE '%.apk';

模糊查询,查询soft表中所有softName包含test的词条

1
SELECT * FROM soft WHERE softName LIKE '%test%';

排序查询

查询soft表中所有词条,按softSize升序排序

1
2
# ASC表示升序,默认就是升序,可以省略
SELECT * FROM soft ORDER BY softSize ASC;

查询soft表中所有词条,按softSize降序排序

1
SELECT * FROM soft ORDER BY softSize DESC;

查询soft表中所有词条,按softSize降序排序,再按sid升序排序

1
SELECT * FROM soft ORDER BY softSize DESC, sid;

聚合函数

查询soft表中所有词条的softSize总和

1
SELECT SUM(softSize) FROM soft;

查询soft表中所有词条的softSize平均值

1
SELECT AVG(softSize) FROM soft;

查询soft表中所有词条的softSize最大值

1
SELECT MAX(softSize) FROM soft;

查询soft表中所有词条的softSize最小值

1
SELECT MIN(softSize) FROM soft;

查询soft表所有词条中,softSize不为NULL的词条的数量

1
SELECT COUNT(softSize) FROM soft;

通过如下两种方法,可以查询所有词条的数量

1
2
3
# 任意一个常数均可
SELECT COUNT(1) FROM soft;
SELECT COUNT(*) FROM soft;

分组查询

group by根据一个或多个字段对结果集进行分组,所有词条中,指定字段完全相等的分为一组,对每个组可以进行聚合函数操作

查询soft表中的词条,按softName分组

1
SELECT * FROM soft GROUP BY softName;

但其实一旦对某个字段进行分组,就只能查询该字段,其他字段已经没有意义了

1
SELECT softName FROM soft GROUP BY softName;

查询soft表中的词条,按softNamesoftSize分组

1
SELECT softName, softSize FROM soft GROUP BY softName, softSize;

查询soft表中softSize不为NULL的词条,再按softNamesoftSize不为NULL的词条分组

1
SELECT softName FROM soft WHERE softSize IS NOT NULL GROUP BY softName;

查询soft表中的词条,按softName分组,且分组中softName不为NULL的词条数量大于2

1
SELECT softName FROM soft GROUP BY softName HAVING COUNT(softName) >= 2;

查询soft表中的词条,按softName分组,且分组中softName不为NULL的词条数量大于2,显示分组中softName不为NULL的词条的数量

1
SELECT softName,COUNT(softName) as 词条数量 FROM soft GROUP BY softName HAVING COUNT(softName) >= 2;

分页查询

查询soft表中所有词条,从第1行开始,每页显示5

1
SELECT * FROM soft LIMIT 0,5;

查询soft表中所有词条,偏移为0,每页显示5行,即从第1行开始,显示5

1
SELECT * FROM soft LIMIT 5 OFFSET 0;