MySQL(数据表创建)
目录
数据模型
关系型数据库(RDBMS)
数据模型
SQL介绍
概述
SQL通用语法
SQL分类
数据类型介绍
字符类型
数值类型
日期类型
数据表创建
sql方式创建数据表
窗口方式创建数据表
sql方式删除数据表
窗口方式删除数据表编辑
标识列及约束
主键约束(primary key)
默认值约束(default)
非空约束(not null)
唯一约束(unique)
检查约束(check)
外键约束(foreign key...references)
标识列
脚本修改表结构(了解)
修改表结构(增删改表列字段).
修改表约束
数据模型
关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点: A. 使用表存储数据,格式统一,便于维护。 B. 使用SQL语言操作,标准统一,使用方便。
而所谓二维表,指的是由行和列组成的表
如下图(就类似于Excel表格数据,有表头、有列、有行, 还可以通过一列关联另外一个表格中的某一列数据)。
我们之前提到的MySQL、Oracle、DB2、 SQLServer这些都是属于关系型数据库,里面都是基于二维表存储数据的。
简单说,基于二维表存储 数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库。
数据模型
MySQL是关系型数据库,是基于二维表进行数据存储的,具体的结构图下:
-
数据库系统:DBA数据库管理员,DBMS数据库管理系统,数据库DB,软件,硬件组合而成。
-
DBA利用了SQL语言借助了DBMS数据库管理系统的操作平台来创建的各种需求的数据库DB。
-
我们可以通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库。
-
可以使用SQL语句,通过数据库管理系统操作数据库,以及操作数据库中的表结构及数据。
-
一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包 含多行记录。
SQL介绍
概述
全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了 一套操作关系型数据库统一标准 。
SQL通用语法
-
SQL语句可以单行或多行书写,以分号结尾。
-
SQL语句可以使用空格/缩进来增强语句的可读性。
-
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
-
注释: 单行注释:-- 注释内容 或 # 注释内容 多行注释:/* 注释内容 */
SQL分类
SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。
数据类型介绍
Java的数据类型:
-
基本类型:8个
-
整数:byte short int long
-
小数:float double
-
单字符:char
-
布尔值:boolean
-
-
引用类型:数不清
-
类
-
String
-
数组
-
接口
-
MySQL支持多种类型,常见及使用分为三类:数值、日期/时间和字符串(字符)类 型,除此之外还有其它类型。
字符类型
mysql 定义一个字符串 存储性别 字节 一个中文-2个字节 char(2)-----男 varchar(8)---男
-
char:固定长度;
-
varchar:可变长度;
-
text:长文本;
-
blob:二进制的,可以存储图片或者声音文件。但在实际中一般不会直接把图 片存储到数据库里面,因为数据库扛不起那么大的内存压力,会用专用的图片存 储服务器存储图片。
注,在使用char和varchar的时候需要指定长度,长度的单位是字符不是字节(在 mysql4.x版本的时候长度单位是字节)。
数值类型
-
int:整型,对应 java里面的 int/Integer;
-
bigint:长整型,对应 java里面的 BigInteger/Long;
-
float:小数,单精度。单精度小数部分只能精确到后面6位,加上小数点前的一 位,即有效数字为7位。
-
优点: float单精度在一些处理器上比double双精度更快而且只占用double 双精度一半的空间。
-
缺点: 但是当值很大或很小的时候,它将变得不精确。
-
-
double:小数,双精度。双精度小数部分能精确到小数点后的15位,加上小数 点前的一位 有效位数为16位。
-
优点: double 跟 float比较, 必然是 double 精度高,尾数可以有 16 位,而 float 尾数精度只有 7 位。
-
缺点: double 双精度是消耗内存的,并且是 float 单精度的两倍! ,double 的 运算速度比 float 慢得多, 因为double 尾数比float 的尾数多, 所以计算起 来必然是有开销的。
-
-
decimal:小数,一般用来存储与货币相关的数据,对应的java类 型: java.math.BigDecimal;
-
例如:decimal(5,2):表示整数位最多3位数,小数位2位数,小数位多出 的位数进行四舍五入,但是四舍五入后整数位不能超过3位数,如: 999.999就不能存储,因为小数位的9四舍五入后整数位会变成1000,超过 了3位数。
-
日期类型
-
date:年月日,对应java里面的:yyyy-MM-dd格式;
-
time:时分秒,对应java里面的:HH:mm:ss格式;
-
datetime:年月日时分秒,对应yyyy-MM-dd HH:mm:ss格式;
-
timestamp:时间戳从1970-1-1开始计算到现在的总毫秒数,就是java里面的 格林尼治时间;
关于日期的详细格式大家可以参考课件里面的:"Mysql日期转换格式 表.png";
数据表创建
sql方式创建数据表
-
切换到对应的数据库的连接及对应的数据库;
-
语法
create tabe 表名( 字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型... );
-
comment:注释的意思,作用在建表的时候给字段和表去一个注释说明
-
character set utf8:是设置编码
create table tb_book ( bookid int, bookName varchar(50) character set utf8 comment '书本名称', bookPrice float comment '书本单价', bookType varchar(50) comment '书本类型' )comment '书籍信息表';
窗口方式创建数据表
-
在对应的数据库的 表 图标上鼠标右键 --> 新建表
sql方式删除数据表
drop table 表名
窗口方式删除数据表
标识列及约束
主键约束(primary key)
-
作用:主键是能确定一条记录的唯一标识,主键字段必须唯一,必须非空,一个 表中只能有一个主键,但是一个主键可以由多个字段组成。
-
虽然现实主键1、主键2,其实是由两个列组成的一个主键。在设置的时候 主键1必须是一个key,主键2无所谓。
例子 👉 一条记录包括身份证,姓名,年龄,学校,国籍,性别等。身份证号是唯一 能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 注:一个主键由多个列组成
create table tb_books( book_id int primary key, book_name varchar(100) );
默认值约束(default)
-
作用:字段设置默认值,可以不用手动插入值。
-
性别案例:sex char(2) default '男';
-
日期案例:
-
adddate timestamp default current_timestamp;👉 current_timestamp 是当前系统时间的意思。
-
adddate timestamp default now();now()是获取当前系统时间。
-
-
默认值约束最典型的就是性别和日期两个情况。
非空约束(not null)
-
作用:字段的值不能为空。
-
bookId int not null auto_increment primary key
唯一约束(unique)
-
作用:字段的值必须唯一。
sname varchar(20) comment'姓名', id varchar(18) not null comment '身 份证', sex char(2) default '男', unique(sname,id);
意思是身份证和姓名加 起来是唯一的,这种约束叫组合约束。 sname varchar(20) unique comment'姓名',id varchar(18) not null comment '身份证',sex char(2) default '男';意思是姓名是为唯一的。
检查约束(check)
-
作用:通过表达式约束字段的值。
create table t_book( book_id int auto_increment primary key, book_name varchar(100) unique, bprice int check(bprice >=0 and bprice <=30) );
外键约束(foreign key...references)
-
作用:在 MySQL 中,外键(Foreign Key)是一种用于建立表与表之间关联关 系的约束。通过外键,可以在一个表中引用另一个表的主键或唯一键,从而实现 数据的关联和一致性。
-
至少涉及到两张表:主表和从表。以及两个键:主键和外键。
-
主外键的主键不一定是主表上的主键,但它必须是主表上唯一且非空的列。
在 MySQL 中,主外键的主键和外键的数据类型并不一定要求完全一致,但它们 之间需要满足一定的数据类型兼容性。通常情况下,为了确保数据的一致性和有 效性,主键和外键的数据类型应该尽可能保持一致。这样可以避免数据类型转换 和不匹配带来的问题。当主表的主键列的数据类型为某一类型时,建议从表中引 用主键的外键列的数据类型与之相同。MySQL 在某些情况下允许主键和外键的 数据类型之间存在一定的兼容性。例如,可以将主表的主键列定义为整数类型 (如 INT),而在从表中的外键列使用兼容的数值类型(如 BIGINT)。MySQL 在执行引用完整性检查时,会自动进行数据类型转换,但这可能会导致一些性能 上的损失。 create table tb_score
create table tb_score( sid int not null auto_ncrement primary key comment '外键,关联 tb_studnet表上的sid键', score float default 0 comment '成绩', foreign key(sid) references tb_student(sid) ) comment '成绩表' create table tb_student( sid int not null auto_increment primary key, sname varchar(10), sex char(2)
标识列
-
作用:实现字段的自动增长,可以不用手动插入值。
-
特点:
-
一个表中最多只能有一个标识列;
-
标识列的类型必须是数值类型(int/float/double),一般 int类型用的比较 多;
-
标识列必须是一个key/键,比如:主键、唯一约束等。一般用于主键比较 多;
-
案例1👉创建表时设置 book_id字段为标识列:
create table tb_books( book_id int auto_increment primary key, book_name varchar(100) );案例2 👉 表创建成功后,设置 book_id字段为表示列
alter table tb_book modify column book_id int primary key auto_increment;案例3: 👉 图形化揭秘那添加标识列
脚本修改表结构(了解)
-
脚本修改表结构主要是通过 alter关键字实现。
-
可以给表增加字段,还可以修改 已有的字段,包括修改字段名称、修改字段类型、删除字段等等。
-
此外,还可以 进行一系列高级操作,例如修改数据表的字符集、设置主键、设置索引、修改字 段默认值、设置自增长等。
修改表结构(增删改表列字段).
-
alter table 语句用于在已有的表中添加、修改或删除列;
-
新增列名语法:alter table 表名称addcolumn 新增的列名 新增列名的数据类 型; 如:alter table tb_studentadd column age int;
-
删除列名语法:alter table 表名称dropcolumn 列名; 如:alter table tb_student drop column age;
-
修改列数据类型语法:alter table 表名称modifycolumn 列名 修改后的数据 类型; 如:alter table tb_student modify column age varchar(10);
-
修改列名语法:alter table 表名change原始字段名 新字段名 新字段名的类型; 如:alter table tb_student change age myageint;
-
修改表名语法:alter table 表名renameto 新表名。
修改表约束
-
添加表外键: alter table 表名 add foreign key(外键名称) references 主表名称(主键名 称);
-
删除表外键: alter table 表名 drop forelgn key 约束名;
-
新增主键: alter table 表名 add forelgn key(主键名称);
-
删除主键:主键只有一个直接删除即可 alter table 表名 drop forelgn key;
-
新增唯一约束: alter table 表名 add unique(列名称1[,列名称2,..]);
-
删除唯一约束:其实就是删除指定的唯一约束的索引名称 alter table 表名 drop index 唯一约束索引名称