数据库小小知识点

理论知识点

数据:数据库中存储的基本对象,种类包括文字、图像、图形、声音等

数据库:以某种有组织的方式存储的数据集合,保存有组织的数据的容器,通常是一个文件或一组文件

DBMS数据库管理软件:对数据库的操作与管理
行业中主流的数据库管理软件有:oracle,sqlsever,mysql

数据库在工作中的应用:
1、软件都需要数据库作为后台支撑
2、部署测试环境需要安装数据库,配置数据库
3、数据库中构造初始化数据
4、测试执行过程中需验证数据库中的数据是否正确
5、有些时候验证功能,需要修改数据库中的数据
6、构造数据进行性能测试,大数据量测试

数据库应用过程

用户
应用系统
用户
数据库管理系统
数据库管理员
数据库

事务:事务对数据库的一组操作,组成这组操作的各个单元,要不全部都成功要不全部失败,这个特性就是事务
1、原子性:要不全部成功,要不全部失败(回滚)
2、一致性:事务执行之前和之后都必须处于一致性
3、隔离性
4、持久性

索引:包含着数据表里所有记录的应用指针
优点:加快查询速度
缺点:降低增删改的速度

sql三种类别语言
DDL:数据定义语言
create、drop、alter、rename

DML:数据操纵语言
select、update、insert、delete

DCL:数据控制语言
grant(授权)、revoke(回收权限)、commit

数据库数据

主键:任意两行都不具有相同的主键键值
外键:表示了两个表之间的相互联系;以另一个表的外键作为主键的表被称为主表,具有此外键的表被称为主表的从表
保证数据的一致性和完整性

整型

tinyint:1字节,非常小的整数
带符号:-128~127
不带符号:0~255

int:4字节,标准整数
带符号:-2147483648~2147483647
不带符号:0~4294967295

其他类型:smallint(2字节) mediumint(字节) bigint(8字节)

浮点型

近似值:
float:4字节,单精度浮点数,有效位数6-7位
double:8字节,双精度浮点数,有效位数16位

准确值
decimal:M+2字节,以字符串形式表示的浮点数,取值范围可变
如:decimal(5,2) -999.99-999.99,M:65 D:30

字符串类型
char[M]:M个字符,固定长度
verchar[M]:M字符,变化长度
其他类型:blob(longblob),text(longText)

时间类型:(日期)
DATE:日期,CCYY-YY-DD
time:时间,hh:mm:ss
datetime:日期和时间组合,CCYY-MM-DD hh:mm:ss

timestamp(时间戳):特殊类型
不定义时间会自动取当前电脑时间
如果有多个列取timestamp时,只有第一个会自动取值

数据库语法

auto_increment:告诉mysql,本列每当增加一行时间自动增量,每个表只允许一个auto_increment列,而且它必须可以被索要(通常做主键)

alter table

查看创建表的信息:show creat table 表名
更新表:alter table
例:alter table 表名 add      字段 属性
    ···             modify   字段 属性
    ···             change   字段(被改) 字段(现在) 属性

insert into 表1(字段1,字段2) select 字段1,字段2 from2 where 。。。
insert into 表1(字段。。。),values(值)

:(truncate比delete速度快)

delete from 表 where 字段=‘n’
truncate table

update 表1 set 字段1=值,字段2=值 where 。。。

备份表

create table 表1 select * from2
命令:mysqldump -u root -p database(数据库名) tablename(表名)>table.sql
注:进入mysql安装目录的bin目录执行

备份数据库

mysqldump -u root -p database(数据库名)>database.sql
注:进入mysql安装目录的bin目录执行

导入数据库

mysql -u root -p
注:进入mysql安装目录的bin目录执行
create database newdb(创建一个要导入的数据库)
use newdb
source database.sql(有数据的数据库)

外键

设置外键
alter table 表名 add constraint 外键名 foreign key(字段) references 主表(字段)
删除外键
alter table 表名 drop foreign key 外键名 

对表操作

删除列:alter table 表名 drop 列名
删除表:drop table 表名
删除表里数据:delete from 表名
重命名表:rename table 表名 to 新表名

选择显示

排序:select distinct(去重)字段 from 表名 order by 字段(可多列)
升序:···														asc 
降序:···														desc
返回几行:···													 limit n 
从n+1开始,m行:···										limit n,m 

desc只应用与前面一个字段顺序
order by子句位于from之后,如果使用limit,就必须位于order by之后

where 条件1 and(优先级高)/or 条件2 ,如果先执行or,就加括号
注:在同时使用order b和where时,order by位于where后,否则将产生错误

in->or值相加;例 in(1 or 2)

百分号(%)
like (n%) 以n开头的字符
like(%n%)中间含n的字符
_通配符:(_n%) n前面只有一个字符

使用别名,并进行字符拼接:
select (字段) concat(字段,‘字符’,字段,‘字符’) as 别名 from 表名
算术运算:
select 字段,字段*字段 as 别名 from 表名 where 字段 =m

mysql支持的函数类型有
1、用于处理字符串的文本处理函数
2、用于在数值数据上进行算术操作的数值函数
3、用于处理日期和时间的函数
4、返回数据库信息的系统函数

给表指定别名的作用:
1、缩短sql语句
2、允许在单条select语句中多次使用相同的表

文本处理函数

函数名 函数意义
concat() 字符串拼接函数
length() 返回字符串的长度(空格也会计算)
lower() 将字符串转换为小写
upper() 将字符串装换为大写
substring() 返回子串的字符
trim() 去掉字符串左右两边的空格

**注:**mysql只支持使用not 对 in、between和exists取反

日期与实践处理函数

获取当前日期时间函数
curdate() 返回当前日期
curtime() 返回当前时间
now() 返回当前日期时间
时间日期计算函数
adddate() 增加一个日期(天,周等)
addtime() 增加一个时间(时,分)
datediff() 计算两个日期之差
获取日期时间的一部分
date() 返回日期时间的日期部分
year() 返回日期时间的年部分
month() 返回日期时间的月部分
day() 返回日期时间的日部分

例:

select 日期字段1,adddate(日期字段1,interval 数字 单位(month/week)) as 别名 from 表名

其他函数

数值处理函数
round(x,y) 返回x的四舍五入的有y位小数的值
truncate(x,y) 返回x的截取为y位小数的结果
abs(x) 返回x的绝对值 例:select abs(datediff(,))
rand() 返回0-1内的随机值
聚集函数
avg() 返回某列的平均值(不包括值为null的行)
count() 返回某列的行数
max() 返回某列的最大值
min() 返回某列的最小值
sum() 返回某列值之和

流程函数

1if(value,t,f)
如果value是真,返回t,否则返回f
2if null(value1,value2)
如果value1不为空返回value1,否则返回value2
3case when [value](可重复) then [result] ... else [default] end
如果value是真,返回result,否则返回default
4case[字段] when [value] then [result]...else [default] end
例:
SELECT
    NAME '葫芦娃',
    CASE NAME
        WHEN '大娃' THEN
            '神力'
        WHEN '二娃' THEN
            '千里眼、顺风耳'
        WHEN '三娃' THEN
            '铜头铁臂'
        WHEN '四娃' THEN
            '烈火'
        WHEN '五娃' THEN
            '惊涛骇浪'
        WHEN '六娃' THEN
            '隐身'
        ELSE
            '镇妖之宝'
    END '技能'
FROM
    表名;

分组
分组是在select语句中的group by子句中建立的
**注:**group by 只是创建分组,并不保证分组里面的数据排列顺序,需要使用order by 子句对分组里面的数据进行排序
例:

select 字段,count(*as 别名 from 表名 group by 字段,字段 having count(*)》n

注:
group by 必须出现在where句之后,order by 之前
having是对分组后的结果进行过滤
select后面只能查看group by后面的列和聚集计算的列
group by 可以根据各个列进行分组,多个列分组即多个列的组相同

使用顺序
select-》from-》where-》group by-》having-》order by-》limit

in

select * from1 where 字段1 (not)in (select 字段1 from2 where 字段2=n)

exist

select * from1 where 字段1 (not)exist(select * from2 where 表1.字段=2.字段)

联结

笛卡尔乘积:是由没有联结条件的表关系返回的结果,检索出的行的数目将是第一个表中的行数乘以第二个表中的行数

联结

select * from1,表2 where 表1.字段=2.字段

**注:**mysql在运行时关联指定的每个表以处理联结,这种处理可能非常消耗资源,因此不要联结不必要的表,联结的表越多,性能下降越厉害

内联结(等值联结):只有联结成功的值才返回
内部联结也称为等值联结,它基于两个表之间的相等测试

select * from1 inner join 表2 on 表1.字段=2.字段

自联结:自联结的执行效率高于子查询

select * fromas A,表 as B where A.字段=B.字段 and B.字段2=‘n’

外联结 :按照基准表返回值,不管联结成不成功
1、左联结:以左边表为基准,按照过滤条件查找右边表的记录,如果匹配列,那么就组合成一行,并显示结果,如果没有匹配到,那么只显示左边表的字段,右边表中不存在的字段用空值来显示

select * from1 left join 表2 on 表1.字段=2.字段

2、右联结:与左联结相反

3、联合查询:union
将多条select语句组合起来,将他们的结果组合成单个结果集
:union必须由两条或两条以上的select语句组成,语句之间用关键字union分隔;union中的每个查询必须包含相同的列;列数据类型必须兼容

猜你喜欢

转载自blog.csdn.net/qq_42261165/article/details/92088127