当前位置: 首页 > article >正文

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通用语法

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

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

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

  4. 注释: 单行注释:-- 注释内容 或 # 注释内容 多行注释:/* 注释内容 */

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 唯一约束索引名称


http://www.kler.cn/a/613484.html

相关文章:

  • Paddlex服务化代理处理跨域、替换Response中Json key
  • 【质量管理】防错(POKA-YOKE)的概念、特点和作用解析
  • 3、fabric实现多机多卡训练
  • PoE交换机如何助力智慧城市基础设施建设?
  • Nginx RTMP DASH 模块分析 (ngx_rtmp_dash_module.c)
  • 基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】
  • 认识一家公司:瑞芯微(Rockchip Electronics Co., Ltd.)以及旗下的两款芯片RK3288\RK3588
  • PHP接口开发:从基础到高级的全面指南
  • 【强化学习】基于深度强化学习的微能源网能量管理与优化策略研究【Python】
  • 调用阿里云API实现快递地址解析
  • 力扣hot100——搜索二维矩阵
  • Android读写权限分析
  • MFC(1)-odbc-ado-调用mysql,sqlserver
  • AI大模型从0到1记录学习 day08
  • Go 语言标准库中encoding/xml模块详细功能介绍与示例
  • 【QT5 多线程示例】异步编程
  • Java 实现将Word 转换成markdown
  • fyrox 2D和3D游戏的制作
  • uvm factory
  • android studio调试aosp手机userdebug版本无法查看局部变量和参数问题如何解决?