一、数据库的分类和优点
数据库分为线性数据库、网状型数据库、树状型数据库和关系型数据库。我们主要学习关系型数据库。
数据库的优点:数据库可以持久化保存数据,同时可以用数据库语言对数据很轻松地进行数据的增删改查。
1、关系型数据库
关系型数据库的结构:由行和列组成的结构;
2、常见的关系型数据库
中型数据库处理大量数据时的初速较慢,效率较低;大型数据库处理大量数据时初速较快,效率高。一般中小型企业使用中型数据库,大型企业使用大型数据库。
(1)mysql
(2)oracle
(3)SQLServer
(4)DB2
二、数据库的结构
数据库的基本结构:服务器à库à表;
注意:一个服务器下可以有多个库,一个库里面可以有多个表。
三、数据可的基本操作命令
1、启动和关闭服务器
安装完mysql后,服务器默认是启动状态,一般情况不需要关闭服务器。
(1)方式一
1)右键我的电脑à管理à服务和应用程序à服务à找到mysql,然后打开或者关闭;
2)通过命令行找到服务和应用程序:cmdàservices.mscà找到mysql,然后打开或者关闭;
(2)方式二
Net startmysql服务的名字
Net stopmysql服务的名字
2、进入和退出服务器
(1)进入服务器
首先打开cmd,然后输入以下命令:
mysql-u用户名 -p密码 -h 访问的ip -P端口号(默认是3036);
注意:
1)访问的IP:本机为localhost或者127.0.0.1;
2)可以不写-h和-P,这时默认本机和端口号为3036;
3)一般使用mysql-u用户名 -p,然后回车,再根据提示输入密码,可以使输入的密码隐藏,保证安全性。
(2)退出服务器
命令:exit;
3、数据库库和表格的基本操作命令
setnames 编码集名:设置服务器编码集;
(一)对库的操作
(1)show databases;查看数据库中有的所有库;
注意:mysql本身带有两个库,不能擅自改动:information_schema 和mysql;
(2)create database 库名;创建一个库;
(3)drop database 库名;删除一个库;
(4)use 库名;进入一个库;
注意:不能重命名一个库名。
(二)对表格的操作
(1)show tables;查看一个库中有所有的表格;
(2)desc 表名;查看某一个表格的详细信息;
(3)create table 表名(字段1 数据类型,字段2,数据类型…);创建一个表格;
(4)drop table 表名:删除表;
(5)rename table 老表名 to 新表名:更改表名;
(6)alter table 表名add 字段名 字段类型:给表添加字段;
(7)alater table 表名 modify 字段名 新类型:更改表的字段类型;
注意:表中有数据时,更改类型时需注意新类型能否存放原来的数据,如果不能存放,则不能修改成功;
(8)alter table 表名drop 字段名:删除表的字段;
(三)表格的增删改查
(1)select * from 表名:查询全表全字段;
(2)select 字段名字段别名 from 表名 where 条件:根据条件查询某些字段;
(3)insert into 表名values(值1,值2,…):根据全字段顺序插入数据;
(4)insert into 表名(字段1,字段2,…) values(值1,值2,…):根据指定的字段顺序,插入指定字段的值;
(5)delete from 表名where 条件:根据条件,删除指定表中的数据;
(6)update 表名set 字段1=值1,字段2=值2,… where 条件;
四、数据库数据的类型
数据库数据类型共有五种,分别为:整数型、浮点型、定点型、字符型、时间型。
创建字段时遵循的原则:类型正确且合理,节省空间。
(一)数据库数据通用属性
给字段添加属性时,只需在创建字段或者修改字段时,在字段名后加空格,再加属性名。
1、notnull
2、default
语法:default 默认值
表示:该项数据未传入时显示默认值。
3、notnull default 值
(二)数据类型
1、整数型
数据类型 | 占字节 | 位数 | 有符号范围 | 无符号范围 |
---|---|---|---|---|
tinyint | 1 | 8 | -128~127(-2^7~2^7-1) | 0-255(2^8-1) |
smallint | 2 | 16 | -32768~32767 (-2^15~2^15-1) | 0-65535(0~2^16-1) |
mediumint | 3 | 24 | 正负800多万(-2^23~2^23-1) | 正1600多万(0~2^14-1) |
int | 4 | 32 | 正负21E(-2^31~2^31-1) | 0~正42E多(0~2^32-1) |
bigint | 8 | 64 | (-2^63~2^63-1) | (0~2^64-1) |
(1)范围计算方法(以tinyint为例):
有符号范围:
最小值:[-][1][1][1][1][1][1][1] à (12^0+12^1+12^2+…+126) à-(2^7-1)à -127;
最大值:[+][1][1][1][1][1][1][1] à 127;
无符号范围:
最小值:[0][0][0][0][0][0][0][0]à0;
最大值:[1][1][1][1][1][1][1][1]à(12^0+12^1+12^2+…+127)à2^8-1à255;
(2)属性
完整属性语法:数据类型(M)unsigned zerofill;
1)M:表示长度,即数的位数;
2)unsigned:表示无符号的,即表示正数;
注意:数据库默认的是有符号的范围,如需使用无符号范围,则需在类型后添加unsigned。
3)zerofill:表示0填充,表示如果传入的数字不足M位,则会在数字前面添加0,直到满足位数为止。一般同M一起使用。
2、浮点型
类型 | 范围 | 字节数 |
---|---|---|
Float(M,D) | 跟M和D有关系 | 4 |
Double(M,D) | 跟M和D有关系 | 8 |
属性:
(1)M:表示小数点前后总位数;
(2)D:表示小数点后的位数。
例:float(6,2):有符号范围为:-9999.99-9999.99
无符号范围为:0-9999.99
3、定点型
类型 | 范围 | 字节数 |
---|---|---|
decimal(M,D) | 和浮点型规则一样 | M+2 |
4、字符型
类型 | 名称 | 占字节 | 宽度范围(M的取值范围) | 空间利用率 |
---|---|---|---|---|
char(M) | 定长字符串 | M个字符 | 0~255 | 小于等于100% |
varchar(M) | 变长字符串 | 实际字符+1~2个字节 | 0~65535 | 小于100% |
属性:
(1)M:代表字符串的长度;
(2)定长字符串的效率要高于变长字符串。
5、时间型
类型 | 范围 |
---|---|
Year | 1901-2155 |
Time | -838:59:59’到’838:59:59 |
Date | 1000-01-01~9999-12-31 |
Datetime | Date和Time结合 |
Timestamp | 1970-2037(了解,即将过期) |
注意:
(1)如果需要传入一个时间格式的数据,需传入字符串格式的时间;
(2)时间A晚于时间B,则A>B。
五、数据库三范式
三范式的作用:约束数据库见表的规范性;
三范式的最终目的:使表格不存在冗余数据。
1、第一范式
设置主键:使表中没有完全重复的数据。
主键选择规则:
(1)一般选择与业务无关的字段,如自增的id;
(2)尽量选择数值型或者定长字符串类型,效率更高。
2、第二范式
建立关系表(多对多的关系):解决部分依赖,使表中没有冗余数据。
最终三张表:各自的业务表和一张关系表。
一般抽取两张业务表的主键字段组成关系表。
3、第三范式
设置外键,建立两张表之间的联系(一对多或者多对一):解决传递依赖,使表中没有冗余数据。
一般在副表中添加外键映射主表(即:主表的主键字段值添加到副表中)。
一般一对多,“多”为副表,“一”为主表。