创建
创建数据库 判断是否存在
Create database if not exists db1
Create database db3 character set gbk(指定字符集)
创建db4数据库,判断是否存在并指定字符集为gbk
Create database if not exists db4 character set gbk
DDL数据库
修改:
(修改数据库字符集)
Alter database 数据库名称 character set 字符集名称
删除
删除数据库
Drop database 数据库名称
Drop database if exists db3
查询
正在使用的
Select database();
Use 数据库名称
表操作
Show tables (查询表名称)
Desc 表明(查询表结构)
创建表
Create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…
列名n 数据类型n (最后一列不加“,”)
);
复制表:
Create table 表名 like 被复制的表名
删除:
Drop table 表名
(可以添加判断) drop table if exists 表名
修改:
修改表名: alter table 表名 rename to 新的表名
修改表的字符集:show create table stu(先查看) alter table 表名 character set 字符集名称
添加一列:alter table 表名 add 列名 数据类型
修改列名 : alter table 表名 change 列名 新列名 新数据类型
Alter table 表名 modify 列名 新数据类型
删除列:alter table 表名 drop 列名
DML(增删改表中数据)
添加数据:insert into 表名(列名1,列名2,… 列名n) values(值1,值2,…值n)
列名和值要一一对应
如果表名后不添加列名 给所有添加
除了数据类型 其他要用“”(单双都ok)
删除数据:delete from 表名 【where 条件】
注意:
如果不加条件则删除表中所有记录,
若要删除所有记录建议使用(truncate table 表名—删除表,在创建一个一摸一样的空表)
修改数据:update 表名 set 列名1 = 值1,列名2=值2,……【where 条件】
注意:
如果不加条件则会全部修改
DQL(查询)
Select * from 表名
排序查询:
*语法:order by 子句
Order by 排序字段 排序方式1
*排序方式 asc(默认升序) desc(降序)
多个排序条件时 只有当第一个一样时用第二个
聚合函数:将一列数据作为一个整体,进行纵向的计算
count 计算个数 1.一般选择非空的列(主键) 2.count(*)
max:最大值 例如:select max(math) from stu;
min:最小值
sum :和 select sum(math) from stu;
avg :平均值 例如: select avg(math) from stu;
*注意:聚合函数的计算会排除null值
解决方案:1.选择不包含非空的列计算 2.IFNULL函数
例如:
Select count(name)from student;
(IFNULL(ENGLISH,0))
分组查询:
- 语法:group by
注意:
分组之后查询的字段:
分组字段,聚合函数
Where和having的区别?
Where在分组之前进行限定,若不满足条件,则不参与分组。Having在分组之后进行限定,如果不满足结果,则不会被查询出来
Where后不可以跟聚合函数,having可以进行聚合函数的判断
Eg: 按性别分组查平均分
Select sex, avg(math) from stu group by sex;
按性别分组查平均分 人数
Select sex, avg(math),count(id) from stu group by sex;
按性别分组查平均分 人数 ,要求分数低于70的不参与计算
Select sex, avg(math),count(id) from stu where math >70 group by sex;
按性别分组查平均分 人数 ,要求分数低于70的不参与计算,分组之后人数要大于2
Select sex, avg(math),count(id) from stu where math >70 group by sex
having count(id)>2;
可以在聚合函数后取别名
分页查询:
语法:limit 开始的索引,每页查询的条数;
公式:开始的索引-(当前的页码 - 1)*每页显示的条数
Eg:每页显示三条记录
Select * from student limit 0,3; --第一页 123
Select * from student limit 3,3; --第2页
Select * from student limit 6,3; --第3页 ((3-1)*3=6 )
查询:
语法:
select
字段列表
From
表名列表
Where
条件列表
Group by
分组字段
Having
分组之后的条件限定
Order by
排序
Limit
分页
基础查询:
-
多个字段的查询
-
去除重复(distinct)
Select distinct address from student; -
计算列
Ifnull(表达式1,表达式2)
1,那个字段需要判断是否为null 2.为替换值
SELECT NAME,math,english,math + IFNULL(english,0) FROM student; -
起别名
SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student;
条件查询:
- where子句后跟条件
模糊查询:(like)
占位符 :
:单个任意字符
%:多个任意字符
SELECT * FROM student WHERE NAME LIKE ‘%德%’; (包含德的)
SELECT * FROM student WHERE NAME LIKE ‘马%’; (第一个马)
SELECT * FROM student WHERE NAME LIKE '化%’;(第二个化)
SELECT * FROM student WHERE NAME LIKE '_’;(三个字的)
约束:
对表中的数据进行限定,保证数据的正确性、有效性、完整性
分类:
主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
非空约束:
创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL
);
添加约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
删除约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20);
唯一约束:
CREATE TABLE stu(
id INT,
phone_number VARCHAR(20) UNIQUE
);
MySQL中的唯一 可以有多个null
删除唯一约束(drop index)
Alter table stu drop index phone_number;
创建表之后添加唯一约束:
Alter table stu modify phone_number varchar(20) unique;
主键约束:
含义:非空且唯一; 一张表只有一个
主键就是表中记录的唯一标识
创建表时添加主键
Create table stu(
Id int primary key,
Name varchar(20)
);
删除主键:
Alter table stu drop primary key;
添加主键
Alter table stu modify id int primary key;
自动增长
概念:如果某一列时数值类型的,使用auto_increment 可以来完成值的自动增长
Eg:
Create table stu(
Id int primary key auto_increment,
Name varchar(20)
);
删除自动增长:
Alter table stu modify id int;
添加自动增长:
Alter table stu modify id int auto_increment;
外键约束:foreign key,让表与表产生关系,从而保证数据的正确性
在创建表时可以添加外键
语法:
Create table 表名(
….
外键列
Constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称)
);
删除外键:
Alter table 表名 drop foreign key 外键名;
创建表之后,添加外键
Alter table 表名 add Constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称);
级联操作:
添加级联操作
语法:Alter table 表名 add Constraint 外键名称
foreign key 外键列名称 references 主表名称(主表列名称)on update cascade on delete cascade;
级联更新:on update cascade
级联删除:on delete cascade
多表之间的关系
一对一:
一对多(多对一):
多对多:
实现关系:
(一对多)实现方式:在多的一方建立外键,指向一的一方的主键
(多对多)实现方式:需要借助第三张表。中间表至少包含两个字段,这两个字段作为第三
张表的外键,分别指向两张表的主键。
(一对一)实现方式:可以在任意一方添加唯一外键指向另一方的主键
数据库设计的范式
1NF:每一列都是不可分割的原子数据项
2NF:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。(消除部份依赖)
几个概念:
函数依赖:A——>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A。
完全函数依赖:A——>B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组的值。
部分函数依赖:A——>B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组的某一些值即可。
传递函数依赖:A——>B,B——>C,如果通过A属性(属性组)的值,可以确定唯一B属性的值,再通过B属性(属性组)的值,可以确定唯一C属性的值,则称C传递函数依赖于A。
码:如果一个属性或属性组在一张表中,被其它所有的属性依赖,则称为该表的码。
*主属性:码属性组中的所有属性
3NF:在第二范式基础上消除传递依赖
数据库备份和还原:
- 命令行:
备份语法:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:
登陆
创建
使用
执行文件 source 文件路径 - 图形化工具;