数据库操作
查询所有数据库
mysql> show databases;
2.创建数据库(不能同名)
mysql> create database cgb2108;
mysql> create database cgb210801 default character set utf8; #指定字符集,避免了中文乱码
3.删除数据库
mysql> drop database cgb2108; #谨慎操作
表的操作
1.查询所有表
1,查询所有表
mysql> use cgb210801; #使用指定的数据库
Database changed
mysql> show tables; #查询所有表
2.创建表
语法: create table 表名(字段名称 字段类型(字段长度),字段2,字段3....)
mysql> create table tb_door(
-> id int(11),
-> door_name varchar(100),
-> tel varchar(20)
-> );
3.修改表
语法: alter table 表名 添加字段 字段名称 字段类型(字段长度)
mysql> alter table student add column address varchar(100);
4.查看表结构
mysql> desc student;
5.删除表
mysql> drop table 表名
表中记录的操作
1.查询表中所有记录
* 在实际中用具体数据记录代表,不用*
语法: 查询 所有 表名
mysql>select * from tb_door;
2.向表中插入记录
语法: 插入数据 表名 值(字段1的值,字段2的值,字段3的值)
注意:表里有几个字段values需要提供几个值+值的顺序和字段顺序一致
mysql> insert into tb_door values(10,'test',"010-666");
3.修改记录
语法: 更新 表名 设置 字段名=字段的新值
mysql> update tb_door set tel='010-857';
4.删除记录
语法: delete from 表名
mysql> delete from tb_door; #删除了表里的所有记录
基础函数
lower--数据转小写
SELECT 'ABC',LOWER('ABC') from dept;
upper--数据转大写
select upper(dname) from dept
length--数据的长度
select length(dname) from dept
substr--截取[1,3]
SELECT dname,SUBSTR(dname,1,3) FROM dept;
concat --拼接数据
select dname,concat(dname,'123') X from dept
replace--把a字符替换成666
select dname,replace(dname,'a','666') X from dept
ifnull#判断,如果comm是null,用10替换
select ifnull(comm,10) comm from dept2
重点:小数位数round & ceil & floor
round四舍五入,ceil向上取整,floor向下取整
直接四舍五入取整
select comm,round(comm) from emp
–四舍五入并保留一位小数
select comm,round(comm,1) from emp
–ceil向上取整,floor向下取整
select comm,ceil(comm) ,floor(comm) from emp
查UUID
SELECT UUID()
时间
now()
select now() -- 年与日 时分秒
select curdate() --年与日
select curtime() --时分秒
year & month & day
–hour()时 minute()分 second()秒
select now(),hour(now()),minute(now()),second(now()) from emp ;
–year()年 month()月 day()日
select now(),year(now()),month(now()),day(now()) from emp ;
转义
单引号 ---加入\转义
条件查询(7个)
distinct---去除重复行(只可以用于单表)
SELECT DISTINCT loc FROM dept;
where--跟条件
and---并且 or --或 in ---等于多个数
select * from emp where ename='tony' and deptno=2 --相当于两个条件的&关系
select * from emp where ename='tony' or deptno=1 --相当于两个条件的|关系
select name, sal from emp where sal in(1400,1600,1800);
like
通配符%代表0到n个字符,通配符下划线_代表1个字符
1%--以1开头的 %1以a结束 %a%包含
NULL
用is 不是=
select * from emp where mgr is null --过滤字段值为空的
select * from emp where mgr is not null --过滤字段值不为空的
Between and
闭区间
select * from emp where sal<=3000 and sal>=10000--等效
select * from emp where sal between 3000 and 10000--等效
limit 分页查询
分页,限制数据展示的条目
1. 一个参数:列出前俩条---limit 2
2.俩个参数:从n+1条开始,展示p条信息 limit n,p
select * from emp limit 2 --列出前两条
select * from emp limit 1,2 --从第二条开始,展示2条记录
order by 默认升序
升序asc
1.数字查询:数字大小排序
2.字母:按照字母的顺序排序
3.日期:数字的大小排
4.中文:utf-8的码表来排
降序desc
聚合 aggregation(5个)
根据一列统计结果
count --使用count(1)
max/main--最大最小值
sum/avg--和平均
分组 group
组group by 根据什么时候分组果出现了聚合列和非聚合列都有的,一定需要分组
分组的规则:按照非聚合分组
过滤后必须用having
char和varchar有什么区别?
char为定长字符串,char(n),n最大为255
varchar为不定长字符串,varchar(n),n最大长度为65535
char(10)和varchar(10)存储abc,那它们有什么差别呢?
char保存10个字符,abc三个,其它会用空格补齐;而varchar只用abc三个位置
主键、外键、唯一索引的区别?
Primary Key 主键约束,自动创建唯一索引
Foreign Key 外键约束,外键字段的内容是引用另一表的字段内容,不能瞎写
Unique Index 唯一索引,唯一值但不是主键
对于约束的好处时,数据库会进行检查,违反约束会报错,操作失败。数据库提供了丰富的约束检查,还有其他约束,但现今弱化关系型数据库的前提下,基本已经很少使用,记住上面三个即可。
drop、delete和truncate之间的区别?
drop删除库或者表,数据和结构定义
delete和truncate只是删除表的数据
delete可以指定where条件,删除满足条件的记录,tuncate删除所有记录
对于自增字段的表,delete不会自增值清零,而truncate是把表记录和定义都删除了,然后重建表的定义,所以自增主键会重头开始计数
什么是事务
数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
事务4个特性ACID
原子性(Atomicity,或称不可分割性)、
一致性(Consistency)、
隔离性(Isolation,又称独立性)、
持久性(Durability)。
隔离级别
事务隔离分为不同级别,包括
读未提交(Read uncommitted) 安全性最差,可能发生并发数据问题,性能最好
读提交(read committed) Oracle默认的隔离级别
可重复读(repeatable read)MySQL默认的隔离级别,安全性较好,性能一般
串行化(Serializable) 表级锁,读写都加锁,效率低下,安全性高,不能并发