[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2YJCOSKa-1680280127185)(./assets/XuanZiShare_QQ_3336392096.jpg)]
前言:
此文为玄子,学习 BCSP 一二期后整理的文章,文中对知识点的解释仅为个人理解,源码均可直接复制运行
配套PPT,站点源码,等学习资料请加文章封面联系方式
针对课程的一些调整:
- 一期
C sharp语言和SQLServer数据库技术
与二期JAVA开发之JAVA数据库编程
这两本书的相似度较高,所以针对数据库编程,只写了二期的JAVA开发之JAVA数据库编程
- 这篇文章和之前的
玄子Share-BCSP助学手册之JAVA开发
以及玄子Share-BCSP助学手册之前端开发
属于同一系列玄子Share-BCSP助学手册之Java数据库编程
这本书,几乎就是以后工作的日常操作,所以这篇文章,会加入更多关于我对数据库及JDBC的理解,相对前两篇文章,会比较啰嗦,请谅解。- 部分章节的知识点会有相对应的增改,以课本为准
- ……
按照教材上的要求,统一使用MySQL版本号为5.7.40
的版本
MySQL 的安装方式有两种
安装器安装,快速便捷,安装过程均为图像操作界面,但缺点是卸载,极其麻烦,不仅要删除MySQL文件,还要删除注册表,等相关信息。如果卸载不干净,影响以后的安装配置等。
压缩包安装,相对比较麻烦,需要解压后,自行配置MySQL服务等,但优点是,卸载非常简单,只需要把解压文件删除即可。
我推荐使用,压缩包解压配置的方式安装MySQL,虽然麻烦了一点,但后期使用MySQL出现问题,需要重新安装MySQL就会很舒服。
两种安装方式我都写有教程,不用纠结使用哪种安装方式,能安装上就行了。
官方 https://downloads.mysql.com/archives/community/
度盘 https://pan.baidu.com/s/1fuGdLIDXx2-2b5mEdqEh3g?pwd=xzsr
注意选择版本号为5.7.40
下载完后我们会得到一个以 MySQL 开头命名的压缩包,我们需要把这个压缩包解压到本地
这里可以把 MySQL 文件名后面的-winx64
删除掉(度盘下载的压缩包我已经删除过了)
推荐将文件解压到 C 盘的 Program Files 文件下,即解压路径为C:\Program Files\mysql-5.7.40
在C:\Program Files\mysql-5.7.40
文件夹内新建一个文本文档,【强制】命名为:my.ini
注意开启显示文件拓展名
设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yI16F8pt-1680280127188)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230202161947.png)]
如果在度盘下载的压缩包,我在压缩包中已经写入过
my.ini
文件,只需要注意自己的安装路径是否和配置文件内路径一致即可
使用记事本方法打开my.ini
文件,将下面的配置文件粘贴进去
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\Program Files\mysql-5.7.40
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files\mysql-5.7.40\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#跳过密码
skip-grant-tables
basedir:就是mysql的安装路径
datadir:只需要把
\data
前面的路径替换即可文本里的代码前面是没有数字的
Path
双击进入bin
目录(实际路径以自己安装时设置为准)C:\Program Files\mysql-5.7.40\bin
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DvPNj2ip-1680280127189)(./assets/image-20230202162835333.png)]
Win + R
然后通过管理员身份打开cmd
mysql --version
查看环境是否配置成功[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iu9pX4bx-1680280127190)(./assets/image-20230202163232310.png)]
Win + R
打开运行输入cmd
以管理员身份运行cd /d C:\Program Files\mysql-5.7.40\bin
mysqld -install
命令安装 MySQL 服务mysqld --initialize-insecure
初始化 data 目录net start mysql
启动 MySQL 服务mysql -uroot
登录 MySQLupdate mysql.user set authentication_string=password('root') where user='root' and Host = 'localhost';
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4s1zrxLn-1680280127190)(./assets/image-20230202164124547.png)]
root
就是登录密码,账户名也是root
或者你可以把密码改成自己喜欢的flush privileges;
刷新一下权限exit
退出 MySQL 即可退出后回到my.ini
配置文件中,用#
注释掉或者直接删除掉最后一行代码skip-grant-tables
然后保存退出
到这里就已经成功下载并配置好了 MySQL
命令行先输入net stop mysql
关闭 MySQL 服务
在输入net start mysql
开启 MySQL 服务
这里报错的请自己到服务中手动打开 MySQL 服务后重新尝试
登录数据库
mysql -uroot -proot
mysql -u账户名 -p密码
注意密码前后不能有空格
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8YycRlD-1680280127190)(./assets/image-20230202165147101.png)]
最后可以输入一个查询版本信息的SQl语句玩一下:
select version(),user();
代码后面有分号
MySQL 压缩包安装教程
官方 https://downloads.mysql.com/archives/installer/
度盘 https://pan.baidu.com/s/1fuGdLIDXx2-2b5mEdqEh3g?pwd=xzsr
注意选择版本号为5.7.40
下载完后我们会得到一个以 MySQL 开头命名的msi
安装器,直接双击运行安装
NO
即可Custom
自定义安装MySQL Server 5.7.40 - X64
点击箭头添加到右边Execute
执行安装即可MySQL
登录密码(默认设置为 root
)MySQL57
就是服务器名称,点击Next
下一步Path
双击进入bin
目录(实际路径以自己安装时设置为准)C:\Program Files\MySQL\MySQL Server 5.7\bin
Win + R
然后通过管理员身份打开cmd
mysql --version
查看环境是否配置成功[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3Nov0LA-1680280127194)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230330223945.png)]
Win + R
打开cmd
窗口mysql -uroot -proot
(-u后的root
为管理员账号,-p后的root
为之前设置的MySQL登录密码,没有空格直接跟密码)最后可以输入一个查询版本信息的SQl语句玩一下:
select version(),user();
代码后面有分号
MySQL 安装器安装教程
压缩包安装方式安装的MySQL,卸载就直接删除掉解压后的MySQL文件夹即可,然后删除配置的 MySQL 环境变量
Win + R
打开cmd
窗口输入services.msc
打开服务到这里只是卸载了MySQL软件,MySQL还有许多文件并没有删掉,如果不删除干净,会影响后续安装导致安装失败。
C:\Program Files (x86)\MySQL
内所有文件C:\ProgramData\MySQL
内所有文件,该文件是默认隐藏的,设置显示后即可见C:\Documents and Settings\All Users\Application Data\MySQL
内所有文件到这里也只是删掉了MySQL所有残余文件,还需要删除MySQL的注册表信息
Win + R
打开cmd
窗口输入regedit
打开注册表HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL
Navicate官网 https://www.navicat.com/en/products
SqlYog官网 https://sqlyog.en.softonic.com/
度盘 https://pan.baidu.com/s/1fuGdLIDXx2-2b5mEdqEh3g?pwd=xzsr
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AJNJmcJd-1680280127197)(./assets/image-20230205154315466-1680219755644-4.png)]
Navicate 涉及版权无法分享,加封面联系方式获取软件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Ey2eTGF-1680280127197)(./assets/image-20230331164902240.png)]
SqlYog 涉及版权无法分享,加封面联系方式获取软件
PowerDesigner 涉及版权无法分享,加封面联系方式获取软件
良好的数据库设计
糟糕的数据库设计
数据库设计是对数据库中实体以及这些实体之间的关系进行规划和结构化的过程,当数据库比较复杂时,需要设计数据库
收集信息
标识实体 (Entity)
标识每个实体的属性(Attribute)
标识实体之间的关系(Relationship)
数据库设计中,不能重复出现含义相同的实体
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型
符号 | 含义 |
---|---|
□ | 实体,一般是名词 |
○ | 属性,一般是名词 |
♢ | 关系,一般是动词 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-imINsCcx-1680280127198)(./assets/image-20230331234821123.png)]
概念数据模型设计
逻辑数据模型设计
物理数据模型设计
概念数据模型 | 逻辑数据模型 | 物理数据模型 |
---|---|---|
实体(Entity) | 实体(Entity) | 表(Table) |
属性(Attribute) | 属性(Attribute) | 列(Column) |
标识符(Identifier) | 标识符(Primary Identifier/ Foreign Identifier) | 键(Primary key/ Foreign key) |
关系(Relationship) | 关系(Relationship) | 参照完整性约束(Reference) |
基本转换原理
将E-R图中每一个实体转换成一个表,实体的属性转换为表的列,实体的标识符转换为表的主键
将实体关系转化为表之间的引用完整性约束
一般会各自转换为一张表,且后者对应的表引用前者对应的表
一个表中的主键对应另一个表中可重复的字段
主键的值是不能重复的,关联的字段是可以重复的
存在一个值对应一个值(一对一)或者一个值对应多个值(一对多)
推荐使用的版本:PowerDesigner 16.5
PowerDesigner 涉及版权无法分享,加封面联系方式获取软件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t94KLglc-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401000958.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G6iUFg11-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401001019.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XsoeI8wX-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401001132.png)]
生成的 SQL文件可直接拿到 Navicate 运行
PowerDesigner中开发数据库模型图时,需要指定该模型图是为数据库管理系统开发的,因为PowerDesigner支持用数据库模型图生成数据库创建脚本的功能
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则
第一范式
第二范式
第三范式
为满足某种商业目标,数据库性能比规范化数据库更重要
通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
通过在给定的表中插入计算列(如成绩总分),以方便查询
在数据规范化同时,要综合考虑数据库的性能
存放商品信息的表
商品名称 | 商品型号 | 单价 | 数量 | 金额 |
---|---|---|---|---|
电视机 | 29英寸 | 2500 | 40 | 100000 |
金额 = 单价 * 数量,是冗余的列
为了提高查询统计速度,以空间换取时间
不要轻易违反数据库设计的规范化原则,如果处理不好,可能会适得其反,使应用程序运行速度更慢
向各表中插入数据,查看表中的每个属性列是否存在重复、插入异常、更新异常和删除异常
对照三大范式的定义,解决表中的异常问题
第一范式的目标是确保每列都是不可再分的最小数据单元,查看每列是否都满足第一范式
第二范式的每列与主键相关,不相关的放入别的表中,即要求一个表只描述一件事情
第三范式要求表中各列必须和主键直接相关,不能间接相关,查看各表,满足第三范式,对于不满足三大范式的表要进行拆分
MySQL 是一款流行的开源数据库,也是一个关系型数据库管理系统
在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一
时间 | 里程碑 |
---|---|
1996 年 | MySQL 1.0 发布。它的历史可以追溯到 1979 年,作者 Monty 用 BASIC 设计的一个报表工具 |
1996 年 | 10 月 3.11.1 发布。MySQL 没有 2.x 版本 |
2000 年 | ISAM 升级成 MyISAM 引擎。MySQL 开源 |
2003 年 | MySQL 4.0 发布,集成 InnoDB 存储引擎 |
2005 年 | MySQL 5.0 版本发布,提供了视图、存储过程等功能 |
2008 年 | MySQL AB 公司被 Sun 公司收购,进入 Sun MySQL 时代 |
2009 年 | Oracle 收购 Sun 公司,进入 Oracle MySQL 时代 |
2010 年 | MySQL 5.5 发布,InnoDB 成为默认的存储引擎 |
2016 年 | MySQL 发布 8.0.0 版本 |
为什么没有 MySQL6、MySQL7?
MySQL5.6 可以当成 MySQL6.x
MySQL5.7 可以当成 MySQL7.x
运行速度快
使用成本低
容易使用
可移植性强
适用用户广
丰富的接口
支持查询语言
安全性和连接性
安全性和连接性; 十分灵活和安全的权限和密码系统,允许主机验证。连接到服务器时,所有的密码均采用加密形式,从而保证了密码安全
并且由于MySQL是网络化的,因此可以在因特网网上的任何地方访问,提高数据共享效率
官网 https://downloads.mysql.com/archives/community/
CSDN安装教程 https://blog.csdn.net/qq_62283694/article/details/129869634
安装教程见第一章、课程软件的安装与卸载
首先检查 MySQL 服务是否启动
电脑按下Win + R 输入 cmd
打开dos
窗口
net start mysql
net stop mysql
mysql –h服务器主机地址 –u用户名 –p密码
参数说明:
-h
指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略
-u
登录的用户名
-p
告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RDlTYGXl-1680280127199)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205152901.png)]
SELECT VERSION(),USER();
分号为结束符,不可缺
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkIwS8ti-1680280127200)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205152928.png)]
CREATE DATABASE 数据库名;
Query OK:SQL语句执行成功
1 row affected:操作影响的行数
(0.00 sec):操作执行时间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0hijvVO-1680280127200)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205153046.png)]
SHOW databases;
student:用户数据库
其他的是系统数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUGDOB1h-1680280127200)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205153258.png)]
USE 数据库名;
使用数据表前,必须先选择该数据库!
ERROR 1049 (42000): Unknown database 'a'
数据库不存在,报错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqD4JKEX-1680280127201)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205153925.png)]
DROP DATABASE 数据库名;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-23TckjwS-1680280127201)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205154227.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UjuG8Dia-1680280127201)(./assets/image-20230205154315466-1680219755644-4.png)]
Navicat Premium是一款功能强大的、可支持多连接的数据库管理工具
允许在单一程序中同时连接多达7种数据库
MySQL
MariaDB
MongoDB
SQL Server
SQLite
Oracle
PostgreSQL
官网 https://www.navicat.com/en/products
推荐使用:Navicat Premium 16 最新版
Navicate 涉及版权无法分享,加封面联系方式获取软件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4E5LTDzz-1680280127202)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205154815-1680247296828-4.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5FUMbDH-1680280127202)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205160159-1680247296828-6.png)]
utf8
点击 SQL 预览可以查看建表语句[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fY2ZejZR-1680280127203)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230205160210-1680247296828-7.png)]
名称 | 解释 | 命令举例 |
---|---|---|
DML (数据操作语言) | 操作数据库中所包含的数据 | INSERT UPDATE DELETE |
DDL (数据定义语言) | 创建和删除数据库对象等操作 | CREATE DROP ALTER |
DQL (数据查询语言) | 对数据库中的数据进行查询 | SELECT |
DCL (数据控制语言) | 控制数据库组件的存取许可、存取权限等 | GRANT COMMIT ROLLBACK |
MySQL 中定义数据字段的类型对你数据库的优化是非常重要的
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型
类型 | 说明 | 取值范围 | 存储需求 |
---|---|---|---|
TINYINT | 非常小的数据 | 有符值:-27~27-1 无符号值:0~28-1 |
1字节 |
SMALLINT | 较小的数据 | 有符值:-215~215-1 无符号值:0~216-1 |
2字节 |
MEDIUMINT | 中等大小的数据 | 有符值:-223~223-1 无符号值:0~224-1 |
3字节 |
INT | 标准整数 | 有符值:-231~231-1 无符号值:0~232-1 |
4字节 |
BIGINT | 较大的整数 | 有符值:-263~263-1 无符号值:0~264-1 |
8字节 |
FLOAT | 单精度浮点数 | ±1.1754351e-38 | 4字节 |
DOUBLE | 双精度浮点数 | ±2.2250738585072014e-308 | 8字节 |
DECIMAL | 字符串形式的浮点数 | Decimal(M,D) | M+2个字节 |
**UNSIGNED 属性:**标识为无符号数,非负数
**ZEROFILL 属性:**宽度(位数)不足以0填充
若某数值字段指定了 ZEROFILL 属性,将自动添加 UNSIGNED 属性
数值位数小于宽度,以0填充
数值位数大于宽度,显示实际位数
日期类型 | 格式 | 取值范围 | 用途 |
---|---|---|---|
DATE | YYYY-MM-DD | 1000-01-01 / 9999-12-31 | 日期值 |
TIME | HH:MM:SS | -835:59:59 / 838:59:59 | 时间值或持续时间 |
YEAR | YYYY | 1901~2155 | 年份值 |
DATETIME | YYYY-MM-DD hh:mm:ss | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 混合日期和时间值 |
TIMESTAMP | YYYY-MM-DD hh:mm:ss | ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
混合日期和时间值,时间戳 |
若某日期字段默认值为系统当前日期,可指定为
TIMESTAMP
类型
字符串类型 | 大小 | 用途 |
---|---|---|
CHAR[(M)] | 0-255 bytes | 定长字符串 |
VARCHAR[(M)] | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
char(m) 和 varchar(m) 中括号中 m 代表字符的个数,并不代表字节个数
比如 CHAR(30) 就可以存储 30 个字符
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择
创建MySQL数据表需要以下信息
CREATE TABLE table_name (column_name column_type);
CREATE TABLE [IF NOT EXISTS] 表名 (
字段 1 数据类型 [ 字段属性 | 约束 ][ 索引 ][ 字段备注 ],
字段 2 数据类型 [ 字段属性 | 约束 ][ 索引 ][ 字段备注 ],
字段 n 数据类型 [ 字段属性 | 约束 ][ 索引 ][ 字段备注 ]
)[ 表类型 ][ 表字符集 ][ 表备注 ];
IF NOT EXISTS 判断表是否存在,存在就不重复建表了
多字段使用逗号分隔,保留字用撇号括起来
CREATE TABLE IF NOT EXISTS xuanzi(
id INT UNSIGNED AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
phone VARCHAR(40) NOT NULL,
date DATE,
PRIMARY KEY ( id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 如果你不想字段为
NULL
可以设置字段的属性为NOT NULL
,在操作数据库时如果输入该字段的数据为NULL
,就会报错- AUTO_INCREMENT 定义列为自增的属性,一般用于主键,数值会自动加1
- PRIMARY KEY 关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔
- ENGINE 设置存储引擎,CHARSET 设置编码
# 单行注释
-- 单行注释
/**
多行注释
*/
名称 | 关键字 | 说明 |
---|---|---|
主键约束 | PRIMARY KEY(PK) | 设置该字段为表的主键 可唯一标识该表记录 |
外键约束 | FOREIGN KEY(FK) | 用于在两表之间建立关系, 需要指定引用主表的哪一字段 |
自动增长 | AUTO_INCREMENT | 设置该列为自增字段 默认每条自增1 通常用于设置主键 |
非空约束 | NOT NULL | 字段不允许为空 |
默认约束 | DEFAULT | 赋予某字段默认值 |
唯一约束 | UNIQUE KEY(UK) | 设置字段的值是唯一的 允许为空,但只能有一个空值 |
主键:使用数据库表中某一字段或某几个字段唯一标识所有记录
CREATE TABLE [IF NOT EXISTS] 表名 (
字段 1 数据类型 PRIMARY KEY,
#……
);
-- 定义字段的同时指定主键
CREATE TABLE [IF NOT EXISTS] 表名 (
字段 1 数据类型 ,
#……
[CONSTRAINT< 约束名 >] PRIMARY KEY[ 列名 ]
);
-- 定义所有字段之后指定主键
CREATE TABLE [IF NOT EXISTS] 表名 (
#……
PRIMARY KEY [字段1,字段2,…… ]
);
COMMENT关键字
在表结构中可以看到,与代码注释不同、
CREATE TABLE test (
id int(11) UNSIGNED COMMENT '编号'
)COMMENT='测试表';
默认情况下,MySQL所有数据库、表、字段等使用 MySQL 默认字符集
为了存储独特的数据,可在创建表时指定字符集
CREATE TABLE [IF NOT EXISTS] 表名(
#……
)CHARSET = 字符集名;
CREATE TABLE `checkitem` (
`checkItemID` int(4) NOT NULL AUTO_INCREMENT COMMENT '检查项目编号',
`checkItemName` varchar(50) NOT NULL COMMENT '检查项目名称',
`checkItemCost` float NOT NULL COMMENT '检查项目价格',
PRIMARY KEY (`checkItemID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COMMENT = '检查项目表';
SHOW TABLES;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yb2uIKHr-1680280127203)(./assets/image-20230331173945642.png)]
DESCRIBE 表名;
DESC 表名;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pSOVZXgO-1680280127204)(./assets/image-20230331173500098.png)]
为了避免
DOS
窗口出现中文乱码,可执行SET NAMES gbk;
DROP TABLE [IF EXISTS] 表名;
在删除表之前,先使用
IF EXISTS
语句验证表是否存在,执行 DROP TABLE 的表是空表,则可以直接删除如果表中已存储了业务数据,则需和数据库管理员联系,先对数据库数据进行备份并确认,再执行删除表及数据的操作
存储引擎,是存储数据的核心组件,指定了表的存储类型和存储形式
SHOW ENGINES;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VanLV7x4-1680280127204)(./assets/image-20230331232103064.png)]
InnoDB存储引擎
MyISAM存储引擎
功能 | InnoDB | MyISAM |
---|---|---|
事务处理 | 支持 | 不支持 |
外键约束 | 支持 | 不支持 |
表空间大小 | 较大 | 较小 |
数据行锁定 | 支持 | 不支持 |
MySQL 5.7 版本默认的存储引擎是InnoDB
SHOW VARIABLES LIKE 'default_storage_engine%';
-- default_storage_engine% 默认存储引擎
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmaPu9M9-1680280127204)(./assets/image-20230331232525679.png)]
my.ini
配置文件default-storage-engine=MyISAM
-- MyISAM 改为其他类型的存储引擎
修改配置文件后,需要重启MySQL服务设置才会生效
数据表默认使用当前 MySQL 默认的存储引擎
创建表时,可以设置表的存储引擎类型
CREATE TABLE 表名 (
# ……
) ENGINE= 存储引擎 ;
CREATE TABLE `checkitem` (
`checkItemID` int(4) NOT NULL AUTO_INCREMENT COMMENT '检查项目编号',
`checkItemName` varchar(50) NOT NULL COMMENT '检查项目名称',
`checkItemCost` float NOT NULL COMMENT '检查项目价格',
PRIMARY KEY (`checkItemID`) USING BTREE
) ENGINE = MyISAM;
MyISAM 类型表文件
*.frm
表结构定义文件
*.MYD
数据文件
*.MYI
索引文件
uInnoDB 类型表文件
*.frm
表结构定义文件
ibdata1
文件
因操作系统而异,可查my.ini
datadir="C:\ProgramData\MySQL\MySQL Server 5.7\Data"
innodb_data_home_dir="D:/MySQL Datafiles/"
HELP 查询内容;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGgbV2BA-1680280127204)(./assets/image-20230331233452271.png)]
HELP contents;
#查看帮助文档目录列表
HELP Data Definition;
#查看数据定义
HELP CREATE DATABASE;
#查看CREATE DATABASE的帮助信息
玄子Share-BCSP助学手册之数据库开发
加粗样式