SQL语句
1. DDL(Data Definition Language,DDL)-操作数据库
数据定义语言(Data Definition Language,DDL):DROP、CREATE、ALTER等语句;
数据库定义语言。主要用于定义数据库、表、视图、索引和触发器等。
- CREATE语句主要用于创建数据库、创建表、创建视图。
- ALTER语句主要用于修改表的定义,修改视图的定义。
- DROP语句主要用于删除数据库、删除表和删除视图等。
语句
- 查询所有数据库:
show databases;
- 创建数据库
create database 数据库名称;
- 如果不存在则创建数据库
create database if not exists 数据库名称;
- 删除数据库
drop database 数据库名称;
- 数据库存在的时候删除数据库
drop database if exists 数据库名称;
- 使用数据库
use 数据库名称;
- 查询当前正在使用的数据库:
select database();
2. 数据操作语言(Data Manipulation Language,DML)
数据操作语言(Data Manipulation Language,DML):INSERT、UPDATE、DELETE语句;
数据库操作语言。主要用于插入数据,更新数据,删除数据。
- INSERT语句用于插入数据,
- UPDATE语句用于更新数据,
- DELETE语句用于删除数据。
数值类型
type | comment |
---|---|
tinyint | 小整数型,占1个字节 |
int | 大整数型,占4个字节 |
double | 浮点类型 |
日期类型
type | comment |
---|---|
date | 日期值,只包含年月日 |
datetime | 混合日期和时间值,包含年月日时分秒 |
字符串
type | comment |
---|---|
char | 定长字符串 |
varchar | 变长字符串 |
语句
- 查询表
show tables;
- 查询表结构
desc 表名称
- 创建表
create table 表名称(
字段名1 数据类型,
字段名2 数据类型,
...
字段名n 数据类型
);
- 删除表
drop table 表名
- 删除表如果表存在
drop table if exists 表名;
- 修改表名
alter table tablename rename to newtablename;
7.增加列
alter table 表名 add 列名 数据类型;
- 修改列的数据类型
alter table 表名 modify 列名 新数据类型;
- 修改列的数据列行和列名
alter table 表名 change 列名 新列名 新数据类型;
- 删除列
alter table 表名 drop 列名;
DML- 增删改数据
-
给指定列插入数据
insert into 表名(列名1,列名2...) values(值1,值2...);
批量
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...;
-
给所有列添加数据
insert into 表名 values(值1,值2...);
批量
insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...)...;
-
修改表数据
alter table set 列名1=值1,列名2=值2...[where 条件];
-
删除表数据
delete from 表名 [where 条件];
3. DQL(Data Query Language)- 数据的查询操作
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
查询语句
select 字段列表 from 表名 where 条件列表;
运算符 | 功能描述 |
---|---|
> < = ! | 大于 小于 等于 不等于 |
between…and… | 在这个范围之内 |
in(…) | 多选一 |
is null / is not null | 是null / 不是null |
and 或 && | 并且 |
or 或 || | 或者 |
聚合函数
通常对列进行的操作
count(列名) 统计数量(一般选用不为null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值
select name,english 英语成绩 from stu;
select name,english as 英语score from stu;
select * from stu where age>20;
select * from stu where age in(18,20,21);
select * from stu where name like '%张%';
select * from stu order by math DESC;
select count(id) from stu;-- 6
select count(english) from stu; -- 5. Null 值会被忽略
-- 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组:
select gender, avg(math),count(*) from stu where math > 70 group by gender;
-- 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
-- where 和 having 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。所以,where 不能对聚合函数进行判断,having 可以。
select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) >= 2;
约束
约束是作用于表中列上的规则,用于限制加入表的数据。
约束类型功能
-- 非空约束 NOT NULL
保证列中所有的数据不能有null值
-- 唯一约束 UNIQUE
保证列中所有数据各不相同主键约束
-- PRIMARY KEY
主键是一行数据的唯一标识,要求非空且唯一检查约束
-- CHECK
保证列中的值满足某一条件默认约束
--DEFAULT
保存数据时,未指定值则采用默认值外键约束 FOREIGN KEY外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
-- 删除表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
-- 部门表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);
隐式内连接:select * from emp,dept where dep_id=did;
显式内连接: select * from emp inner join dept on dep_id=did;
左外连接:
select * from emp left outer join dept on dep_id=did;
右外连接:
select * from emp right outer join dept on dep_id=did;
子查询
子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断,例如查询员工中工资大于小李的员工信息:
select * from emp where dep_id in (select did from dept where dname='研发部' or dname= '财务部');
子查询语句结果是多行多列,子查询语句作为虚拟表,例如查询员工中工资大于3000的员工的信息和部门信息:
select * from (select * from emp where salary>3000) t1, dept where t1.dep_id=dept.did;
事务
MySQl 事务具有四大特征,分别是:
原子性: 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性 :事务完成时,必须使所有的数据都保持一致状态
隔离性: 多个事务之间,操作的可见性
持久性: 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
START TRANSACTION;
或者
BEGIN;
commit;
Rollback;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义