1. 数据库的基本概念

2. MySQL数据库软件

1. 安装

2. 卸载

3. 配置

3. SQL

## 数据库的基本概念

1. 数据库的英文单词: DataBase 简称 : DB

2. 什么数据库?

* 用于存储和管理数据的仓库。

3. 数据库的特点:

1. 持久化存储数据的。其实数据库就是一个文件系统

2. 方便存储和管理数据

3. 使用了统一的方式操作数据库 -- SQL

# MySQL数据库软件

1. 安装* 参见《MySQL基础.pdf》

2. 卸载

1. 去mysql的安装目录找到my.ini文件

* 复制 datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

2. 卸载MySQL

3. 删除C:/ProgramData目录下的MySQL文件夹。

3. 配置

* MySQL服务启动

1. 手动。

2. cmd--> services.msc 打开服务的窗口

3. 使用管理员打开cmd

* net start mysql : 启动mysql的服务

* net stop mysql:关闭mysql服务

* MySQL登录

1. mysql -uroot -p密码

2. mysql -hip -uroot -p连接目标的密码

3. mysql --host=ip --user=root --password=连接目标的密码

* MySQL退出

1. exit

2. quit

* MySQL目录结构

1. MySQL安装目录:basedir="D:/develop/MySQL/"

* 配置文件 my.ini

2. MySQL数据目录:datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

* 几个概念

* 数据库:文件夹

* 表:文件

* 数据:数据

# SQL

1.什么是SQL?

Structured Query Language:结构化查询语言

其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。

2.SQL通用语法

1. SQL 语句可以单行或多行书写,以分号结尾。

2. 可使用空格和缩进来增强语句的可读性。

3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

4. 3 种注释

* 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)

* 多行注释: /* 注释 */

3. SQL分类

1) DDL(Data Definition Language)数据定义语言

用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等

2) DML(Data Manipulation Language)数据操作语言

用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等

3) DQL(Data Query Language)数据查询语言

用来查询数据库中表的记录(数据)。关键字:select, where 等

4) DCL(Data Control Language)数据控制语言(了解)

用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

## DDL:操作数据库、表

1. 操作数据库:CRUD

1. C(Create):创建

* 创建数据库:

* create database 数据库名称;

* 创建数据库,判断不存在,再创建:

* create database if not exists 数据库名称;

* 创建数据库,并指定字符集

* create database 数据库名称 character set 字符集名;

* 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk

* create database if not exists db4 character set gbk;

2. R(Retrieve):查询

* 查询所有数据库的名称:

* show databases;

* 查询某个数据库的字符集:查询某个数据库的创建语句

* show create database 数据库名称;

3. U(Update):修改

* 修改数据库的字符集

* alter database 数据库名称 character set 字符集名称;

4. D(Delete):删除

* 删除数据库

* drop database 数据库名称;

* 判断数据库存在,存在再删除

* drop database if exists 数据库名称;

5. 使用数据库

* 查询当前正在使用的数据库名称

* select database();

* 使用数据库

* use 数据库名称;

2. 操作表

1. C(Create):创建

1. 语法:

create table 表名(

列名1 数据类型1,

列名2 数据类型2,

....

列名n 数据类型n

);

* 注意:最后一列,不需要加逗号(,)

* 数据库类型:

1. int:整数类型

* age int,

2. double:小数类型

* score double(5,2)

3. date:日期,只包含年月日,yyyy-MM-dd

4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss

5. timestamp:时间错类型包含年月日时分秒 yyyy-MM-dd HH:mm:ss

* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

6. varchar:字符串

* name varchar(20):姓名最大20个字符

* zhangsan 8个字符 张三 2个字符

* 创建表

create table student(

id int,

name varchar(32),

age int ,

score double(4,1),

birthday date,

insert_time timestamp

);

* 复制表:

* create table 表名 like 被复制的表名;

2. R(Retrieve):查询

* 查询某个数据库中所有的表名称

* show tables;

* 查询表结构

desc 表名;

3. U(Update):修改

1. 修改表名

alter table 表名 rename to 新的表名;

2. 修改表的字符集

alter table 表名 character set 字符集名称;

3. 添加一列

alter table 表名 add 列名 数据类型;

4. 修改列名称 类型

alter table 表名 change 列名 新列别 新数据类型;

alter table 表名 modify 列名 新数据类型;

5. 删除列

alter table 表名 drop 列名;

4. D(Delete):删除

* drop table 表名;

* drop table if exists 表名 ;

## DML:增删改表中数据

1. 添加数据:

* 语法:

*

insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);

* 注意:

1. 列名和值要一一对应。

2. 如果表名后,不定义列名,则默认给所有列添加值

insert into 表名 values(值1,值2,...值n);

3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来

2. 删除数据:

* 语法:

* delete from 表名 [where 条件]

* 注意:

1. 如果不加条件,则删除表中所有记录。

2. 如果要删除所有记录

1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作

2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。

3. 修改数据:

* 语法:

* update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

* 注意:

1. 如果不加任何条件,则会将表中所有记录全部修改。

## DQL:查询表中的记录

* select * from 表名;

1. 语法:

select字段列表from表名列表where条件列表

group by

分组字段

having

分组之后的条件

order by

排序

limit

分页限定

2. 基础查询

1. 多个字段的查询

select 字段名1,字段名2... from 表名;

* 注意:

* 如果查询所有字段,则可以使用*来替代字段列表。

2. 去除重复:

*distinctselect distinct(sal) from emp;

3. 计算列

* 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

* ifnull(表达式1,表达式2):null参与的运算,计算结果都为null

* 表达式1:哪个字段需要判断是否为null

* 如果该字段为null后的替换值。

4. 起别名:

* as:as也可以省略

3. 条件查询

1. where子句后跟条件

2. 运算符

* > 、< 、<= 、>= 、= 、<>

* BETWEEN...AND

* IN( 集合)

* LIKE:模糊查询

* 占位符:

* _:单个任意字符

* %:多个任意字符

* IS NULL

* and 或 &&

* or 或 ||

* not 或 !

-- 查询年龄大于20岁

SELECT * FROM student WHERE age > 20;

SELECT* FROM student WHERE age >= 20;

-- 查询年龄等于20岁

SELECT * FROM student WHERE age = 20;

-- 查询年龄不等于20岁

SELECT * FROM student WHERE age != 20;

SELECT* FROM student WHERE age <> 20;

-- 查询年龄大于等于20 小于等于30

SELECT * FROM student WHERE age >= 20 && age <=30;

SELECT* FROM student WHERE age >= 20 AND age <=30;

SELECT* FROM student WHERE age BETWEEN 20 AND 30;

-- 查询年龄22岁,18岁,25岁的信息

SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25

SELECT * FROM student WHERE age IN (22,18,25);

-- 查询英语成绩为null

SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断

SELECT* FROM student WHERE english IS NULL;

-- 查询英语成绩不为null

SELECT * FROM student WHERE english IS NOT NULL;

-- 查询姓马的有哪些? like

SELECT * FROM student WHERE NAME LIKE '马%';

-- 查询姓名第二个字是化的人

SELECT * FROM student WHERE NAME LIKE "_化%";

-- 查询姓名是3个字的人

SELECT * FROM student WHERE NAME LIKE '___';

​-- 查询姓名中包含德的人

SELECT * FROM student WHERE NAME LIKE '%德%';

1. DQL:查询语句

1. 排序查询

2. 聚合函数

3. 分组查询

4. 分页查询

2. 约束

3. 多表之间的关系

4. 范式

5. 数据库的备份和还原

# DQL:查询语句

1. 排序查询

*语法:order by 子句* order by 排序字段1 排序方式1 , 排序字段2 排序方式2...

* 排序方式:

* ASC:升序,默认的。

* DESC:降序。

* 注意:

* 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。

1. count:计算个数

1. 一般选择非空的列:主键

2. count(*)

2. max:计算最大值

3. min:计算最小值

4. sum:计算和

5. avg:计算平均值

* 注意:聚合函数的计算,排除null值。

解决方案:

1. 选择不包含非空的列进行计算

2. IFNULL函数

3. 分组查询:

1. 语法:group by 分组字段;

2. 注意:

1. 分组之后查询的字段:分组字段、聚合函数

2. where 和 having 的区别?

1. where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

-- 按照性别分组。分别查询男、女同学的平均分

SELECT sex , AVG(math) FROM student GROUP BY sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数

SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;

SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math> 70 GROUP BY sex HAVING 人数 > 2;

​4. 分页查询

1. 语法:limit 开始的索引,每页查询的条数;2. 公式:开始的索引 = (当前的页码 - 1) *每页显示的条数--每页显示3条记录

SELECT* FROM student LIMIT 0,3; --第1页

SELECT* FROM student LIMIT 3,3; --第2页

SELECT* FROM student LIMIT 6,3; -- 第3页

3. limit 是一个MySQL"方言"

## 约束

* 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。

* 分类:

1. 主键约束:primary key

2. 非空约束:not null

3. 唯一约束:unique

4. 外键约束:foreign key

* 非空约束:not null,某一列的值不能为null

1. 创建表时添加约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20) NOT NULL --name为非空

);

2. 创建表完后,添加非空约束

1 ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

3. 删除name的非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20);

* 唯一约束:unique,某一列的值不能重复

1. 注意:

* 唯一约束可以有NULL值,但是只能有一条记录为null

2. 在创建表时,添加唯一约束

CREATE TABLE stu(

id INT,

phone_number VARCHAR(20) UNIQUE --手机号

);

3. 删除唯一约束

ALTER TABLE stu DROP INDEX phone_number;

4. 在表创建完后,添加唯一约束

ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

* 主键约束:primary key。

1. 注意:

1. 含义:非空且唯一

2. 一张表只能有一个字段为主键

3. 主键就是表中记录的唯一标识

2. 在创建表时,添加主键约束

create table stu(

idint primary key,--给id添加主键约束

name varchar(20)

);

3. 删除主键

-- 错误 alter table stu modify id int ;

ALTER TABLE stu DROP PRIMARY KEY;

4. 创建完表后,添加主键

ALTER TABLE stu MODIFY id INT PRIMARY KEY;

5. 自动增长:

1. 概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

2. 在创建表时,添加主键约束,并且完成主键自增长

create table stu(

id int primary key auto_increment,-- 给id添加主键约束

name varchar(20)

);

3. 删除自动增长

ALTER TABLE stu MODIFY id INT

;

4. 添加自动增长

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

* 外键约束:

foreign key,让表于表产生关系,从而保证数据的正确性。

1. 在创建表时,可以添加外键

* 语法:

create table 表名(

....

外键列

constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)

);

2. 删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

3. 创建表之后,添加外键

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

​ 4. 级联操作

1. 添加级联操作

语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称

FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;

2. 分类:

1. 级联更新:ON UPDATE CASCADE

2. 级联删除:ON DELETE CASCADE

## 数据库的设计

1. 多表之间的关系

1. 分类:

1. 一对一(了解):

* 如:人和身份证

* 分析:一个人只有一个身份证,一个身份证只能对应一个人

2. 一对多(多对一):

* 如:部门和员工

* 分析:一个部门有多个员工,一个员工只能对应一个部门

3. 多对多:

* 如:学生和课程

* 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择

2. 实现关系:

1. 一对多(多对一):

* 如:部门和员工

* 实现方式:在多的一方建立外键,指向一的一方的主键。

2. 多对多:

* 如:学生和课程

* 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

3. 一对一(了解):

* 如:人和身份证

* 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。

3. 案例

-- 创建旅游线路分类表 tab_category

-- cid 旅游线路分类主键,自动增长

-- cname 旅游线路分类名称非空,唯一,字符串 100

CREATE TABLE tab_category (

cid INT PRIMARY KEY AUTO_INCREMENT,

cname VARCHAR(100) NOT NULL UNIQUE

);

-- 创建旅游线路表 tab_route

/*

rid 旅游线路主键,自动增长

rname 旅游线路名称非空,唯一,字符串 100

price 价格

rdate 上架时间,日期类型

cid 外键,所属分类

*/

CREATE TABLE tab_route(

rid INT PRIMARY KEY AUTO_INCREMENT,

rname VARCHAR(100) NOT NULL UNIQUE,

price DOUBLE,

rdate DATE,

cid INT,

FOREIGN KEY (cid) REFERENCES tab_category(cid)

);

/*创建用户表 tab_user

uid 用户主键,自增长

username 用户名长度 100,唯一,非空

password 密码长度 30,非空

name 真实姓名长度 100

birthday 生日

sex 性别,定长字符串 1

telephone 手机号,字符串 11

email 邮箱,字符串长度 100

*/

CREATE TABLE tab_user (

uid INT PRIMARY KEY AUTO_INCREMENT,

username VARCHAR(100) UNIQUE NOT NULL,

PASSWORD VARCHAR(30) NOT NULL,

NAME VARCHAR(100),

birthday DATE,

sex CHAR(1) DEFAULT '男',

telephone VARCHAR(11),

email VARCHAR(100)

);

/*

创建收藏表 tab_favorite

rid 旅游线路 id,外键

date 收藏时间

uid 用户 id,外键

rid 和 uid 不能重复,设置复合主键,同一个用户不能收藏同一个线路两次

*/

CREATE TABLE tab_favorite (

rid INT, -- 线路id

DATE DATETIME,

uid INT, -- 用户id

-- 创建复合主键

PRIMARY KEY(rid,uid), -- 联合主键

FOREIGN KEY (rid) REFERENCES tab_route(rid),

FOREIGN KEY(uid) REFERENCES tab_user(uid)

);

2. 数据库设计的范式

* 概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

* 分类:

1. 第一范式(1NF):每一列都是不可分割的原子数据项

2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)

* 几个概念:

1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A

例如:学号-->姓名。 (学号,课程名称) --> 分数

2. 完全函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。

例如:(学号,课程名称) --> 分数

3. 部分函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。

例如:(学号,课程名称) -- > 姓名

4. 传递函数依赖:A-->B, B -- >C . 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A

例如:学号-->系名,系名-->系主任

5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码

例如:该表中码为:(学号,课程名称)

* 主属性:码属性组中的所有属性

* 非主属性:除过码属性组的属性

3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

## 数据库的备份和还原

1. 命令行:

* 语法:

* 备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径

* 还原:

1. 登录数据库

2. 创建数据库

3. 使用数据库

4. 执行文件。source 文件路径

2. 图形化工具:

·补充

mysql实现年龄大于17小于30_mysql基础相关推荐

  1. mysql计算年龄大于30并删除_还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了!...

    转译自 How To Calculate Age From Date Of Birth In MySQL- Querychat,中文转载,请注明出处. 使用SQL语句计算年龄,在事务处理和日期计算中, ...

  2. mysql大于号小于号写法

    mysql中大于号小于号的写法 < < <![CDATA[ < ]]> <= <= <![CDATA[ <= ]]> > > & ...

  3. MySQL 基操教程(五) SELECT 数据查看之大于、小于

    前面介绍了使用 insert 对数据表进行数据的插入,在插入数据以后,我们简单使用 SELEECT 进行过查看插入的数据. SELECT * FROM book; SELECT 是查看插入数据的语句, ...

  4. mysql统计age大于20的数_数据库命令记录

    好记性不如烂笔头,每次看了忘,忘了看,这次做一个记录! 查看存在的数据库 mysql > show databases; 转到自己需要查看的数据库 mysql > use 数据库名; 查看 ...

  5. mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值...

    在mybatis中可能会用到的方法 1.模糊查询 <select id="showByIdName" parameterType="User" resul ...

  6. C语言试题五十三之将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回。

    1. 题目 请编写一个函数void function(Student a[], int n),其功能时:将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回. 2 .温馨提示 C ...

  7. (36)Verilog HDL关系运算:大于、小于、等于

    (36)Verilog HDL关系运算:大于.小于.等于 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL关系运算:大于.小于.等于 5)结语 1. ...

  8. mysql门派年龄最大的人_MySQL高级 第12章练习

    1. 案例一 列出自己的掌门比自己年龄小的人员 更换为大表,进行分析: 2. 案例二 列出所有年龄低于自己门派平均年龄的人员 思路: 先取门派的平均年龄,再跟自己的年龄做对比! 如何优化: ①首先在子 ...

  9. Mapper.xml中遇到大于号小于号问题解决方案

    前言:最近在Mapper.xml文件中编写SQL语句的过程中遇到了一个小问题,SQL在mysql里能这样用,我以为在项目里也一样,结果就是小于号在.xml里是不能用的会报错,如下SQL. #在数据库用 ...

最新文章

  1. Excel导入异常Cannot get a text value from a numeric cell解决
  2. 如何看待179所高校新增 AI 本科专业,研究生扩招也瞄准 AI?
  3. 大数据时代 | 数据分析方法及理论详解
  4. SAP Spartacus 里的 icon 设计
  5. android 从本地服务器下载文件,Retrofit2-如何从服务器下载文件
  6. Android导航栏ActionBar的具体分析
  7. php 异步进度条,PHP学习:PHP+Ajax异步带进度条上传文件实例
  8. FreeRTOS 软件定时器使用
  9. 使用XPO过程中的代码优化
  10. 最近新发现的歌谱排版软件Lilypond
  11. Oracle函数HEXTORAW乱码,Oracle常用函数之HEXTORAW
  12. 《持续集成实践指南》第3章 Gitlab基本配置与使用
  13. windows日志文件查看与清理
  14. 别人是怎么将图片贴在屏幕上的?
  15. BERT模型—2.BERT模型预训练与微调
  16. MAC删除开机自启动程序
  17. Unity3D手游项目的总结和思考(6) - Xlua的使用心得
  18. 8583协议深入理解 1
  19. php,调用百地图度API实现标记
  20. 用Python实现免费往手机发短信

热门文章

  1. 1.1.8 怎样在Word的页眉中插入一级标题
  2. 诸葛java_java - 诸葛_子房的个人空间 - OSCHINA - 中文开源技术交流社区
  3. RationalDMIS 7.1 状态区-测量设置
  4. Windows下搭建免费个人博客
  5. 程序员怎么应对行业变化?
  6. [HNOI 2012] 永无乡
  7. 通过shell脚本消耗cpu与内存
  8. 快手616购物节报告:品牌商家GMV同比增长超5倍
  9. PyCharm SyntaxError: Non-UTF-8 code starting with \xbb 处理
  10. 计算机抓桌面图用,图片——要抓就抓最清晰的 -电脑资料