什么是MySQL数据库
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
以上是百度概念,对于我们来说,MySQL的强大之处在于他是开源的。
在MySQL中存储的是一个个数据库,数据库中存储的是一个个表,表中存储的称为字段,我们所存储的最近本的数据被存储在表中,称为数据。对应的类别顺应一个个字段,例如表格的抬头和列中的数据。因此,在MySQL中也对用着有着四层自上及下的操作关键字。
MySQL数据库的操作基础
1.操作数据库(database)
# 查看所有的数据库
show databases;
# 选择一个数据库
use 数据库名;
# 查看当前所在的数据库
select database();
# 创建数据库
create database 数据库名;
# 删除数据库
drop database 数据库名;
2.操作表(table)
在我们对表操作之前,需要先进入数据库,然后所有的表操作都是在这个数据库内部发生的
# 查看表
show tables;
# 创建表
create table 表名(
field 数据类型 [约束],
field...
);
# 例如 创建部门表
create table t_depart(
dno int,
dname varchar(255),
loc varchar(255)
);
# 查看表结构
desc 表名;
# 删除表
drop table 表名;
# 修改表名
rename table 旧表名 to 新表名;
3.操作表字段
# 添加字段
alter table 表名 add field 数据类型 [约束];
alter table depart add departphone varchar(11);
# 修改字段数据类型
alter table 表名 modify field 数据类型 [约束];
alter table depart modify departphone char(11);
# 修改字段名
alter table 表名 change 老字段名 新字段名 数据类型;
alter table depart change departphone phone char(11);
# 删除指定字段
alter table drop [column] field;
alter table 表名 drop phone;
4.操作数据
》》》》四个大字,增删改查!《《《《
4.1添加数据
-
语法一: insert into 表名 values(值,…); 值的顺序与类型要和创建表时给定的字段顺序及类型保持一致。
-
语法二: insert into 表名(filed,…) values(值,…); 值的顺序与类型要和前面指定的字段的顺序及类型保持一致。
-
复数添加:以上两种语法点差别只在于存储数据时和字段的对应关系。如果想要一次存储多个数据,只需要在()后面继续添加(值,…)即可
4.2修改数据
修改数据时需要加入条件,否则修改的是字段对应的整列的值。
- update 表名 set 字段=数据,字段=数据,… where 条件;
4.3删除数据
在删除数据时要注意,如果没有指定条件的话,会将表中的数据清空
- 删除:delete from 表名 where 条件
- 清空:truncate table 表名;
4.4 查询数据
-
通配符:select * from 表名;
-
指定字段:select 字段,…,… from 表名;
注意 :* 代表通配,需要先去表中查看表都有哪些字段,然后在匹配对应的字段信息。直接使用字段名,则是直接去表中匹配对应的字段。所以*会影响性能,开发要求不能使用通配符。
5.MySQL关键字
5.1排序
关键词:order by / desc(降序) asc(升序默认的)
select * from 表名 order by 字段 asc,字段 desc;
排序可以根据一个或者多个字段进行,优先级根据输入顺序呈现。
5.2运算符
5.3连接符
- 非空查询(is null):
delete from 表名 where 字段 is null;
5.4 in/not in
需求:查询指定部门的员工信息
select * from 表名 where 字段 in(字段对应的值);
not in相同。
5.5 聚合函数
行求和(如果列的值存在null,结果也是null,此时可以使用ifnull()进行运算时默认值的设置)
select 字段1 + 字段2 from 表名;
# ifnull(arg0,arg1) arg0代表可能为null的列,arg1代表如果为空要进行代替的值
select 字段1 + ifnull(字段2,0) from 表名;
求总行数(count())
# 需求:求总行数 *代表以行数最多的结果为导向
select count(*) from 表名;
# count也可以指定列,如果列中有null值,则不计入总数
select count(字段) from 表名;
此处不推荐使用* ,理由同上述。
5.6 分组(group by)
select 字段,count(字段)from 表名 group by 字段having count(字段)条件;
having和where有什么区别?
1.where是直接跟在表的后面的条件,having是跟在group by后面的条件
2.having的使用需要结合group by,group by在进行分组的时候是很耗性能的
5.7 别名
表名 as 自取名字 ;
可以简化as不写用空格隔开
表名 自取;
这里自取名字只能用于此次调用,不会改变原有字段的内容。
5.8 分页(limit)
select * from 表名 limit 起始下标,每页显示多少;
# 下标从0开始
6.约束
约束就是给字段添加对应的规则,用户在进行数据的操作时必须要符合对应的规则,才能进行操作,可以有效的保证数据的安全性
- 建议每张表都要有一个主键,因为其他的字段中的数据可能存在重复的,就没有办法区分数据,所以主键的存在就是一个唯一标识
- 一般用户(程序员)会给每张表都设置一个id字段,作为主键,该字段如果是数字类型,为了方便管理,可以让其自增长(auto_increment)
alter table 表名 modify 字段 int auto_increment;
建立主从(在从表中创立外键从属于主表)
alter table 表名 add constraint 约束名 foreign key(当前从表中约束的字段) references 主表表名(要约束的字段名);
-
1.主表中作为外键使用的字段要求一定是非空且唯一的
-
2.如果此时要删除主表中的数据,前提是该外键字段的值在从表中没有被使用