目录
目录
1.什么是数据库
数据库是存放数据的仓库。它的存储空间很大,可以存放大量数据。用户可以对文件中的数据进行新增、查询、更新、删除等操作。
1.1数据库的优点:
- 数据的共享性高、冗余度低、易扩充
- 保持数据的安全、完整
- 数据独立性高
1.2常见的数据库
- MySQL :是一种关系型数据库,体积小、速度快
- SQL Server:微软的商业化产品,SQL语句兼容性好,商业化成熟度高
- Oracle:基于内存计算的关系数据库
- Redis:Key-Value数据库,并提供多种语言的API
MYSQL三大范式
第一范式
确保每列保持原子性(不可再分割)
第二范式
在第一范式的基础上,第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(一个表中必须有一个主键)
第三范式
在第二范式的基础上,确保数据表中的每一列数据都和主键直接相关,而不能间接相关
SQL语句
1.基本操作
- 查看所有数据库名称:SHOW DATABASES
- 切换数据库:USE student,切换到student数据库
2.数据库操作
- 创建数据库:create database databasename;
- 删除数据库:drop database databasename;
- 查看表中的所有数据:select * from tablename;
- 查看表结构:desc tablename;
- 创建表:create table tablename(字段名 数据类型,字段名 数据类型,....);
- 删除表:drop table tablename;
- 表追加一列:alter table tablename add 列声明;
3.数据类型
数值型:整数型和浮点型
整数型:tinyint(-128--127) smallint int bigint 1byte=8bit 1kb=1024byte 1Mb GB TB
----int (M)
Unsigned:无符号
M:零填充的位数 int(5) zerofill unsigned 00023 12345 int unsigned
Zerofill:零填充
浮点型:float double decimal money real
float(M,N) M:浮点数的精度 N:小数点的位数
float(5,2)---999.99
字符型:
定长:char(长度) char(2)---a----length:2
变长:varchar(长度) varchar(2)--a---length:1
text
日期型:
date
datetime: ----now()
year
‘2019-09-09’
4.建表
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
…
);
例如:
create table t_testint(id1 int,id2 int unsigned,id3 int(5),id4 int(5) zerofill);
5.数据的操作(表)DML
insert into (增):
选择型的数据录入: int a; a=20
insert into tablename(字段名,字段名,...) values(值,值,...) ‘zs’ ‘2023-3-1’ 1 99.99
完全匹配:
Insert into tablename values(值,值....);
Delete(删):
Delete from tablename;#删除所有
Delete from tablename where 条件字段名=值;【条件:一般会写成主键】
Update(改):
Update tablename set 字段名=值,字段名=值,...
Update tablename set 字段名=值,字段名=值,... where 条件字段名=值;【条件:一般会写成主键】
Select(查)
Select * from tablename;
约束
表规范的一种解决方式。
主键:primary key 用来唯一标识一条数据,一个表中只能有一个主键,不允许为null
一般不把实际业务中的字段当成主键。
非空:not null
默认: default 默认值
唯一:unique 用来唯一标识一条数据 index,一个表中可以有多个唯一键,可以允许为null
check约束:mysql无强制功能。
以上约束都是单表的规范
外键
其它:自增长 auto_increment 一般主键自增长。(整型)
关系
1:1(一对一)
1:n(一对多) 班级和学生 ----FK
M:n(多对多)
联合主键
Create table t_score(
Sid int,# 关联学生表
Cid int,# 关联课程表
Score float,
Primary key(sid,cid)
)
6.创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
说明:
username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码
7.授权
GRANT privileges ON databasename.tablename TO 'username'@'host'
说明:
privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.
8.修改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword");
9.撤销用户权限
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
10.删除用户
DROP USER 'username'@'host';
简单查询
1.查询固定列
select sno,name from t_stu;
2.查询列起别名
select sno as stuno,name sna from t_stu s;
3.去除重复
select distinct address from t_stu;
运算符
算术运算符 + - * / % ++ --
关系运算符 > >= < <= = !=(<>)不等于
逻辑运算符 and or not
其它运算符 is is not in() not in() between...and[>= <= ] as like any all
五大查询语句
where:根据特定的条件(表结构存在的)进行查询数据
根据条件查询信息
精确查询
#查询地址是大同或者太原的学生信息
select * from t_student where address='太原' or address='大同';
select * from t_student where address in('太原','大同');
in
#not in 不在...范围
#null查询 is is null
#not null查询 is not null
模糊查询 like % _
%关键字%:只要包含关键字就可以查询出来
%keyword:以keyword结尾
keyword%:以keyword开头
Like 李_
查询学生【姓名或地址】中包含’s’的学生信息
select * from t_student where name like '%s%' or address like '%s%';
group by
分组统计查询,一般统计函数(聚合函数)配合使用。
查询结果可以是聚合函数和分组后的字段信息。
语法:group by 字段名,字段名....
5个:count() max() min() avg() sum()
Having
可以将查询结果当作查询条件
order by
asc
Desc
多个字段进行排序 用,隔开 字段 desc 字段(asc)
Select * from t_user order by id desc;
Limit
Limit M,N
M:偏移量 N:显示的条数
Limit 0,10 Limit 10
使用顺序:
Where>group by>having>order by>limit
子查询
From子查询
select * from (select * from t_stu order by id desc limit 10) a order by age desc;
Where子查询
select * from t_stu where cid in(select id from t_class);
多表查询
笛卡尔积:一个表的行数*另外一个表的行数
Where 多表: select …. From 表1,表2,… where 关联条件 最少两张表
左连接(left join)
Select ...... from
Lefttable Left join righttable
On条件:关联条件
将左表的全部信息与右表的信息进行匹配,匹配成功将信息显示出来,匹配不成功,右表用null表示.
右连接(right join)
Select ….. from
lefttbalename right join righttablename
on lefttablename.字段名=righttablename.字段名
将右表的全部信息与左表的信息进行匹配,匹配成功将信息显示出来,匹配不成功,左表用null表示.
内连接(inner join)
Select ….. from lefttbalename [inner] join righttablename
on lefttablename.字段名=righttablename.字段名
将右表的全部信息与左表的信息进行匹配,只显示匹配成功的结果
视图
视图是一种虚拟表 ,本身是不具有数据的,占用很少的内存空间,
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
创建
create view viewname
as
select sql 语句
数据库事务、引擎
四个特性:
原子性(A):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
一致性(C):事务必须使数据库从一个一致状态变换到另外一个一致状态
隔离性(I):一个事务内部的操作及使用的数据对并发的其他事务是隔离的
持久性(D):一个事务一旦提交成功,它对数据库中数据的改变将是永久性的,接下来的其他操作或故障不应对其有任何影响。
Mysql:使用事务
开启事务 start transaction;
编写事务中的sql语句(insert、update、delete)
成功:提交 commit
错误:回滚 rollback
MyISAM(5.5版之前)拥有较高的插入、查询速度,但不支持事物
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),InnoDB是默认的MySQL引擎
触发器
监视地点(table)
监视事件(insert,update,delete)
触发时间(after,before)
触发事件(insert,update,delete)
创建
Create trigger triggerName
After/before insert/delete/update on 表名
For each row
Begin
Sql语句;( insert/delete/update);
end
删除
drop trigger 触发器名;