数据库
1、数据库:
- 存储数据的仓库,数据是有组织的进行存储
- 英文:DataBase,简称DB
2、数据库管理系(MySQL)
-
管理数据库的大型软件
-
英文:DataBase Management System, 简称DBMS
3、SQL (标准)
- 英文:Structured Query Language,简称SQL,结构化查询语言
- 操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准(关系型数据库:oracle,MySQL,SQL serve等)
- (关系型数据库:是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的二维表组成的数据库。)
- 优点:
1、都是使用表结构,格式一致,易于维护;
2、使用通用的SQL语言操作,使用方便,可用于复杂查询;
3、数据存储在磁盘中,安全。
MySQL
1、SQL语句通用语法
1、SQL语句可以单行或多行书写,以分号结尾;
2、MySQL数据库的SQL语句不区分大小写,关键字建议大写;
3、注释
3.1 单行注释: – 注释内容(注意–和注释内容间一定有空格) 或 #注释内容(MySQL特有)
3.2 多行注释: /* 注释 */
2、SQL分类
- DDL(Data Definition Language)操作数据库,表等
- DML(Data Manipulation Language)对表中数据进行增删改
- DQL(Data Query Language)对表中数据进行查询
- DCL(Data Control Language)对数据库进行权限控制
DDL-- 操作数据库(不严格区分大小写)
1、查询
SHOW DATABASES(create database);
2、创建
- 创建数据库
create database 数据库名称;
- 创建数据库(判断,如果不存在则创建)
create database if not exists 数据库名称;
3、删除
- 删除数据库
drop database 数据库名称;
- 删除数据库(判断,如果存在则删除)
drop datadase if exists 数据库名称;
4、使用数据库
- 查看当期使用的数据库
select database();
- 使用数据库
use 数据库名称;
DDL-- 操作表
- 创建(Create)
create table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名3 数据类型n #注意:最后一行末尾,不能加逗号
);
- 查询(Retrieve)
1、查询当前数据库下所有表名称
show tables;
2、查询表结构
desc 表名称;
- 修改(Update)
1、修改表名:
alter table 表名 rename to 新的表名;
2、添加一列:
alter table 表名 add 列名 数据类型;
3、修改数据类型:
alter table 表名 modify 列名 新数据类型 [not null等约束];
4、修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;
5、删除列:
alter table 表名 drop 列名;
- 删除(Delete)
1、drop table 表名;
2、drop table if exists 表名;
SQL里面的数据类型
DML–操作表中数据(增删改操作)
- 添加(insert):
1、给指定列添加数据
insert into 表名(列名1, 列名2, …) values (值1,值2,…);
2、给全部列添加数据
insert into 表名 values(值1,值2,…);
3、批量添加数据
insert into 表名(列名1,列名2,…) values(值1,值2,…), (值1,值2,…), (值1,值2,…) …;
insert into 表名 values(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
- 修改(update):
1、修改表数据
update 表名 set 列名1=值1,列名2=值2, …[where 条件] ;
(注意:修改语句中如果不加条件,则将所有数据都修改!)
- 删除(delete):
1、删除数据
delete from 表名 [where 条件];([] 不用写,仅代表where条件可写不写);
(注意:删除语句中如果不加条件,则将所有数据都修改!)
DQL–操作表中数据(查询表*)
查询语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组后条件
order by
排序字段
limit
分页限定
- 基础查询
1、查询多个字段
select 字段列表 from 表名;
select * from 表名;-- 查询所有数据(学习期间可以用*,但是以后练习要写全部字段)
2、去除重复记录
select distinct 字段列表 from 表名;(注意:distinct 对应的字段列表数据完全相同才会去除,若两数据其他字段都相同,有一个字段数据不同,不会去重)
distinct后面若是接了连续好几个字段的话,会将这几个字段进行组合,然后去重只是针对组合间进行去重,不再是对单个字段进行去重
相同才会去重:
去重并没有删掉重复数据。
3、起别名
as – as也可省略
select name 姓名, sno (as) 学号
from student (as) stus
where stus.name = ‘李华’;
- 条件查询(where)
- 分组查询(group by)
分完组后要进行聚合操作,不然分组没意义。
count 统计非空,不会将null统计算进去
count ()里面通常写1、主键(非空且唯一);2、*;
- 排序查询(order by)
select 字段列表 from 表名 order by 排序字段名1[排序方式1], 排序字段名2[排序方式2] …;
排序方式:
1、asc: 升序排列(默认值)
2、desc: 降序排列
(注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序, 多字段排序时,第一条件写前头,后续字段分别按照顺序写在后面,并且用’,'隔开, 例如order by score desc, age asc;)
- 分页查询(limit)
limit 起始索引, 查询条目数
or
limit x offset y: 扔掉前面y个,然后去x个,相当于limt y, x; (从下标0开始,所以相当于从第y+1个开始,一直取x个)
3、约束
约束是作用于表中列上的规则,用于限制加入表的数据
约束的存在保证了数据库中数据的正确性、有效性和完整性
-
非空约束
: not null -
唯一约束
: unique -
主键约束
:- primary key
-
默认约束
:- default 默认值
- 只有当给出的values(…)中并没有给定字段值时才生效,对于给定null,null也是一个值,会显示null,而不是默认值,仅当未给出
-
auto_increment
- 当该列为null时,会自增长。
- 自增长必须所列是数字类型且唯一约束并且在非空约束下省略关键字的赋值
-
外键约束 : forigen key
-
添加约束
- 在创建表时,表最后加上:constraint 外键名(删除外键时用得到) foreign key(外键列名) reference 主表(主表列名)
-
建完表后 添加外键约束: alter table 表名 add constraint 外键名称 foreign key(外键字段名称) reference 主表名称(主表列名称);
-
删除约束
: alter table 表名 drop constraint 外键名称;
-
数据库设计
一对多
实现方式:在
多
的一方建立外键
,指向一
的一方的主键, 因为是多的一方,所以该外键没有UNIQUE要求
一对一
一对一关系实现:通过外键实现(在任意一方加入任意外键,关联另一方主键,并且设置外键为唯一,即unique)
多对多
总结
多表查询
内连接
[inner] 表示in ner可以省略
外连接
子查询
事务
事务的四大特征(A、C、I、D)
mysql手动提交事务
在mysql中,事务(查询事务、修改事务)都是自动提交的,即不需要commit就可以将修改的数据保存到数据库中。
可以通过:select @@autocommit; 来进行查询(为1则是自动提交事务,为0则是手动提交事务)
可以通过:set @@autocommit = 0;来进行设置事务提交方式为手动提交
可以在另外一个查询中进行验证
mysql注意事项:
-
mysql不支持检查约束,但可以通过在sql语句中对数据进行检查。
-
mysql中事务(查询事务、修改事务等)是自动提交的,没必要commit提交,可以通过set @@autocommit = 0来手动提交。但是在oracle中事务都是手动提交的,写完语句后需要commit才能在数据库中生效