### 数据库概述
* 区分数据库和数据库管理系统
* 人们通常用数据库这个术语来代表他们使用的数据库软件。这是不正确的,它是引起混淆的根源。
* 确切地说,数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。
* 数据库究竟是文件还是别的什么东西并不重要,因为你并不直接访问数据库;你使用的是DBMS,它替你访问数据库。
### 主键的重要性
* 主键的重要性:主键用来表示一个特定的行
应该总是定义主键 虽然并不总是都需要主键,但大多数数据
库设计人员都应保证他们创建的每个表具有一个主键,以便于
以后的数据操纵和管理
## 主键的条件:
1. 任意两行都不具有相同的主键值
2. 每个行都必须具有一个主键值(主键列不允许NULL值)。
3. 主键可以是一个字段也可以是多个字段的组合
### DISTINCT关键字
不能部分使用DISTINCT
DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id,
prod_price,除非指定的两个列都不同,否则所有行都将被检索出来。
* 什么是数据库
* 用来存储数据的仓库。
* 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件)。
* 为什么要学习数据库
* 目前存储数据的地方有哪些
* 内存
* 文件
* 数据存在在内存中的优缺点
* 优点:存取速度快。
* 缺点:不能永久保存。
* 数据存储在文件中的优缺点
* 优点:可以永久存储。
* 缺点:
* 存取速度慢
* 查询数据很麻烦,不能单独查询某一条数据。
* 数据存在在数据库中
* 优点
* 可以永久存储。
* 查询方便,查询速度快。
### 数据库的安装和配置
* 安装和配置过程见pdf文档。
* MySQL目录结构
│-- bin:存放可执行文件
│-- data:默认数据库的存放目录
│-- include: 存放C语言头文件
│-- lib: c++动态链接库
│-- my.ini MySQL默认配置
* MySQL启动和登录(需要先配置了环境变量,才可以直接从控制台进入,不然首先需要进入MYSql的安装bin目录下才能运行)
* 启动
* 通过服务启动
* 登录
* 格式1:mysql -uroot -proot
* 格式2:mysql --host=ip地址 --port=端口号 --user=用户名 --password=密码
* mysql --host=127.0.0.1 --port=3306 --user=root --password=root
### 数据库管理系统和数据库,数据表的关系
* 关系型数据库
* 二维表来存储数据。
* MySQL数据库的结构
* 先有数据库
* 再创建数据表
* 最后存储数据
* 数据库中的主要对象
1) 表(Table):在数据库中存储数据记录的容器,一个表中包含多行数据记录。
2) 视图(View):是从一个或多个表导出的虚拟表,视图本身并不存储数据。
3) 索引(index):是对数据库表中一列或多列的值进行排序的一种结构,
使用索引可快速访问数据库表中的特定信息,类似于书籍的目录。
4) 存储过程(Procedure):一组为了完成特定功能的SQL语句集,存储
在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指
定存储过程的名字并给出参数来执行它。
简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法。
5) 触发器(Trigger):触发器是一种特殊类型的存储过程,它在指定的表
中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、
UPDATE 或 DELETE 语句。
简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行。
提示:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。
### SQL语句概述
* SQL语句介绍
* 概述:Structured Query Language 结构化查询语言。
* 作用:用来操作数据库,数据表以及表中的数据,对数据的增删改查操作。
* SQL语句的分类
* DQL(Data Query Langauage) 数据查询语言
* select / show
* DCL(Data Control Langauage) 数据控制语言
* 用来创建用户,设置用户的访问权限
* grant / revoke
* DML (Data Manipulation Language) 数据操作语言
* Insert/ Delete/ Update
* DDL (Data Definition Langauage) 数据定义语言
* create / drop / alter
* MySQL中的三种注释
* 单行注释
* # 注释内容。 # 是MySQL特有
* -- 注释内容。 -- 是所有数据库都有的
* 多行注释
/* 多行注释 */
### MySQL管理数据库
* 查看所有数据库
* show databases; -- 查看数据库服务器中所有的数据库。
* 创建数据库
* create database 数据库名;
* 使用默认的字符集UTF8创建数据库。
* create database 数据库名 default character set gbk;
* 根据指定的字符集创建数据库。
* 查看数据库的创建语句
* show create database 数据库名; -- 查看创建数据库的语句
* 删除数据库
* drop database 数据库名;
* 修改数据库默认字符集
* alter database 数据库名 default character set utf8; // 不能是utf-8
* 注意事项
* 每一条SQL语句结尾必须加分号;
### 校对规则概述(了解)
* 概念
* 它是一组规则,负责决定某一字符集下的字符进行比较和排序的结果。
* 如:a,B,c,D,如果使用utf-8的编码,按照普通的字母顺序,而且不区分大小写。
* 如果想使用字母的二进制比较和排序,则可以修改它的校对规则。
utf8_general_ci 按照普通的字母顺序,而且不区分大小写
(比如:a B c D)
utf8_bin 按照二进制排序(比如:A排在a前面,B D a c)
* 查看字符集和校对规则
* show character set; -- 显示所有字符集及其默认的校对规则
* show collation like 'utf8%' -- 显示所有utf8的校对规则
* 修改字符集
* set names gbk;
* 创建数据库同时指定字符集和校对规则
create database 数据库名 default character set gbk collate gbk_chinese_ci;
* 修改数据库的校对规则
alter database 数据库名 collate utf8_general_ci;
### MySQL的数据类型
* 数值类型
● BIT 位 0或1
● TINYINT或BOOLEAN 微整型 占1个字节 -128到127
● SMALLINT 小整型 占2个字节 0到65535
● INT 或 INTEGER 整型 占4个字节
● BIGINT 大整型 占8个字节
● FLOAT(M,d) 单精度浮点型 M 总位数, d 小数位数
● DOUBLE(M,d) 双精度浮点型 M 总位数, d 小数位数
* 文本、二进制类型
● CHAR(SIZE): 定长的字符串 char(10)
● VARCHAR(SIZE): 可变长的字符串 name varchar(20)
● BLOB: Big Large Object Binary 大对象二进制数据 (音频,视频等数据)
范围:
TINYBLOB 占1个字节 0-255
BLOB 占2个字节 0-65535
MEDIUMBLOB 占3个字节 0-16M
LONGBLOB 占4个字节 4G
● TEXT: 文本类型 (简历,一本书)
其中
TINYTEXT 占1个字节 0-255
TEXT 占2个字节 0-65535
MEDIUMTEXT 占3个字节 0-16M
LONGTEXT 占4个字节 4G
* 日期和时间类型
● DATE : 日期
● TIME: 时间
● DATETIME: 日期时间
### 数据库表操作
* 查询所有表
* use 数据库名; -- 选择数据库。
* show tables; -- 查看数据库的所有表
* 创建表
* 创建一个student学生表,用来存放学生的信息(学号,姓名,年龄)
* create table 表名(
字段名1 数据类型,
字段名2 数据类型,
...
字段名n 数据类型
);
* 注意事项:最后一个字段后面不能有逗号,其他必须有逗号分隔。
* 查看表结构
* show create table 表名; -- 查看创建表时的SQL语句
* desc 表名; -- 以表格形式查看表结构。
* 复制表
* create table 表名 like 已有表名;
* 删除表
* drop table 表名;
* 修改表
* 添加字段:add
* 给学生表添加一个性别字段,类型char(2)
* alter table student add gender char(2);
* 同时添加多个字段,一个名为a int,一个名为b int(每个字段都需要有add)
* alter table student add a int, add b int;
* 修改字段类型:modify
* 把学生表的gender字段类型改为varchar(2)
* alter table student modify gender varchar(2);
* 修改字段名称:change
* 把学生表的gender字段名改为sex,类型不变。
* alter table student change gender sex varchar(2);
* 删除字段:drop
* 删除学生表中的字段a和字段b(使用两个drop)
* alter table student drop a,drop b;
* 修改表名:rename
* 将学生表student改名为stu
* alter table student rename stu;
### 表操作之插入数据
* SQLyog客户端的使用
* 服务器连接
* 工具栏常用按钮介绍
* 字体设置
* 使用SQLyog创建库和创建表
* 字段命名规范
* 在SQL中不区分大小写
* 表名使用单数形式。如:学生表使用STUDENT,不要使用STUDENTS
* 采用有意义的名字,一般不超过三个英文单词,单词之间使用下划线分割
* 不要在列的名称中包含数据类型
* 不要使用关键字
* 创建学生表
* 查看表的数据
* 插入数据
* 插入所有列数据的SQL语句格式
INSERT INTO 表名 VALUES(值1,值2,值3,值4....);
例如
INSERT INTO student VALUES(1,'张三',23,'1990-10-20');
INTO 可以省略
INSERT student VALUES(1,'张三',23,'1990-10-20');
* 注意事项
* 插入的数据值与字段的数据类型要一致。
* 数据长度或大小应该在规定范围内。比如不能将长度为80的字符串插入到长度为40列中,超出范围的数据就会被截取掉。
* 插入部分列数据的SQL语句格式
INSERT INTO 表名(字段名1,字段名3,字段名4) VALUES(值1,值3,值4);
例如
INSERT INTO student (id,age,birthday) VALUES(1,23,'1990-10-20');
* 注意事项
* 列名和值的顺序一致,数量保持一致!
### 表操作之修改和删除数据
* 修改数据的语句格式
UPDATE 表名 SET 字段名=新值,字段名=新值,... where 条件;
例如
UPDATE student SET name='rose' where id=1;
* 注意事项
* 如果没有where语句,则表示更新所有行。
* 删除数据的语句格式
* 删除表中的所有数据语句格式1
DELETE FROM 表名;
* 注意细节
* 后面可以带条件语句:where 子句。
* 删除表中的所有数据语句格式2
TRUNCATE TABLE 表名;
* 注意细节
* 后面不能带条件
* 区分数据库和数据库管理系统
* 人们通常用数据库这个术语来代表他们使用的数据库软件。这是不正确的,它是引起混淆的根源。
* 确切地说,数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。
* 数据库究竟是文件还是别的什么东西并不重要,因为你并不直接访问数据库;你使用的是DBMS,它替你访问数据库。
### 主键的重要性
* 主键的重要性:主键用来表示一个特定的行
应该总是定义主键 虽然并不总是都需要主键,但大多数数据
库设计人员都应保证他们创建的每个表具有一个主键,以便于
以后的数据操纵和管理
## 主键的条件:
1. 任意两行都不具有相同的主键值
2. 每个行都必须具有一个主键值(主键列不允许NULL值)。
3. 主键可以是一个字段也可以是多个字段的组合
### DISTINCT关键字
不能部分使用DISTINCT
DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id,
prod_price,除非指定的两个列都不同,否则所有行都将被检索出来。
* 什么是数据库
* 用来存储数据的仓库。
* 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件)。
* 为什么要学习数据库
* 目前存储数据的地方有哪些
* 内存
* 文件
* 数据存在在内存中的优缺点
* 优点:存取速度快。
* 缺点:不能永久保存。
* 数据存储在文件中的优缺点
* 优点:可以永久存储。
* 缺点:
* 存取速度慢
* 查询数据很麻烦,不能单独查询某一条数据。
* 数据存在在数据库中
* 优点
* 可以永久存储。
* 查询方便,查询速度快。
### 数据库的安装和配置
* 安装和配置过程见pdf文档。
* MySQL目录结构
│-- bin:存放可执行文件
│-- data:默认数据库的存放目录
│-- include: 存放C语言头文件
│-- lib: c++动态链接库
│-- my.ini MySQL默认配置
* MySQL启动和登录(需要先配置了环境变量,才可以直接从控制台进入,不然首先需要进入MYSql的安装bin目录下才能运行)
* 启动
* 通过服务启动
* 登录
* 格式1:mysql -uroot -proot
* 格式2:mysql --host=ip地址 --port=端口号 --user=用户名 --password=密码
* mysql --host=127.0.0.1 --port=3306 --user=root --password=root
### 数据库管理系统和数据库,数据表的关系
* 关系型数据库
* 二维表来存储数据。
* MySQL数据库的结构
* 先有数据库
* 再创建数据表
* 最后存储数据
* 数据库中的主要对象
1) 表(Table):在数据库中存储数据记录的容器,一个表中包含多行数据记录。
2) 视图(View):是从一个或多个表导出的虚拟表,视图本身并不存储数据。
3) 索引(index):是对数据库表中一列或多列的值进行排序的一种结构,
使用索引可快速访问数据库表中的特定信息,类似于书籍的目录。
4) 存储过程(Procedure):一组为了完成特定功能的SQL语句集,存储
在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指
定存储过程的名字并给出参数来执行它。
简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法。
5) 触发器(Trigger):触发器是一种特殊类型的存储过程,它在指定的表
中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、
UPDATE 或 DELETE 语句。
简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行。
提示:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。
### SQL语句概述
* SQL语句介绍
* 概述:Structured Query Language 结构化查询语言。
* 作用:用来操作数据库,数据表以及表中的数据,对数据的增删改查操作。
* SQL语句的分类
* DQL(Data Query Langauage) 数据查询语言
* select / show
* DCL(Data Control Langauage) 数据控制语言
* 用来创建用户,设置用户的访问权限
* grant / revoke
* DML (Data Manipulation Language) 数据操作语言
* Insert/ Delete/ Update
* DDL (Data Definition Langauage) 数据定义语言
* create / drop / alter
* MySQL中的三种注释
* 单行注释
* # 注释内容。 # 是MySQL特有
* -- 注释内容。 -- 是所有数据库都有的
* 多行注释
/* 多行注释 */
### MySQL管理数据库
* 查看所有数据库
* show databases; -- 查看数据库服务器中所有的数据库。
* 创建数据库
* create database 数据库名;
* 使用默认的字符集UTF8创建数据库。
* create database 数据库名 default character set gbk;
* 根据指定的字符集创建数据库。
* 查看数据库的创建语句
* show create database 数据库名; -- 查看创建数据库的语句
* 删除数据库
* drop database 数据库名;
* 修改数据库默认字符集
* alter database 数据库名 default character set utf8; // 不能是utf-8
* 注意事项
* 每一条SQL语句结尾必须加分号;
### 校对规则概述(了解)
* 概念
* 它是一组规则,负责决定某一字符集下的字符进行比较和排序的结果。
* 如:a,B,c,D,如果使用utf-8的编码,按照普通的字母顺序,而且不区分大小写。
* 如果想使用字母的二进制比较和排序,则可以修改它的校对规则。
utf8_general_ci 按照普通的字母顺序,而且不区分大小写
(比如:a B c D)
utf8_bin 按照二进制排序(比如:A排在a前面,B D a c)
* 查看字符集和校对规则
* show character set; -- 显示所有字符集及其默认的校对规则
* show collation like 'utf8%' -- 显示所有utf8的校对规则
* 修改字符集
* set names gbk;
* 创建数据库同时指定字符集和校对规则
create database 数据库名 default character set gbk collate gbk_chinese_ci;
* 修改数据库的校对规则
alter database 数据库名 collate utf8_general_ci;
### MySQL的数据类型
* 数值类型
● BIT 位 0或1
● TINYINT或BOOLEAN 微整型 占1个字节 -128到127
● SMALLINT 小整型 占2个字节 0到65535
● INT 或 INTEGER 整型 占4个字节
● BIGINT 大整型 占8个字节
● FLOAT(M,d) 单精度浮点型 M 总位数, d 小数位数
● DOUBLE(M,d) 双精度浮点型 M 总位数, d 小数位数
* 文本、二进制类型
● CHAR(SIZE): 定长的字符串 char(10)
● VARCHAR(SIZE): 可变长的字符串 name varchar(20)
● BLOB: Big Large Object Binary 大对象二进制数据 (音频,视频等数据)
范围:
TINYBLOB 占1个字节 0-255
BLOB 占2个字节 0-65535
MEDIUMBLOB 占3个字节 0-16M
LONGBLOB 占4个字节 4G
● TEXT: 文本类型 (简历,一本书)
其中
TINYTEXT 占1个字节 0-255
TEXT 占2个字节 0-65535
MEDIUMTEXT 占3个字节 0-16M
LONGTEXT 占4个字节 4G
* 日期和时间类型
● DATE : 日期
● TIME: 时间
● DATETIME: 日期时间
### 数据库表操作
* 查询所有表
* use 数据库名; -- 选择数据库。
* show tables; -- 查看数据库的所有表
* 创建表
* 创建一个student学生表,用来存放学生的信息(学号,姓名,年龄)
* create table 表名(
字段名1 数据类型,
字段名2 数据类型,
...
字段名n 数据类型
);
* 注意事项:最后一个字段后面不能有逗号,其他必须有逗号分隔。
* 查看表结构
* show create table 表名; -- 查看创建表时的SQL语句
* desc 表名; -- 以表格形式查看表结构。
* 复制表
* create table 表名 like 已有表名;
* 删除表
* drop table 表名;
* 修改表
* 添加字段:add
* 给学生表添加一个性别字段,类型char(2)
* alter table student add gender char(2);
* 同时添加多个字段,一个名为a int,一个名为b int(每个字段都需要有add)
* alter table student add a int, add b int;
* 修改字段类型:modify
* 把学生表的gender字段类型改为varchar(2)
* alter table student modify gender varchar(2);
* 修改字段名称:change
* 把学生表的gender字段名改为sex,类型不变。
* alter table student change gender sex varchar(2);
* 删除字段:drop
* 删除学生表中的字段a和字段b(使用两个drop)
* alter table student drop a,drop b;
* 修改表名:rename
* 将学生表student改名为stu
* alter table student rename stu;
### 表操作之插入数据
* SQLyog客户端的使用
* 服务器连接
* 工具栏常用按钮介绍
* 字体设置
* 使用SQLyog创建库和创建表
* 字段命名规范
* 在SQL中不区分大小写
* 表名使用单数形式。如:学生表使用STUDENT,不要使用STUDENTS
* 采用有意义的名字,一般不超过三个英文单词,单词之间使用下划线分割
* 不要在列的名称中包含数据类型
* 不要使用关键字
* 创建学生表
* 查看表的数据
* 插入数据
* 插入所有列数据的SQL语句格式
INSERT INTO 表名 VALUES(值1,值2,值3,值4....);
例如
INSERT INTO student VALUES(1,'张三',23,'1990-10-20');
INTO 可以省略
INSERT student VALUES(1,'张三',23,'1990-10-20');
* 注意事项
* 插入的数据值与字段的数据类型要一致。
* 数据长度或大小应该在规定范围内。比如不能将长度为80的字符串插入到长度为40列中,超出范围的数据就会被截取掉。
* 插入部分列数据的SQL语句格式
INSERT INTO 表名(字段名1,字段名3,字段名4) VALUES(值1,值3,值4);
例如
INSERT INTO student (id,age,birthday) VALUES(1,23,'1990-10-20');
* 注意事项
* 列名和值的顺序一致,数量保持一致!
### 表操作之修改和删除数据
* 修改数据的语句格式
UPDATE 表名 SET 字段名=新值,字段名=新值,... where 条件;
例如
UPDATE student SET name='rose' where id=1;
* 注意事项
* 如果没有where语句,则表示更新所有行。
* 删除数据的语句格式
* 删除表中的所有数据语句格式1
DELETE FROM 表名;
* 注意细节
* 后面可以带条件语句:where 子句。
* 删除表中的所有数据语句格式2
TRUNCATE TABLE 表名;
* 注意细节
* 后面不能带条件