表记录的常用操作
CRUD
插入记录:insert into a value(1,2);
查询记录:select * from a 修改记录: update a set tel=555;
删除记录:delete from a;
处理数据插入异常,提示数据过长,实际是变成了中文乱码,需要转换
set names gbk;
主键约束:添加primary key
特点是:特点是字段必须唯一,不能是null
insert into a values(10);*成功
insert into a values(10);不成功,因为10已经存在
insert into a values(null);不成功,不能存在null
AUTO_INCREMENT 自增
固定搭配
primary key AUTO_INCREMENT
主键自增策略,是指主键的值不需要程序员数
交给程序自增,给主键增加,AUTO_INCREMENT
表里都应该拥有主键,数字给null,自动维护第一个字段id的值
非空约束
NOT NULL .
CREATE TABLE c(
id INT PRIMARY KEY AUTO_INCREMENT,
pwd VARCHAR(10) NOT NULL
);
insert into c values(null,“123”);//成功
第一个null是id的值,id是主键自动递增
insert into c values(null,null);//不成功,添加非空约束,字段值不能为null
唯一约束
给字段添加unique
值必须唯一
create int primary key auto_increment
不区分大小写,一样报错
查询部门表中的某一项
查询使用字段名代替*
查询多个字段的值时用,号连接
举例子:
select 某一项 from 部门表
四,函数基础、
测试
1.lower变小写
2.upper变大写
例子:select upper(dname) AS X,lower(loc) from dapt;
AS X:设置别名
3.length获取长度
SELECT ename, LENGTH(ename) FROM emp;
一个字母算作一个长度
一个字算作3个长度
长度不固定,通用于utf-8
4.substr(a,b,c)截取字段数据
a:字段姓名
b.从第几个数据开始截取
c.截取长度(不够有多少截多少)
5.concat(a,b,c)拼接
a:字段名
b,c想要拼接的内容
SELECT ename, CONCAT(ename,ename) FROM emp;拼接enam的值和ename的值
6.replace (a,b,c)
a是字段名
b是原名
c是要替换成的值
select dname ,replace(dname,"web","WE") from dept;
7.ifnull(a,b)
a字段名
b 如果是null替换的值
SELECT comm ,IFNULL(comm,1000)FROM emp;
SELECT comm ,ROUND(comm),CEIL(comm),FLOOR(comm)FROM emp;
round四舍五入 ceil向上取整 floor 向下取整
获取当前的系统时间
SELECT NOW(),year()
获取当前年月日
SELECT YEAR(NOW()),MONTH(NOW()),DAY(NOW());
获取当前时间的小时
SELECT HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
转义字符
'作为sql语句符号,内容中出现单撇就会乱套,进行转义即可
select 'ab'cd' -- 单引号是一个SQL语句的特殊字符
select 'ab\'cd' --数据中有单引号时,用一个\转义变成普通字符
表示xi'an
"xi'an" 'xi\'an'
条件查询:
常见的业务中,增删改查crud,查询最多
去重 distinct
SELECT DISTINCT loc FROM dept; 加载loc前面
where用来引导条件,where的效率比having高效,优先用where,分组前执行where,分组后执行having
SELECT * FROM dept WHERE deptno>10 AND loc="beijing";
SELECT * FROM dept WHERE deptno IN(10,20,30);in的写法,查询in字句
like模糊查询
查询null数据
SELECT * FROM emp WHERE comm IS NULL;
between and
SELECT * FROM emp
select * from emp where sal<3000 and sal>10000
select * from emp where sal<=3000 and sal>=10000--等效
select * from emp where sal between 3000 and 10000--等效
limit分页,限制数据展示的条目
展示2条
SELECT * FROM dept LIMIT 2,;
从n+1(1+1)条开始展示数据,总共展示2条
SELECT * FROM dept LIMIT 1,2;
order by 排序
升序
SELECT * FROM emp ORDER BY mgr;
降序
SELECT * FROM emp ORDER BY mgr DESC;
按照字母顺序排序
SELECT * FROM emp ORDER BY ename ;
按照数字大小排序
SELECT * FROM emp ORDER BY hiredate ;
会查utf-8里汉字对应的数字升序排序,字典顺序
SELECT * FROM emp ORDER BY job;
聚合函数
二:聚合函数
概述
把一列的所有值聚合起来,然后做数据分析
count 个数
sun求和
max最大值
avg平均数
测试聚合函数
max 查询最高工资
SELECT MAX(sal)FROM emp
min 查询最低工资
SELECT MIN(sal)FROM emp
sum 查询工资总和
count
SELECT COUNT(1) FROM emp;固定写法,比里面放*高效,1没有意思 ,用的比较多
SELECT COUNT(*) FROM emp;低效
SELECT COUNT(sal) FROM emp;可能有问题,不统计null元素
错误:
sal五行
max(sal)一行
查询结果中,如果出现了非聚合列和聚合列混搭的情况,一定需要分组
SELECT sal, MAX(sal)FROM emp;
分组
group by表示分组
解决混搭,完成需求,
#分组:group by,把数据按照维度分组后,数据分析
#练习,统计每个岗位的平均薪资
SELECT job ,AVG(sal) FROM emp GROUP BY job;
分组口诀:
什么时候要分组 查询时出现了混合列
按照什么分组,按照非聚合列分组
having过滤
#练习每年入职的人数,只要人数>1的记录
SELECT YEAR(hiredate) a,COUNT(1) b FROM emp GROUP BY a HAVING b>1;
where 和 having
where高效
事务四个特性acid;
数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
事务的四大特性:
原子性:把多条sql,当做是一个原子密不可分,要么全成功,要么全失败
隔离性:数据库为了保证性能也支持高并发,但是有安全隐患,保证多个操作之间是隔离的
持久性:对数据库的操作是持久生效影响的
一致性:保证数据在多个系统中是一致的
隔离级别:
1.读已提交:安全性最差,可能发生
2.读未提交
3.可重复读
4.串行化
默认约束
CREATE TABLE e (
id int(11) NOT NULL AUTO_INCREMENT,
SEX varchar(10) DEFAULT '男'
PRIMARY KEY (`id`)
)
检查约束
外键约束:给字段添加外键约束
主表维护了和子表的关系
子表中的主键的值必须取自主键
当主表删除或者修改数据时,子表必须没有相关数据
外键约束:给字段添加外键约束
FOREIGN KEY (user_id) REFERENCES zhu (id)
and高效 or低效 尽量用and不用or
主键自带索引,提高查询效率