sql语句分类
- DDL(数据定义语句)
- DML(数据操纵语句)
- DCL(数据控制语句)
- DQL(数据查询语句)
数据库操作
- 创建表:
create database db_name character set utf8; - 显示所有数据库
show databases; - 显示数据库创建语句
show create database db_name; - 删除数据库语句
drop database db_name; - 切换数据库
use db_name; - 查看当前数据库名称
select database();
表结构的操作
增
- 创建表
create table table_name(
列名1 列类型(长度) 约束,
列名2 列类型(长度) 约束
);
约束:
主键约束: primary key
唯一约束:unique
非空约束:not null
删
- 删除表
drop table 表名
改
- 添加列
alter table 表名 add 列名 列类型 约束 - 修改列
alter table 表名 modify 列名 列类型 约束 - 修改列名
alter table 表名 change 旧列名 新列名 列类型 列约束 - 删除列
alter table 表名 drop 列名 - 修改表名
rename table 旧表名 to 新的表名
查
- 查看当前数据库所有表名
show tables - 查看表的定义结构
show create table - 查看表的结构
desc 表名
表内容的操作
增
- 插入数据
insert into 表名(列名1,列名2)values(值1,值2)
insert into 表名 values(值1,值2,...) - 批量插入
insert into 表名 values (值1,值2)(值1,值2)(值1,值2)
删
- 删除数据
delete from 表名(where 条件)
truncate table 表名【先删除表,再重建表】
改
- 更新数据
update 表名 set 列名 = 值,列名 = 值 (where 条件)
查
- 通用格式
S F W G H O - 模糊查询
_表示单字符,%表示多字符 - 聚合函数
sum(),avg(),count(),max(),min(), - 排序
order by asc (升序)(ascend)
order by desc(降序)(descend) - 别名
as - 在范围内
in
多表创建及查询
- 多表之间关系维护
外键约束(foreign key)
通常情况下,一个项目/应用建一个数据库
- 多表之间的建表原则
一对多:
多的一方添加外键
多对多:
建立一张中间表,至少两个外键
一对一:
当作是一对多情况处理,在任意一张表添加一个外键,并且这个外键要唯一,指向另外一张表 - 添加一个外键
alter table 表1 add foreign key(cno) references 表2(cid);
删除的时候, 先删除外键关联的所有数据,再才能删除分类的数据 - 主键约束: 默认就是不能为空, 唯一
- 外键都是指向另外一张表的主键
- 主键一张表只能有一个
- 唯一约束: 列里面的内容, 必须是唯一, 不能出现重复情况, 为空
- 唯一约束不可以作为其它表的外键
- 可以有多个唯一约束
多表查询
-
交叉连接查询 笛卡尔积
两表相乘,没什么实际意义 -
内连接查询
隐式内链接
SELECT * FROM product p,category c WHERE p.cno=c.cid;
-- 显示内链接
SELECT * FROM product p INNER JOIN category c ON p.cno=c.cid;
-- 区别:
隐式内链接: 在查询出结果的基础上去做的WHERE条件过滤
显示内链接: 带着条件去查询结果, 执行效率要高 -
左外连接
左外连接,会将左表中的所有数据都查询出来, 如果右表中没有对应的数据,用NULL代替
SELECT * FROM product p LEFT OUTER JOIN category c ON p.cno=c.cid; -
右外连接
会将右表所有数据都查询出来, 如果左表没有对应数据的话, 用NULL代替SELECT * FROM product p RIGHT OUTER JOIN category c ON p.cno=c.cid;
分页查询
- 每页数据数据3
- 起始索引从0
- 第1页: 0
- 第2页: 3
起始索引: index 代表显示第几页
页数从1开始
每页显示3条数据
startIndex = (index-1)*3
第一个参数是索引
第二个参数显示的个数
select * from product limit 0,3;
select * from product limit 3,3;
子查询
SELECT pname ,(SELECT cname FROM category c WHERE p.cno=c.cid ) AS 商品分类名称 FROM product p;