Mysql数据库学习(一)

创建
创建数据库 判断是否存在
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))

分组查询:

  1. 语法: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
分页

基础查询:

  1. 多个字段的查询

  2. 去除重复(distinct)
    Select distinct address from student;

  3. 计算列
    Ifnull(表达式1,表达式2)
    1,那个字段需要判断是否为null 2.为替换值
    SELECT NAME,math,english,math + IFNULL(english,0) FROM student;

  4. 起别名
    SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student;

条件查询:

  1. 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:在第二范式基础上消除传递依赖

数据库备份和还原:

  1. 命令行:
    备份语法:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
    还原:
    登陆
    创建
    使用
    执行文件 source 文件路径
  2. 图形化工具;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值