数据库操作
在数据库操作中,基本操作都是围绕增删改查来操作。简称CRUD
- C Create 创建
- R Read/Retrieve 查询
- U Update 修改
- D Delete 删除
在数操作数据库时,所有的数据库语句都要以分号结束,数据库操作不区分大小写
- 创建数据库
create database 数据库名;
create database 数据库名 charset utf8;
- 显示数据库创建信息
show create database 数据库名;
- 修改数据库编码
alter database 数据库名 charset utf8;
- 显示所有数据库
show databases;
- 切换、使用数据库
use 数据库名
- 显示当前数据库
select database();
- 删除数据库
drop database 数据库名;
数据表操作
和数据库操作一样,在数据表在操作中,也是是围绕增删改查来操作。
- 关系表中元素构成
MySQL常用字段类型
- 整数类型
浮点数类型
字符串类型
时间类型
枚举类型(了解)
enum(枚举值1,枚举值2, ...)
- 查看所在数据库中所有的表
show tables;
- 创建表
create table 表名(字段1 字段类型,字段2 字段类型, ....);
- 显示创建表信息
show create table 表名;
- 增加字段
alter table 表名 add 字段名 字段类型;
- 删除字段
alter table 表名 drop 字段名;
- 修改字段的数据类型
alter table 表名 modify 字段名 字段类型;
- 修改字段的数据类型并且改名
alter table 表名 change 原字段名 新字段名 字段类型;
插入数据
- 插入所有字段数据
insert into 表名 values(值列表,...);
- 插入指定字段
指定字段顺序和列中顺序可以不同,值顺序要和指定字段顺序相同。
insert into 表名(字段1,字段2) values(值1,值2);
- 插入多条数据
insert into 表名 values(值列表, ...),(值列表, ...);
修改数据
- 更新指定字段中所有的数据
updata 表名 set 字段名=值;
- 更新指定字段中满足条件的数据
updata 表名 set 字段名=值 where 条件;
删除数据
- 删除全部数据
truncate 表名;
delete from 表名;
- 删除满足条件的数据
delete from 表名 where 条件;
添加约束
- 主键约束 (一个表中只能存在一个主键约束)
字段被设置了主键约束,同时也具有了唯一性约束和非空约束。 在字段中插入重复数据时,或不给数据时会报错。
create table 表名(字段名 字段类型 primary key,字段名 字段类型, ...);
- 自动增长 (让数字值自动累加)
create table 表名(字段名 字段类型(int) auto_incremment primary key,字段名 字段类型, ...);
- 唯一性约束
create table 表名(字段名 字段类型 unique, ...);
- 非空约束 (添加数据时必须给值)
create table 表名(字段名 字段类型 not null, ...);
- 默认约束
create table 表名(字段名 字段类型 default '默认值', ...)
- 外键约束
-- 表1
create table 表1(字段1 字段类型 primary key,字段2 字段类型,...);
-- 表2
create table 表2(字段3 字段类型 primary key auto_increment, 字名4 字段类型, 字名5 字段类型, foreign key(字段5) references 表1(字段1));
想要删除有设置外键的表,必须先删除外键所关联的表。
- 添加主键约束
alter table 表名 add constraint 约束名 primary key(字段名);
- 删除主键约束
因为一个表中最多只能有一个主键约束,所以可以直接删除
alter table 表名 drop primary key;
- 添加外键约束
alter table 表名 add constraint 外键约束名 foreign key(外键字段名) references 关联表(关联字段名);
- 删除外键约束
alter table 表名 drop foreign key 外键名;
单表查询数据
- 查询数据表中所有数据
select * from 表名;
- 查询指定字段数据
select 字段1,字段2,... from 表名;
- as 别名 (通过别名来修改显示的样式)
在给字段起别名时,可以使用 as ,也可以直接在字段后跟别名,省略 as 。
select 字段1 as 别名1,字段2 别名,... from 表名;
- 去重 (去除重复的数据)
select distinct 字段名 from 表名;
- 带条件查询 where 子句
select * from 表名 where 条件;
where条件可以使用运算符操作
- 比较运算符
- 等于: =
- 大于: >
- 大于等于: >=
- 小于: <
- 小于等于: <=
- 不等于: != 或 <>
- 逻辑运算符
- and
- or
- not
- 模糊查询
- like
- % 表示0或多个任意字符
- _ 表示一个任意字符
范围查询
in 表示在一个非连续的范围内 , 可以使用 or 实现
select * from 表名 where 字段名 in(值...);
between…and… 表示在一个连续的范围内,可以使用 and 实现
空判断
is null 判断空值
select * from 表名 where 字段名 is null;
is not null 判断非空值
select * from 表名 where 字段名 is not null
查询结果排序
排序使用 order by 子句 asc(默认) 升序 / desc 降序 语法:select * from 表名 order by 列1 asc|desc [,列2 asc|desc,…]
单字段排序
select * from 表名 order by 字段名; select * from 表名 order by 字段名 asc;
多字段排序
select * from 表名 order by 字段1 desc,字段2 asc;
分页查询
select from 表名 limit start=0,count从start开始,获取count条数据
start默认值为0
需要获取数据的前n条的时候可以直接写 limit n
聚合函数
select sum(字段),avg(字段),min(字段),max(字段),count(字段) from 表名;
- 分组
- select 分组的字段名,聚合函数… from 表名 group by 分组字段名 having 分组后的条件
- 在执行 group by 分组时,select 后只能有被分组的字段,不允许有其它字段,除非这些字段在聚合函数中
- 根据分组结果,使用group_concat()来获取分组中指定字段的集合
多表查询数据
- 普通多表数据查询
select * from 表1,表2;
这种查询方式没有任何意义。 在查询时,数据库会将表1中的数据逐条和表2中的所有数据连接,组成一条新记录。 查询的结果为 M * N 条,实际就是笛卡尔积结果。
- 加条件
select * from 表1,表2 where 条件;
- 内链接查询
- 数据库默认的连接方式就是内连接查询 , inner join 可以不显示的写出来
- 连接条件使用 on 进行指定 也可使用where
select * from 表1 inner join 表2 on 条件;
- 左连接查询
- 查询的结果为根据左表中的数据进行连接,如果右表中没有满足条件的记录,则连接空值
select * from 表1 left join 表2 on 条件;
- 右连接
- 查询的结果为根据右表中的数据进行连接,如果左表中没有满足条件的记录,则连接空值
select * from 表1 right join 表2 on 条件;
- 子查询
- 在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
select * from 表名 where 条件 运算符 (select 查询);
- 外部那个select语句则称为主查询
主查询和子查询的关系
- 子查询是嵌入到主查询中
- 子查询是辅助主查询的,要么充当条件,要么充当数据源
- 子查询是可以独立存在的语句,是一条完整的 select 语句
标量子查询
- 子查询返回的结果是一个数据(一行一列)
主查询 where 条件 比较运算符 (列子查询)
- 列级子查询
- 子查询返回的结果是一列(一列多行)
主查询 where 条件 in (列子查询)
- 行级子查询
- 子查询返回的结果是一行(一行多列)
主查询 where (字段1,2,...) = (行子查询)
数据库导入导出
- 导出数据库(终端模式下)
mysqldump -uroot -p 要导出的数据库名 > 目标文件.sql
- 导出库当中的指定表
mysqldump -uroot -p 要导出的数据库名 要导出的数据表 > 目标地址 目标文件.sql
- 导入数据库
导入数据库前需要先创建一个空数据库
- 终端模式下
mysql -uroot -p 数据库名 < 文件地址 要导入的文件.sql
- mysql模式下
source 文件地址 要导入的文件.sql
以上内容仅供参考 -_- …为作者边学习,边摘抄和总计的内容