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;
浙公网安备 33010602011771号