Linux下的MySQL从DDL到DQL的基础操作
一、DDL(数据定义语言)操作
1. DDL 概述
DDL(Data Definition Language)用于定义数据库结构,主要包括:
- 数据库的创建、查看、删除、修改
- 表结构的设计与修改
2. 数据库常用操作
功能 | SQL 语句 |
---|---|
查看所有数据库 | SHOW DATABASES; |
创建数据库 | CREATE DATABASE [IF NOT EXISTS] mydb1 [CHARSET=utf8]; |
切换数据库 | USE mydb1; |
删除数据库 | DROP DATABASE [IF EXISTS] mydb1; |
修改数据库编码 | ALTER DATABASE mydb1 CHARACTER SET utf8; |
3. 表结构操作 - 创建表
表创建语法
sql
CREATE TABLE [IF NOT EXISTS] 表名(字段名1 类型[(宽度)] [约束条件] [COMMENT '字段说明'],字段名2 类型[(宽度)] [约束条件] [COMMENT '字段说明'],...
)[表的一些设置];
示例
sql
USE mydb1;
CREATE TABLE IF NOT EXISTS student(sid INT,NAME VARCHAR(20),gender VARCHAR(20),age INT,birth DATE,address VARCHAR(20),score DOUBLE
);
数据类型详解
数值类型
类型 | 大小 | 有符号范围 | 无符号范围 | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128, 127) | (0, 255) | 小整数值 |
INT | 4 字节 | (-21 亿,21 亿) | (0, 42 亿) | 大整数值 |
FLOAT | 4 字节 | 单精度浮点数 | 浮点数 | |
DECIMAL | - | 依赖 M 和 D | 小数值 |
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TEXT | 0-65535 字节 | 长文本 |
LONGBLOB | 0-4GB | 极大二进制数据 |
日期类型
类型 | 大小 | 范围 | 格式 |
---|---|---|---|
DATE | 3 字节 | 1000-01-01~9999-12-31 | YYYY-MM-DD |
DATETIME | 8 字节 | 完整日期时间 | YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 4 字节 | 1970-2038 | YYYYMMDD HHMMSS |
4. 表结构操作 - 其他操作
功能 | SQL 语句 |
---|---|
查看当前表 | SHOW TABLES; |
查看表创建语句 | SHOW CREATE TABLE 表名; |
查看表结构 | DESC 表名; |
删除表 | DROP TABLE 表名; |
5. 修改表结构
添加列
sql
ALTER TABLE student ADD `dept` VARCHAR(20);
修改列名和类型
sql
ALTER TABLE student CHANGE `dept` department VARCHAR(30);
删除列
sql
ALTER TABLE student DROP department;
修改表名
sql
RENAME TABLE `student` TO stu;
二、DML(数据操作语言)操作
1. DML 概述
DML(Data Manipulation Language)用于操作表中数据记录,主要包括:
- 插入(INSERT)
- 更新(UPDATE)
- 删除(DELETE/TRUNCATE)
2. 数据插入
语法格式
sql
-- 指定列插入
INSERT INTO 表 (列1,列2,...) VALUES (值1,值2,...);
-- 全列插入
INSERT INTO 表 VALUES (值1,值2,...);
示例
sql
INSERT INTO student(sid,NAME,gender,age,birth,address,score)
VALUES(1001,'张三','男',18,'1996-12-23','北京',83.5);
INSERT INTO student VALUES(1001,'张三','男',18,'1996-12-23','北京',83.5);
3. 数据修改
语法格式
sql
-- 无条件更新
UPDATE 表名 SET 字段1=值1,字段2=值2...;
-- 条件更新
UPDATE 表名 SET 字段1=值1,字段2=值2... WHERE 条件;
示例
sql
-- 将所有学生地址改为重庆
UPDATE student SET address = '重庆';
-- 将ID=1004的学生地址改为北京
UPDATE student SET address = '北京' WHERE id = 1004;
4. 数据删除
语法格式
sql
-- 条件删除
DELETE FROM 表名 [WHERE 条件];
-- 清空表(DDL操作)
TRUNCATE TABLE 表名;
示例
sql
-- 删除ID=1004的学生
DELETE FROM student WHERE sid = 1004;
-- 清空表
TRUNCATE TABLE student;
注意事项
DELETE
是 DML 操作,可回滚,保留表结构TRUNCATE
是 DDL 操作,不可回滚,相当于重建表
三、MySQL 约束详解
1. 约束概述
- 约束用于保证数据完整性和有效性
- 常见约束类型:主键、自增长、非空、唯一、默认、零填充、外键
2. 主键约束(PRIMARY KEY)
- 唯一标识表中每行数据,相当于
UNIQUE + NOT NULL
- 每个表只能有一个主键
- 自动创建唯一索引
操作示例
sql
-- 单列主键(定义时声明)
CREATE TABLE emp1(eid INT PRIMARY KEY,NAME VARCHAR(20)
);-- 单列主键(定义后声明)
CREATE TABLE emp2(eid INT,NAME VARCHAR(20),CONSTRAINT pk1 PRIMARY KEY(eid)
);-- 联合主键
CREATE TABLE emp3(NAME VARCHAR(20),deptId INT,PRIMARY KEY(NAME, deptId)
);-- 修改表添加主键
ALTER TABLE emp4 ADD PRIMARY KEY(eid);-- 删除主键
ALTER TABLE emp1 DROP PRIMARY KEY;
3. 自增长约束(AUTO_INCREMENT)
- 主键自动赋值,默认从 1 开始递增
- 一个表只能有一个自增长字段,且必须是主键或唯一索引
操作示例
sql
-- 创建时指定自增长
CREATE TABLE t_user1(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20)
);-- 指定初始值
CREATE TABLE t_user2(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20)
) AUTO_INCREMENT=100;-- 修改初始值
ALTER TABLE t_user2 AUTO_INCREMENT=100;
4. 非空约束(NOT NULL)
- 字段值不能为 NULL
操作示例
sql
-- 创建时指定
CREATE TABLE t_user6(id INT,NAME VARCHAR(20) NOT NULL,address VARCHAR(20) NOT NULL
);-- 修改表添加约束
ALTER TABLE t_user7 MODIFY NAME VARCHAR(20) NOT NULL;-- 删除约束
ALTER TABLE t_user7 MODIFY NAME VARCHAR(20);
5. 其他约束类型
约束类型 | 说明 | 示例 |
---|---|---|
唯一约束(UNIQUE) | 字段值唯一 | ALTER TABLE t ADD UNIQUE(phone); |
默认约束(DEFAULT) | 字段默认值 | CREATE TABLE t (addr VARCHAR(20) DEFAULT '北京'); |
零填充约束(ZEROFILL) | 不足长度时补 0 | CREATE TABLE t (id INT ZEROFILL); |
外键约束(FOREIGN KEY) | 关联其他表主键 | ALTER TABLE t ADD FOREIGN KEY(deptId) REFERENCES dept(id); |
四、DQL(数据查询语言)基础
1. DQL 概述
- 使用
SELECT
语句查询数据 - 支持复杂条件筛选、排序、聚合等操作
2. 简单查询
基本语法
sql
SELECT [ALL|DISTINCT] 列1,列2... FROM 表 [WHERE 条件];
示例
sql
-- 查询所有商品
SELECT * FROM product;
-- 查询商品名和价格
SELECT pname, price FROM product;
-- 别名查询
SELECT pname AS pn FROM product;
-- 去重查询
SELECT DISTINCT price FROM product;
-- 运算查询
SELECT pname, price+10 FROM product;
3. 运算符详解
算术运算符
符号 | 说明 | 示例 |
---|---|---|
+ | 加法 | SELECT 6+2; |
- | 减法 | SELECT price-10 FROM product; |
* | 乘法 | SELECT price*1.1 FROM product; |
/ | 除法 | SELECT 6/2; |
% | 取余 | SELECT 7%2; |
比较运算符
sql
-- 等于
SELECT * FROM product WHERE pname = '海尔洗衣机';
-- 范围查询
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
-- 空值判断
SELECT * FROM product WHERE category_id IS NULL;
-- 模糊查询(%匹配任意字符,_匹配单个字符)
SELECT * FROM product WHERE pname LIKE '%裤%';
逻辑运算符
sql
-- 且
SELECT * FROM product WHERE price > 200 AND category_id = 'c001';
-- 或
SELECT * FROM product WHERE price = 200 OR price = 800;
-- 非
SELECT * FROM product WHERE NOT(price = 800);
4. 排序查询
sql
-- 单字段降序
SELECT * FROM product ORDER BY price DESC;
-- 多字段排序(价格降序,分类升序)
SELECT * FROM product ORDER BY price DESC, category_id ASC;
-- 去重后排序
SELECT DISTINCT price FROM product ORDER BY price DESC;
5. 聚合查询
函数 | 作用 | 示例 |
---|---|---|
COUNT() | 统计行数 | SELECT COUNT(*) FROM product; |
SUM() | 求和 | SELECT SUM(price) FROM product; |
MAX() | 最大值 | SELECT MAX(price) FROM product; |
AVG() | 平均值 | SELECT AVG(price) FROM product; |
NULL 值处理
COUNT(*)
统计所有行,COUNT(列)
忽略 NULLSUM/AVG
忽略 NULL 行MAX/MIN
忽略 NULL 行
6. 分组查询
sql
-- 按分类统计商品数
SELECT category_id, COUNT(*) FROM product GROUP BY category_id;
-- 分组后筛选(只显示数量>1的分类)
SELECT category_id, COUNT(*) FROM product
GROUP BY category_id HAVING COUNT(*) > 1;
7. 分页查询
sql
-- 显示前5条
SELECT * FROM product LIMIT 5;
-- 从第4条开始显示5条(页码=2,每页5条)
SELECT * FROM product LIMIT 3, 5;
8. 数据导入
sql
-- 从表1导入到表2(表2需存在)
INSERT INTO table2 SELECT * FROM table1;
-- 从表1导入并创建表2
SELECT * INTO table2 FROM table1;
五、正则表达式查询
1. 正则表达式概述
- 通过
REGEXP
关键字实现字符串模式匹配 - 常用于复杂文本筛选
2. 常用模式
模式 | 描述 | 示例 | ||
---|---|---|---|---|
^ | 匹配开头 | 'abc' REGEXP '^a' | ||
$ | 匹配结尾 | 'abc' REGEXP 'c$' | ||
. | 匹配任意字符 | 'abc' REGEXP '.b' | ||
[...] | 匹配集合中任意字符 | 'abc' REGEXP '[xaz]' | ||
[^...] | 匹配非集合字符 | 'x' REGEXP '[^abc]' | ||
* | 匹配 0 次或多次 | 'stab' REGEXP '.ta*b' | ||
+ | 匹配 1 次或多次 | 'stab' REGEXP '.ta+b' | ||
{n} | 匹配 n 次 | 'auuuuc' REGEXP 'au{4}c' | ||
a | b | 匹配 a 或 b | `'a' REGEXP 'a | b'` |
3. 示例
sql
-- 匹配以"海"开头的商品
SELECT * FROM product WHERE pname REGEXP '^海';
-- 匹配包含"裤"字的商品
SELECT * FROM product WHERE pname REGEXP '裤';
-- 匹配第二个字为"蔻"的商品
SELECT * FROM product WHERE pname REGEXP '_蔻';
总结
通过本文,我们系统学习了 MySQL 数据库的四大核心操作:
- DDL:数据库与表结构的定义与修改
- DML:数据记录的增删改操作
- 约束:保证数据完整性的各种规则
- DQL:强大的查询功能,包括条件筛选、排序、聚合等
vm下的centos7使用时出现Datasource error: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed