建表
create table major(
id int unsigned primary key auto_increment comment 'ID',
major_name varchar(10) comment '学科',
create_time datetime comment'创建时间',
update_time datetime comment '更新时间'
)comment '学科';
comment注解
primary key 主键
key auto_increment 自增
字段
增加字段
(增加major_id在字段gender之后)
alter table student add major_id varchar(20) after gender;
删除字段
alter table student drop update_time;
修改字段属性 (unique)
(给字段major_name 加上唯一性,不可重复)
alter table major add unique (major_name);
修改列名
alter table student change master_id major_id int;
表内
插入
插入系统时间
insert into major (major_name, create_time, update_time) VALUES ('biology',sysdate(),sysdate());
修改
在student表中修改id为1的gender值
update student set gender ='1' where id =1;
删除
delete from major where id = #{id}
聚合函数
select 聚合函数(字段) from 表名
统计结果表中一级预警的个数
select count(warning_level) from analysisresults where warning_level = '一级预警';
group by
//选中不同级别的预警 -- 显示预警级别和对应的个数
select warning_level, count(warning_level)from analysisresults group by warning_level;
//having 可以使用聚合函数 --- where 不可以使用聚合函数
排序
select 字段 from 表名 order by 字段1 排序方式1,字段2,排序方式2 -- 字段需要是纯数字
ASC - 升序
DESC - 降序
外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id); //建立外键
ALTER TABLE 表名 DROP FOREIGN 1 KEY 外键名称;
alter table emp drop foreign key fk_emp_dept_id; //取消外键
使用外键是确保数据在的准确性和一致性
存在外键的表是子表
不存在的是父表
建立外键后,则不能从父表删除数据,子表可以删除
删除/更新行为
CASCADE
当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则
也删除/更新外键在子表中的记录。
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade;
SET NULL
当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表
中该外键值为null(这就要求该外键允许取null)。 -- 删除父表中的外键后 子表中选中得外键为null
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update set null on delete set null ;
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES
主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
多表查询
两个表
外连接查询
左外连接:查询左表所有数据,以及两张表交集部分的数据
右外连接:查询右表所有数据,以及两张表交集部分的数据
left join && right join
放在前面,显示的时候也在前面
select * from student as s right join major m on m.id = s.major_id;
选中字段显示
select major_name, name from major as m left join my_one.student s on m.id = s.major_id;
内连接查询
查询A、B两表交集部分的数据
两表只显示符合条件的结果,不显示null
select f.id as fileId, file_name, label_name from files f join label l on f.label = l.id;
自连接
自连接 -- 自我查询,把自己的两个字段连接
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别1 名B ON 条件 ... ;
select a.name , b.name from emp a , emp b where a.managerid = b.id;
select a.name '员工', b.name '领导' from emp a left join emp b on a.managerid =
b.id;
union / union all
union all 显示全部的信息
union 联合查询,会对查询出来的结果进行去重处理。
如果多条查询语句查询出来的结果,字段数量不一致,在进行union/union all联合查询时,将会报
错
select * from emp where salary < 5000 union select * from emp where age > 50;
子查询
根据子查询结果不同,分为:
A. 标量子查询(子查询结果为单个值)
B. 列子查询(子查询结果为一列)
C. 行子查询(子查询结果为一行)
D. 表子查询(子查询结果为多行多列)
根据子查询位置,分为:
A. WHERE之后
B. FROM之后
C. SELECT之后
批量删除前缀相同的文件
SELECT CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables WHERE table_name LIKE 'quantities_%';
删除表内所有数据
Delete from analysisresults (表名字) where 1=1;
事务
转账案例:
-- 开启事务
start transaction
-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';
-- 如果正常执行完毕, 则提交事务
commit;
-- 如果执行过程中报错, 则回滚事务
-- rollback;
连续左连接+内循环+更改指定数值为文字
case when dpr.result= '0' then '不通过' when dpr.result='1' then '通过' end,
包含
select distinct subMarkName from company_upload_docs where subMark like '%12D902%';