MySQL中DDL语言
DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。
- create:建立数据库表格
create table user(
id int(8) primary key auto_increment,
name varchar(20) not null,
password varchar(50) default '1234',
cid int(8),
constraint user_cid_fk foreign key(cid) references class(cid)
);- drop:删除表或表中的字段等信息
drop table user;
drop table if exists user;- alter:修改数据库表的结构,包括增删字段、修改类型等
alter table user rename to user2; -- rename to 重命名
alter table user add sex varchar(10) comment = '性别'; -- 添加字段
alter table user drop sex; -- 删除字段
alter table user modify column name varchar(50); -- 修改字段MySQL中DML语言
DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。(增添改查)
- insert:插入一条数据
-- 第一种方式
insert into user values(null, "张三", "1234", 1);
-- 第二种方式
insert into user(id, name, password, cid) values(null, "张三", "1234", 1);
-- 第三种方式,查询插入
create table user2 select * from user;
insert into user2 select * from user where id < 3;- delete:删除一条数据
delete from user where id = 1;- update:更新一条数据
update user set name = "李四" where id = i;- select:查询数据
-- 1.普通查询
select * from user;
-- 2.过滤查询
select * from user where id between 1 and 3;-- 包含边界的范围查询
select * from user where id != 1; -- < > <= >= != 比较运算符
select * from user where name like "_四%";-- 模糊查询,“_”占一位,“%”占0~多位
select * from user where id in(1, 2); -- 匹配查询,要满足in中所列举的值
select * from user where name is not null; -- is null 为空,is not null 为非空
-- 3.查询后排序
select * from user order by name desc; -- desc 为降序,默认为asc升序
select * from user order by name asc, sex desc;-- 多次排序,后一次排序要在前一次排序的基础上
-- 4.函数查询(sum, avg, max, min, count, distinct, ifnull等)
sum(属性):求和
avg(属性):求平均
max(属性)、min(属性):求最大最小值
count(属性):统计数量
distinct(属性):一般用于查询列表的某一字段中,去除重复数据
ifnull(属性, 值):判断某属性值是否为空,若为空则设置为自定义的值
-- 5.分组查询(group by)
-- 使用限制:
-- select中出现的非组函数列,都必须在group by中出现;
-- group by中出现的列在select中不一定出现;
-- group by可以出现多个列
-- group by不能出现集合函数
-- 顺序:先全表过滤(where) -> 分组(group by) -> 组内过滤(having)-> 排序(order by)
select sex, count(sex)
where id < 10
group by sex
having id > 0
order by id desc;
-- 6.多表查询(等值查询,内了连接查询,外连接查询)
-- 等值查询,以主外键进行关联,未关联到的数据不显示
select * from user u, user s where u.id = s.id;
-- 内连接查询,与等值查询效果一样
select * from user u inner join user s on u.id = s.id; -- inner可以省略
-- 左外连接,以左边的表去连接右边的表,左表没匹配到的数据也显示
select * from user u left outer join user s on u.id = s.id; -- outer可以省略
-- 右外连接,以右边的表去连接左边的表,右表没匹配到的数据也显示
select * from user u right join user s on u.id = s.id;
-- 7.子查询,内层查询的结果给外层查询使用的查询称之为子查询
-- (1)子查询放在select语句中
select id, (select name, password from user s where s.id = u.id)
from user u;
-- (2)子查询放在from中,查询结果作为一个新表,需要命名
select * from (select * from user where id < 10) u where u.id > 5;
-- (3)子查询放在where中,又分为单行子查询和多行子查询
-- 单行子查询:子查询结果只有一个的查询
select * from user where id = (select id from user where name = '李四');
-- 多行子查询:子查询结果有多个的查询,如 in、any(任意一个数据满足)、all(所有数据都满足)
select * from user where id > any(select id from user where id < 4);
-- (4)子查询放在having中
select sex, count(sex) from user group by sex having name = (select name from user where id = 1);
-- 8.分页查询,limit 参数1,参数2;
-- 参数1表示当前页起始位置的下标(当前页面 - 1)* 页面数;
-- 参数2表示页面大小
select * from user limit 0, 5;数据库设计,三大范式
- 第一范式:将表中的数据分割成不可在分,保证数据的原子性;
- 第二范式:在第一范式的基础上,保证每一列数据与主键相关;
- 第三范式:在第二范式的基础上,保证每一列数据与主键直接相关,不能间接相关。
















