基础学习达到的目标
01.如何使用MySQL数据库
02.如何设计数据库
数据库概述
01.什么是数据库
02.关系型数据库和非关系型数据库
03.常见的数据库
Sql分类
数据库操作
01.创建数据库
02.查看数据库
03.查看数据库创建语句
04.删除数据库
05.修改数据库信息
06.修改数据库名称
表操作
01.创建表
02.查看数据表
03.删除数据库
04.修改表
crud操作
01.插入数据
02.获取数据
03.删除数据
04.修改数据
索引操作
01.创建索引
02.修改索引
03.删除索引
mysql的数值类型
整数型
小数型
日期时间型
字符串类型
类型选择原则
MySQL的列属性
01.是否为空
02.默认值属性
03.主键|唯一索引
04.自动增长
补:实体
05.外键
储存引擎
数据库基础总结
基础学习达到的目标
01.如何使用MySQL数据库
02.如何设计数据库
数据库概述
01.什么是数据库
数据库就是用来存储和管理数据的仓库!
数据库存储数据的优先:
02.关系型数据库和非关系型数据库
03.常见的数据库
l Oracle:甲骨文;
l DB2:IBM;
l SQL Server:微软;
l Sybase:赛尔斯;
l MySQL:甲骨文;
Sql分类
l DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
create database | drop database
create table | alter table | rename table | drop table
create index | drop index
l DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
insert 、update 、delete
l DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
grant 、remoke
l DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
select
数据库操作
01.创建数据库
Create database db_name;
02.查看数据库
Show databases;
03.查看数据库创建语句
Show create database db_name;
04.删除数据库
Drop database db_name;
05.修改数据库信息
Alter database db_name [修改指令]:修改指令一般是数据库属性的修改(比如字符集)
Alter database db_name character set utf-8;
06.修改数据库名称
将当前数据库进行备份,删除之前的数据库,并创建新的数据库,恢复原来数据库的数据。
表操作
01.创建表
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
......
);
02.查看数据表
Show tables;
Show tables like ‘xxx_%’;
Show create table tb_name;
Show create table tb_name\G
Desc tb_name;
03.删除数据库
Drop table if exists tb_name;
04.修改表
01)重命名
Rename table old_tb to new_tb;
02)修改列定义
增加一个新列:alter table tb_name add 列定义(name int);
删除一个列:alter table tb_name drop 列名;
修改一个列定义:alter table tb_name modify 列名 varchar(40);
重命名一个列:alter table tb_name change 旧列名 新列定义;
修改表选项:alter table tb_name character set utf-8;
crud操作
01.插入数据
INSERT INTO 表名(列名1,列名2, …) VALUES(值1, 值2)
语法:
INSERT INTO 表名 VALUES(值1,值2,…)
因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:
02.获取数据
Select * from 表名 [查询条件];
Select 字段名列表 from 表名 [查询条件];
03.删除数据
语法:
DELETE FROM 表名 [WHERE 条件]
04.修改数据
语法:
UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件]
索引操作
01.创建索引
Create unique index Stusno on student(Sno);
Create unique index SCno on Sc(sno ASC,Cno DESC);
Unique:表示每个索引值只对应唯一的数据记录
Cluster:表示简历聚簇索引。
02.修改索引
Alter index
03.删除索引
Drop index
mysql的数值类型
整数型
例:tinyint:一个字节(8位)
有符号(-128——127) 无符号(0——255)
其他整型类似
01.符号问题
可以在定义时,使用unsigned标识没有符号,如果不写,则有符号。
02.定义当前的显示宽度
Alter table tb_name add c tinyint(2):
2表示显示的最小宽度,当宽度不够,需要使用前导0填充,在数据库中叫做zerofill
03.MySQL中没有bool
bool,其实就是tinyint(1)的别名
小数型
浮点数:
小数位可以移动,分为float和double
对于123.456,存储的时候存的是123456和3(因为0.123456*10^3)
对于float,默认情况下,有效数位是6-7位,double的默认有效数位是16位左右,比如:同样存储123456789.10283637,float表示出来可能就是123456700,double表示出来可能就是123456789.102836
同样浮点数也支持控制数值范围,Type(M,D):M表示所有数值位数(不包括小数点和符号位),D:表示有效的小数位数。
定点数
不管怎样浮点数肯定有精度丢失的 问题,如果必须要求精度,可以采用定点数DECIMAL,在存储的时候采用小数整数分开,每9位为一组采用4字节存储(同样也做了优化,当不足9位的时候,适当采用合适的字节存储)
日期时间型
注意:
01)datetime(年月日时分秒)、timestamp(时间戳),这两个表现形式一样,但是存储格式不同(timestamp储存的时候是整型),因为储存的格式不同,所以表示的范围也就不相同。
02)支持任意分隔符的日期,但是容易出现歧义。
03)支持2位的年份
70-69(1970-2069)
70-99(1970-1999)
0-69(2000-2069)
04)MySQL支持0值,比如0000年00月00日 00:00:00
2004-04-00:表示4月份整个月
05)time可以表示一天中的时间,也可以表示时间间隔(两个时间点相差了多少小时)。
字符串类型
这里的最大长度是物理最大长度
01.char和varchar
02.字段的长度(65535,65533,65532)
可以看出不一样的编码,字段长度是不一样的(Latin一个字符等于一个字节)
注意:字段的最大长度,除了类型本身限制之外,记录的总长度也有限制
这个图可以看出,65532可以创建成功,65533创建不成功;但是当65533加上not null之后,可以创建成功,如下图:
原因是:
这个sql也创建不成功,因为a,b都有可能为null,varchar不够存储,所以会报错。
03.text
类型选择原则
MySQL的列属性
01.是否为空
规定一个字段是否为空:null|not null
(空值和空字符串不一样,null的话一定有一个表示空间,在整个记录上某个地方记录null,所有会有一定的储存空间)
02.默认值属性
Default value来声明
03.主键|唯一索引
关系模型的实体完整性在create table中用primary key定义。对单属性构成的码有两种说明方法,一种是定义为表级约束条件,另一种是列级约束条件。对于多个属性构成的码只有一种说明方法,即定义为表级约束条件。
实体完整性检查和违约处理
01)检查主码值是否唯一,如果不唯一则拒绝插入或者修改数据。
02)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或者修改。
常见的设计:
每个表都应该存在一个可以唯一标识的主键字段,最好与实体没有关系,不是实体属性字段。
04.自动增长
补:实体
01.一对一
02.一对多
03.多对多
利用一个中间表,表示实体之间的对应关系,即两个一对多
05.外键
概念:
如果一个实体(student)的某个字段(student:class_id),指向(引用)另外一个实体(class)的主键(class:class_id),就称student实体的class_id是外键。
定义外键:
关系模型的参照完整性在create table中用foreign key短语定义哪些列为外键,用references短语指明这些外码参照哪些表的主码。
例:
Create table SC(
Sno char(9) not null,
Cno char(4) not null,
Grade smallint,
Primary key(Sno,Cno),
Foreign key(Sno) references Student(Sno),
Foreign key(Cno) references Course(Cno)
);
当发生参照完整性不一致时,系统可以采用以下策略加以处理:
01)拒绝(NO ACTION)执行restrict
默认策略
02)级联(CASCADE)操作
03)设为空值,set null
对于参照完整性,除了应该定义外码,还应该定义外码列是否允许空值。
一般的,当对参照完整性和被参照表的操作违反了参照完整性时,系统允许选用默认策略,即拒绝执行。如果让系统采用其他策略则必须在创建参照表时显示的加以说明。
例:
Create table SC(
Sno char(9) not null,
Cno char(4) not null,
Grade smallint,
Primary key(Sno,Cno),
Foreign key(Sno) references Student(Sno)
On delete acscade
On update cascade,
Foreign key(Cno) references Course(Cno)
On delete no action/*当删除Course表中的元组造成与sc不一致时,拒绝删除*/
On uodate cascade/*当更新course表中的cno时,级联更新sc表中的元组*/
);
修改外键:
先删除,再新建,通过修改表完成。
Alter table tb_name drop foreign key (class_id);
删除外键需要通过指定外键名称达到目的:
可以通过在创建外键时,制定名称,或者使用MySQL默认生成的名称
Alter table tb_name add foreign key (class_id) references it_class
On delete set null;
储存引擎