数据库的基本概念
数据库的英文单词DataBase,简称DB
什么是数据库
用于存储和管理数据的仓库
什么是SQL
SQL全称(Structured Query Language)结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据操作的方式存在不一样的地方,称为”方言”
数据库的特点
- 持久化存储数据。其实数据库就是一个文件系统
- 方便存储和管理数据
- 使用了统一的方式操作数据库 – SQL
常见的数据库软件
oracle
- mysql
开始
MySQL服务启动
- 手动
- cmd –> service.msc打开服务窗口
- 使用管理员打开cmd
- net start mysql
- net stop mysql
MySQL的登录&退出
登录
$ mysql -u 用户民 -p 密码
$ mysql -hip 地址 -u 用户名 -p 连接目标的密码
$ mysql --host=ip 地址 --user= 用户名 --password= 连接目标的密码
退出
exit
quit
常见的数据类型
int
:整数类型double
:小数类型varchar
:字符串类型date
:日期,yyyy-MM-dddatetime
:日期,yyyy-MM-dd HH:mm:sstimestamp
:时间戳类型,如果将来不给字段赋值,则默认使用当前时间来赋值
SQL基本语法
- SQL语法可以单行或多行书写,以分号结尾
- 可使用空格和缩进来增强语句的可读性
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 3种注释
- 单行注释:
-- 注释
or# 注释
- 多行注释:
/* 注释 */
- 单行注释:
SQL分类
DDL(Data Definition Language)数据定义语言用来定义数据库对象:数据库,表,列表。关键字:create,drop,alter等
DML(Data Manipulation Language)数据操作语言用来对数据库中表的数据进行增删改。关键字:insert,delete,update等
DQL(Data Query Language)数据查询语言用来查询数据库中表的记录。关键字:select,where等
DCL(Data Control Language)数据库控制语言(了解)用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等
DDL(操作数据库和表)
DDL:数据库和表的操作
操作数据库
Create
create database 数据库的名字
:创建数据库
create database if not exists 数据库的名字
:判断数据库是否存在,不存在则创建,存在则不创建
create database 数据库名字 character set 字符集名字
:创建数据库并指定字符集
合并:
create database if not exists 数据库名字 character set 字符集
Retrieve
show databases;
:查询所有数据库的名称
show create database 数据库的名称
:查询某个数据库的字符集:查询某个数据库的创建语句
Update
alter database 数据库名字 character set 字符集名字
:修改数据库的字符集
Delete
drop database 数据库名称
:删除数据库
drop database if exists 数据库名称
:判断数据库存在,存在则删除,不存在则不删除
使用数据库
use 数据库名字
:使用数据库
select database()
:查询当前正在使用的数据库名称
操作表
Create
create table 表名(列名 数据类型);
创建一列数据
1 | create table 表名( |
1 | create table school( |
- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
- ENGINE 设置存储引擎,CHARSET 设置编码
Retrieve
show tables
:查询某个数据库中所有的表名称
desc 表名
:查询表结构
Update
alter table 表名 rename to 新的表名
:修改表名
alter table 表名 character set 字符集
:修改列表字符集
alter table 表名 add 列名 数据类型
:添加一列
alter table 表名 change 列名 新列别 新数据类型
:修改列名称 类型
alter table 表名 modify 列名 新数据类型
:修改列名称 类型
alter table 表名 drop 列名
:删除列
Delete
drop table 表名
drop table if exists 表名
DML(数据的增删查改)
DML:增删改表中数据
添加数据
insert into 表名(列名1,...,列名n) values(数据1,...,数据n)
:给对应的列名添加数据
insert into 表名 values (数据1,...,数据n)
:给所有的列添加数据
注意:
列名和值要一一对应
如果表名后,不定义列名,则默认添加所有数据
出了数字类型和关键字(不如:null)以外都要加引号
删除数据
delete from 表名 [where 条件]
:删除符合条件的数据
truncate table 表名
:先删除表,再创建一个一摸一样的空表
注意:
- 如果不添加条件,则删除表中所有的记录
- 如果要删除所有的记录
- 第一种的性能低,由多少条数据就执行几次
- 第二种的性能高,就删除和创建
修改数据
update 表名 set 列名1=值1,...,列名n=值n [where 条件]
:修改一个符合条件的数据
注意:
- 如果不加任何条件,则会将表中所有记录全部修改
DQL(查询数据)
DQL:查询表中的记录
基础查询
查询多个字段:
select * from 表名
:查询表中的所有数据select 字段1,,,,,字段n from 表名
:查询表中指定的字段
去除重复的结果集:
distinct
计算列:
select number1 + nunmber2 from 表名
:将number1/2相加ifnull(参数1,参数2)
参数1:参数1是否为null
参数2:如果参数1为null则用参数2代替
起别名:
select english as 英语 from 表名
:给English字段用英语来代替,as
可用空格来代替
条件查询:
大于 and 小于 and 等于
select * from 表名 where age > 20
:查询表中age大于20的数据select * from 表名 where age = 20
:查询表中age等于20的数据select * from 表名 where age < 20
:查询表中age小于20的数据
大于等于 and 小于等于
select * from 表名 where age >= 20
:查询表中age大于等于20的数据select * from 表名 where age <= 20
:查询表中age小于等于20的数据
并且
select * from 表名 where age > 20 && age < 30
:查询表中age大于20且小于30的数据select * from 表名 where age > 20 and age < 30
:查询表中age大于20且小于30的数据select * from 表名 where between 20 and 30
:查询表中age大于20且小于30的数据
或者
select * from 表名 where age = 20 || age = 10
:查询表中age等于20或age等于10的数据select * from 表名 where age = 20 or age = 10
:查询表中age等于20或age等于10的数据select * from 表名 where age in (20,10)
:查询表中age等于20或age等于10的数据
不等于
select * from 表名 where age != 20
:查询表中不等于20的数据select * from 表名 where age <> 20
:查询表中不等于20的数据
不等于Null
select * from 表名 where age is null
:查询表中age为null的数据select * from 表名 where age is not null
:查询表中age不为null的数据
模糊查询:
%
任意多个字符,_
任意一个字符select * from 表名 where name link "_荣_"
:查询名字中间是荣的数据select * from 表名 where name link "%荣%"
:查询名字中间里面包含荣的
排序查询
select * from 表名 order by 排序字段1 排序方式1,排序字段2 排序方式2
排序方式:
- ASC:升序,不指定默认升序
- DESC:降序
注意:
- 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
聚合函数
count:计算个数
- 注意:聚合函数会排除null的数据
- 用ifnull给他变成0
- 使用
select count(*) from 表名
不推荐使用 - count最好使用一个不为null且不重复的值
- 注意:聚合函数会排除null的数据
max:计算最大值
min:计算最小值
sum:总和
avg:平均分
select 聚合函数(列名)from 表名
分组查询
group by 分组字段
分页查询
语法:
limit 开始的索引,每页查询的条数
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
limit是Mysql的”方言”
select * from 表名 limit 0,3
:从第0个索引查看3条数据
约束
对表中的数据进行限定,保证数据的正确性,有效性和完整性
- 分类:
- 主键约束:primary key
- 非空约束:not null
- 唯一约束:nuique
- 外键约束:foreign key
非空约束
某一列的值不能未空
- 创建表时添加约束
1 | create table stu( |
- 创建表完后,添加非空约束
alter table stu modify name varchar(10) not null
- 删除name的非空约束
alter table stu modify name varchar(10)
唯一约束
某一列的值不能重复
注意:唯一约束可以有null值
创建表时添加约束
1 | create table stu( |
- 创建表后,添加唯一约束
alter table stu modify name varchar(10) unique
- 删除name的唯一约束
alter table stu drop index name
主键约束
非空且唯一
- 注意:
- 一张表只能由一个字段为主键
- 主键就是表中记录的唯一标识
- 创建表时添加约束
1 | create table sty( |
- 创建表后,添加主键
alter table stu modify id int primary key
- 删除主键
alter table stu drop primary key
自动增长
如果某一列是数值类型,使用auto_increment可以来完成自动增长
- 创建表时自动增长
1 | create table stu( |
- 创建表之后添加
alter table stu modify id int auto_increment
- 删除自动增长
alter table stu modify id int
外键约束
让表与表产生关联,从而保证数据的正确性
- 创建表时外键
1 | create table stu( |
- 创建表后添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称)
- 删除外键
alter table 表名 drop foreign key 外键名称
级联操作
- 添加级联操作
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade
- 级联跟新
on update cascade
- 级联删除
on delete cascade
数据库的设计
p40
完整语法:
1 | select |