目录
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作(CRUD)。
1、持久化存储数据的。其实数据库就是一个文件系统 。
2、方便存储和管理数据、存储数据有一定的格式、行和列的格式
3、 使用了统一的方式操作数据库、使用图形界面的形式查看数据、使用sql语言进行查看或管理数据
数据库分为关系型数据库和非关系型数据库,关系型数据库就是我们平常见到的二维表,就是典型的关系型数据库,非关系型数据库存放的数据没有什么联系,所以存储获取效率比较高,一般用于做缓存数据的Redis数据库就是这样的特点。
如下图,就是数据库分类汇总

本地登录
mysql -u用户名 -p密码 显示登录(密码会被显示出来)
mysql -u用户名 -p 隐式登录(不会显示密码 密码会被*替代 安全性高)
远程连接(指定ip登录)
mysql -h主机地址 -u用户名 -p密码
4.2、MySQL的退出
三种方式:
exit或quit,或者直接点击DOS窗口的×号。
结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。 SQL是一套标准,所有的数据库厂商都实现了此标准;但是各自厂商在此标准上增加了特有的语句,这部分内容我们称为方言。
1、SQL语句可以单行或多行书写,以分号结尾
- select * from stu;
- select
- *
- FROM
- stu;
2、可使用空格和缩进来增强语句的可读性。
3、MySQL 数据库的 SQL 语句不区分大小写(仅此于win系统),关键字建议使用大写,库名 表名 字段 别名 建议写小写,关键字建议大写: SHOW DATABASES CREATE。
4、3种注释
单行注释: -- 注释内容(这种方式是通用的) 或 # 注释内容(mysql 特有)
多行注释: /* 注释 */
| 分类 | 说明 |
|---|---|
| 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 等 |
| TCL(Transaction Control Language) 事务控制语言 | 用于控制数据库的事务操作,关键字; commit,savepoint,rollback等 |
创建数据库
create database 数据库名;
创建数据库,并指定字符集
create database 数据库名 character set 字符集名;
查询所有数据库名称
show databases;
查询某个数据库的字符集,查询某个数据库的创建语句及字符集
show create database 数据库名;
修改数据库的字符集
alter database 数据库名 character set 字符集名;
删除数据库
drop database 数据库名;
查询当前正在使用的数据库名
select database();
使用数据库/进入数据库
use 数据库名;
| 数据类型 | 说明 |
|---|---|
| int | 整数类型,例如 : age |
| double | 小数类型,例如 : score double(5,2) 111.11 |
| date | 日期,只包含年月日,yyyy-MM-dd |
| datetime | 日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss |
| timestamp | 时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值 |
| varchar | 可变字符 name varchar(20) |
| char | 不可变字符 name varchar(20) |
varchar与char的长度区别
1、varchar的可变是指长度可变,比如定义一个name varchar(20) 但是用户输入了一个"张三"只有两个长度,剩余的18个长度会被系统自动释放,varchar的长度也自动降为2个。
2、char是固定长度,比如定义一个name char(20) 但是用户同样输入一个"张三" 剩余的18个长度不会被释放,而是用留白符补全,char的长度还是20。
通过比较两者区别,可以得出:
varchar可以自动释放多余空间,避免了存储空间的浪费,一般开发推荐使用varchar。
char固定长度,但性能好,如果定义较大长度会造成储存空间浪费,一般会用于定义性别或者身份证号等固定长度的字段。
语法
- create table 表名(
- 字段名 数据类型,
- 字段名 数据类型,
- ....
- 字段名 数据类型
- );
示例
- create table student(
- id int,
- name varchar(32),
- birthday date,
- money double(5,2)
- );
注意事项:最后一个字段定义不用写逗号,其余每一行都要写逗号。
查询某个数据库中所有的表
show tables;

查询表结构
desc 表名;

column可以省略不写。
alter table 表名 add 字段名 数据类型 约束;
默认在表中最后一列添加
alter table 表名 add column 字段名 类型 约束 默认值;
添加为第一行
alter table 表名 add column 字段名 类型 约束 默认值 first;
添加到指定字段之后
alter table 表名 add column 字段名 类型 约束 默认值 after 字段名;
实例
alter table student add height double(4,1);
alter table 表名 modify 列名 新类型;
实例
alter table student modify height int;
alter table 表名 change 旧列名 新列名 新类型;
实例
alter table student change height width double(4,1);
alter table 表名 drop 列名;
实例
alter table student drop width;
show create table 表名;
alter table 表名 charset 字符集名;
实例
alter table student charset gbk;
rename table 旧表名 to 新表名
实例
rename table student to teacher
alter table 表名 drop column 字段名;
drop table 表名;
drop table if exists 表名;
约束:规定,限制。限制表中列的内容。需要满足一定的规则。数据库中的约束:限制列的内容。
意义:保证数据的有效性和完整性。可以确保数据库满足业务规则。
| 约束 | 说明 |
|---|---|
| primary key | 主键约束:非空且唯一 |
| not null | 非空约束 : 某一列的值不能为空 |
| unique | 唯一约束 : 某一列的值不能重复,但可以为空 |
| auto_increment | 自增器,每一次+1 |
| foreign key | 外键约束 |
限定当前字段中存放的值 非空且唯一,该约束,一张表只能存在一个。
说明:constraint 约束名 可以省略不写,这里只是给约束起名字,不影响约束创建。
列级约束(限定一个字段下的内容,声明字段时,在字段之后使用)
- create table 表名(
- 字段 类型 primary key,
- ....
- 字段 类型
- );
表级约束
- create table 表名(
- 字段 类型,
- 字段 类型,
- .....
- 字段 类型,
- constraint 约束名 primary key(字段)
- );
组合唯一
- create table 表名(
- 字段 类型,
- 字段 类型,
- ....
- 字段 类型,
- constraint 约束名 primary key(字段1,字段2)
- );
限定字段中不能存入空值 not null
- create table 表名(
- 字段 类型 not null,
- 字段 类型 not null,
- ....
- 字段 类型
- );
限定字段中不能存入重复值,不包含null
列级约束
- create table 表名(
- 字段名 类型 unique,
- 字段名 类型 unique,
- ....
- 字段名 类型
- );
表级约束
- create table 表名(
- 字段 类型,
- 字段 类型,
- .....
- 字段 类型,
- constraint 约束名 unique(字段),
- constraint 约束名 unique(字段)
- );
组合唯一
- create table 表名(
- 字段 类型,
- 字段 类型,
- ....
- 字段 类型,
- constraint 约束名 unique(字段1,字段2)
- );
建立表与表之间的关系,限定从表中的外键字段的值只能依赖主表中的关联字段设置。
注意事项
1、添加数据时 必须先添加主表信息,后添加从表信息
2、删除数据时,必须先删除从表信息,再删除主表信息
3、外键字段的数据类型必须与主表关联字段类型一致
4、只能关联主表中的主键字段或被唯一约束的字段
列级约束(MySQL中失效)
- create table 表名(
-
- 字段 类型 references 主表名(字段),
- ......
- 字段 类型
-
- );
表级约束
- create table 表名(
- 字段 类型,
- .........
- 字段 类型,
- constraint 约束名 foreign key(字段),
- references 主表名(字段)
- );
组合外键
- create table 表名(
- 字段 类型,
- .........
- 字段 类型,
- constraint 约束名 foreign key(字段1,字段2),
- references 主表名(字段1,字段2)
- );
给字段提供筛选条件。在mysql失效
列级约束
- create table 表名(
- 字段 类型 check(字段条件),
- 字段 类型 check(字段条件and/or字段条件)
-
- );
实例
- create table student(
- id int,
- name varchar(20),
- sex char(1) check(sex='男' or sex='女')
- );
表级约束
- create table 表名(
- 字段 类型 ,
- 字段 类型 ,
- ....
- 字段 类型,
- constraint 约束名 check(字段条件)
- );
组合约束
- create table 表名(
- 字段 类型 ,
- 字段 类型 ,
- ....
- 字段 类型,
- constraint 约束名 check(字段条件1 and 字段条件2 or 字段条件3)
- );
产生一个每次增加1的序列
注意
1、自增长一张表中只能设置一个。
2、自增长只能设置在主键约束或者唯 一约束字段上。
3、该序列一旦使用会持续往后增长,不会自动回到之前的序号。
- create table 表名(
- 字段 类型 primary key auto_increment,
- .......
- 字段 类型
- );
未给字段输入值时,使用默认值填充
- create table 表名(
- 字段 类型 default 值,
- 字段 类型 default 值,
- .....
- 字段 类型
- );
注意: 默认值必须与字段类型一致。
alter table 表名 add constraint 约束名 primary key(字段名);
alter table 表名 modify 字段名 类型 not null;
alter table 表名 add constraint 约束名 unique(字段名);
alter table 表名 add constraint 约束名 foreign key(字段名) references 主表名(字段名);
删除表中的主键约束
alter table 表名 drop primary key;
删除表中的唯一约束
alter table 表名 drop index 约束名;
删除非空约束
alter table 表名 modify 字段名 类型 null;
删除外键约束
alter table 表名 drop foreign key 约束名;
查询字段约束的详细信息
select * from information_schema.table_constraints where table_name='表名';
全字段,单行数据添加
insert into 表名 value(值1,值2,...值n);
注意:值的个数、值的顺序、值的类型必须与表中的字段一致,如果某个字段不需要添加值,则以null占位。
部分字段添加数据
insert into 表名(字段名,字段名) value(值1,值2);
注意:值的个数、值的顺序、值的类型 必须与表名后指定的字段一致。
多行数据添加
- insert into 表名 values(值1,....值n),
- (值1...值n),
- ....
- (值1...值n);
复制添加
insert into 表名 select 字段,....字段 from 表名;
注意事项:
1、查询的字段个数、字段类型、字段顺序要与表中字段一一对应。
2、不能违反添加数据的表中的约束条件。
对指定字段下的所有值进行修改
update 表名 set 字段名1=值,字段2=值;
修改指定行的信息
update 表名 set 字段名=值 where 条件;
清空表中数据,可通过 rollback 找回。
delete from 表名;
截断表,不可通过rollback找回,删除数据的速度特别快。
truncate table 表名;
删除部分数据
delete from 表名 where 条件;
查询所有字段
select * from 表名;
查询部分字段
select 字段1,.... 字段n from 表名;
去重查询(distinct)
select distinct 字段 from 表名;
排序查询(order by),默认为升序排序
select * from 表名 order by 字段名;
降序排序 desc
select * from 表名 order by 字段名 desc;
多字段排序
select * from 表名 order by 字段1,字段2...字段n;
注意:
1、多字段排序时,第一个字段中重复的内容再根据第二个字段排序,第二个字段如果依然有重复,再根据后续字段进行排序。
2、多字段排序时如果每个字段都需要进行降序排序,则每个字段后都需要 desc
单条件查询
1、比较运算符进行条件设置
| 条件判断 | 说明 |
|---|---|
| = | 恒等 |
| != | 非等 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| where 字段>值 | 字段大于判断 |
| where 字段<值 | 字段小于判断 |
2、betweent and 范围查询
select * from 表名 where 字段 between 值 and 值;
等同于
select * from 表名 where 字段>=值 and 字段<=值;
3、空值查询和非空值查询
空值查询
select * from 表名 where 字段 is null;
非空查询
select * from 表名 where 字段 is not null;
注意:
0、"null"、“NULL” 都不是 null
4、模糊查询 like
配合通配符使用 %或_ ,%:任意长度任意字符。 _: 匹配单个任意字符。
select * from 表名 where 字段 like “关键词%”;
5、包含查询 in 和 not in
字段的值只要符合()中的任意一个值即成立。
in
select * from 表名 where 字段 in (值1,值2,....值n);
等同于
select * from 表名 where 字段 =值1 or 字段=值2 or....字段=值n;
not in
select * from 表名 where 字段 not in (值1,值2,....值n);
等同于
select * from 表名 where 字段 !=值1 and 字段!=值2 and ....字段!=值n;
多条件查询
1、分组查询(group by)
select 分组字段 from 表名 group by 分组字段;
进行分组筛选
select 分组字段 from 表名 group by 分组字段 having 条件;
having 之后的条件只能通过分组字段或聚合函数进行设置,可以在 group by 之前写 where 条件查询,但是含义不同。
2、聚合函数查询
统计数量count(*),求字段中的最大值max(字段名),求字段中的最小值min(字段名),求字段中值的和sum(字段名),求平均值avg (字段名),通常,聚合函数和聚合函数一起使用,或和分组字段一起使用。
3、常用函数查询
1、字符串函数
获取字符串长度
char_length(字段名或字符串)拼接字符串
concat()用来进行字符串拼接
concat(字符串1,字符串2...,字符串n)注意:在mysql中+号不能拼接,字符串中如果为整数,那么会自动转换为整数类型。
截取字符串
substring(字符串或字段名,起始位置,截取长度);
起始位置是从1开始。替换内容
replace(字符串,原有内容,新内容)字符大写形式
upper(字符串)字符小写形式
lower(字符串)把日期字符串解析为日期
str to date ("日期字符串","格式");
2、日期函数
获取系统日期
now()把日期按照指定格式,转换为字符串
date_format(日期,"格式");%Y 四位年
%y 两位年
%m 月 2位数
%c 月
%d 日
%h 时
%i 分
%s 秒
求两个日期的相差天数
datediff(日期1,日期2);
日期加减
adddate(日期,interval 相加数量 类型);
adddate(日期,interval 2 DAY);
注意:减日期就是把天数改为负数
3、数学函数
向上取整
ceiling(数字)向下取整
floor(数字)四舍五入取整
round(数字)求次幂
pow(数字,次方)
平方根
SQRT(数字)
4、别名查询
1、字段别名
给查询结果中的内容指定一个新的字段名称
select 字段 as 别名,字段 as 别名 from 表名;
as 使用在 where 之前,不能用于 where 之后,可以省略,可以使用在 order by 之后。
2、表别名
多表查询时,替代表名,表名 as 别名,as 可以省略,在 where 之后可以使用。