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

MySQL数据库详细笔记

第一章 数据库理论

1.什么是数据库

1.1数据

描述事物的符号记录,可以是数字,文字,图像,声音等数据有多种形式,它们可以经过数字化后存入计算机

1.2数据库

存储数据的仓库

数据结构化

数据的共享性高,易扩充

数据独立性高

2.数据库管理系统(DBMS)

数据库管理系统是管理数据库的一个软件,它充当所有数据的知识库,并对它的存储,安全,一致性,并发操作,恢复和访问负责

3.常见数据库

3.1关系型数据库

关系数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

常见的关系型数据库有:Oracle,DB2,Microsoft SQLServer,MicrosoftAccess,MySQL,武汉达梦,南大通用,人大金仓,华为高斯,mariadb

3.2非关系型数据库

非关系型数据库是一种轻量,开源,不兼容SQL功能的数据库

常见的非关系数据库有:redis,mongodb

4.MySQ架构

Mysql架构分为网络连接池层,数据库服务层,存储引擎层,系统文件层

第二章 MySQL安装

1.Windows安装MySQL8.0 msi格式

下载地址

https://dev.mysql.com/downloads/installer/

安装过程:

安装过程为英文

注意:安装mysql8.0需要先安装依赖,若无依赖会自动下载安装,本步骤可选

默认设置即可,即开发平台,端口3306,加密端口33060

认证方式,默认

设置root密码(Mysql@123)

登录账户:默认root

安装的服务名设置,默认即可

安装路径,默认

安装时执行的内容

下一步

完成

注意:若这里报错则Alt+Ctrl+Delete打开任务管理器---服务---MySQL80---右击打开服务--找到MySQL80右击---属性--登录--允许本地系统账户

安装后的配置:环境变量(若配置的mysql的环境变量则可以在CMD中允许MySQL)

新建一个词条:输入mysql安装路径

打开MySQL自带的命令行测试,输入密码Mysql@123进行测试

命令提示符测试

powershell测试

mysql服务启动与停止

启动:net start mysql80

停止:net stop mysql80

可视化管理

清屏:\!cls

2.Liunx安装MySQL

使用迅雷下载集合包

下载网站

https://downloads.mysql.com/archives/community/

使用xftp将集合包上传到/目录

安装

[root@server ~]# cd /
[root@server /]# tar -xvf mysql-8.0.32-1.el9.x86_64.rpm-bundle.tar   # 解压[root@server /]# yum localinstall mysql-community-server-8.0.32-1.el9.x86_64.rpm \
mysql-community-client-8.0.32-1.el9.x86_64.rpm \   # 必须,客户端
mysql-community-common-8.0.32-1.el9.x86_64.rpm \   # 必须,公共库
mysql-community-icu-data-files-8.0.32-1.el9.x86_64.rpm  \  # 必须,支持正则表达式的icu数据文件
mysql-community-client-plugins-8.0.32-1.el9.x86_64.rpm \   # 必须,客户端共享插件
mysql-community-libs-8.0.32-1.el9.x86_64.rpm       # 不必须,开发库,开发跟MySql有关的C/C++ 项目时则需要[root@server /]# cd ~[root@server ~]# systemctl start mysqld[root@server ~]# systemctl status mysqld  # 查看状态[root@server ~]# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)  # 密码错误,需要重置密码[root@server ~]# grep password /var/log/mysqld.log   # 查询初始密码
2023-02-09T03:55:47.305118Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: q&2PO.yJZ+Hp
# q&2PO.yJZ+Hp为密码,需要复制[root@server ~]# mysql -u root -p
Enter password:   # 粘贴之前的密码mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.   # 提示需要修改默认密码mysql> alter user 'root'@'localhost' identified by 'MyNewPass1!'; # 修改密码
Query OK, 0 rows affected (0.01 sec)mysql> exit
Bye

第三章 MySQL库表操作

1.SQL语句基础

1.1SQL简介

SQL:结构化查询语言,在关系型数据库上执行数据操作,数据检索以及数据维护的标准语言。使用SQL语句,程序员和数据库管理员可以完成如下的任务

改变数据库的结构

更改系统的安全设置

增加用户对数据库或表的许可权限

在数据库中检索需要的信息

对数据库的信息继续更新

1.2SQL语句分类 四大类

DDL(数据定义语言):定义对数据库对象(库,表,列,索引)的操作,如:create(创建),drop(删除),alter(修改),rename(重命名),show(查看)

DML(数据操作语言):定义对数据库记录的操作,如:insert(插入),delete/truncate(删除),update(更新)

DQL select(查询)

DCL(数据控制语言):定义对数据库,表,字段,用户的访问权限和安全级别,如:grant(授权),revoke(回收特权)

1.3SQL语句的书写规范

在数据库系统中,SQL语句不区分大小写,但字符串常量区分大小写

SQL语句可单行或多行书写,以“;”结尾。

关键词不能跨多行或简写

用空格和缩进来提高语句的可读性

子句通常位于独立行,便于编辑,提高可读性。

注释:/* */ 为多行注释 , ---(远程终端执行有问题),--和#为单行注释

2.数据库操作

2.1数据库的登录及退出

登录格式:

mysql  -u用户名  -h服务器的主机地址 -p密码 -A  -P 端口 -D 数据库名 -e sql语句

解释:

-u后面更登录数据库的用户名,这里使用root

-h后面的参数是服务器的主机地址,在这里客户端和服务器在同一台机器上,所以输入localhost或者IP地址

-p后面是用户登录密码,注意:-p和密码之间没有空格。如果出现空格,系统将不会把后面的字符串当成密码来对待,没有密码时不写

-A参数:不预读数据库信息,加上该参数则不预读数据库中的表等信息

2.2查看数据库

格式:

like  模糊查询   % 任意长度的任意字符  _  任意单个字符
mysql> show databases  [like  条件];    # 注意有s
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

MySQL自带数据库

information_schema:提供MySQL服务器中所有数据库对象的元数据信息,相当于数据库的“数据字典”,存放内容有数据库,表,列,索引,视图,存储过程,触发器等的定义信息;表的存储引擎,数据类型,权限信息,字符集等

performance_schema:主要存储数据库服务器的性能参数

mysql:存储了系统的用户权限信息及帮助信息

sys:这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据

使用条件查看

mysql> show databases  like  'sys';
+----------------+
| Database (sys) |
+----------------+
| sys            |
+----------------+
1 row in set (0.00 sec)

带有通配符的条件查看

%:匹配任意零个或多个字符

_:匹配任意单个字符

mysql> show databases  like  's%';
+---------------+
| Database (s%) |
+---------------+
| sys           |
+---------------+
1 row in set (0.00 sec)

显示时间:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2025-08-09 09:39:14 |
+---------------------+
1 row in set (0.00 sec)

显示数据库版本

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.37    |
+-----------+
1 row in set (0.00 sec)

2.3创建数据库

格式:

create  database  数据库名;

示例:

mysql> create database db1;
Query OK, 1 row affected (0.00 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| db1                |
+--------------------+

注意:如果数据库已经存在,则会报错

查看创建数据库的语句

格式:

show  create database 数据库名
mysql> show create database db1;
+----------+-------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                               |
+----------+-------------------------------------------------------------------------------------------------------------------------------+
| db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)# 分析:
# 上述显示创建数据库语句的内容可看做3段内容
# CREATE DATABASE `testdb` :表示创建数据库testdb
# /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ :表示注释内容,显示字符集采用utf8mb4方案,一个字符需要 1 ~ 4 个字节。可以存储一些 emoji 表情; utf8mb4_0900_ai_ci表示字符比较规则即ai为不区分重音,ci为不区分大小写
# /*!80016 DEFAULT ENCRYPTION='N' */ 表示数据库未加密

注意:在创建数据库或查看创建数据库语句时,dayabase没有s

2.4mysql中的反引号

作用可以避免一些与SQL语法冲突的问题,同时使代码更加规范化和易读性更强

注意:只有保留关键字和特殊字符需要使用反引号,普通的表名和列名不需要

数据类型之间可以加或者不加反引号,但为了代码规范化,建议加上

2.5切换数据库

查看当前使用的数据库,格式:

select  database();
mysql> select  database();
+------------+
| database() |
+------------+
| NULL       |
+------------+

注意:当前没有使用数据库,则显示空

选择数据库,格式:

use  数据库名
mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> select database();
+------------+
| database() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)

2.6查看当前用户

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

2.7删除数据库

格式:

drop database 数据库名

示例:

mysql> drop database db1;
Query OK, 0 rows affected (0.01 sec)mysql> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

2.8小结

新建数据库

create database 数据库名

设为当前数据库

use  数据库名

查看当前使用的数据库

select  database();

显示所有数据库

show  databases;

删除数据库

drop database 数据库名

查看当前登录的用户及主机名

select user();

3.MySQL字符集

3.1字符集

字符集是字符的编码规则,规定了字符在数据库中的存储格式,比如占多少空间,支持哪些字符等

mysql8.0的默认字符集是utf8mb4;

mysql8的库表创建以及程序中尽可能使用uf8mb4;

mysql8的库表创建以及程序中尽可能使用utf8mb4字符集(支持emoji)

mysql中的utf8字符集是utf8mb3字符集的别名,避免使用

latin1支持西欧字符、希腊字符等
gbk支持中文简体字符,但是不是国际通用字符集
big5支持中文繁体字符
utf8几乎支持世界所有国家的字符。
utf8mb4完全兼容UTF-8,用四个字节存储更多的字符

3.2字符序 CI CS 

字符序就是字符排序的规则集合

字符序主要对字符的排序有影响

3.3查看MySQL字符集

查看所有支持的字符集

格式1:

mysql> show character set;
+----------+---------------------------------+---------------------+--------+
| Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
| armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
| ascii    | US ASCII                        | ascii_general_ci    |      1 |
| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
| binary   | Binary pseudo charset           | binary              |      1 |
| cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
| cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
| cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
| cp850    | DOS West European               | cp850_general_ci    |      1 |
| cp852    | DOS Central European            | cp852_general_ci    |      1 |
| cp866    | DOS Russian                     | cp866_general_ci    |      1 |
| cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
| dec8     | DEC West European               | dec8_swedish_ci     |      1 |
| eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
| euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
| gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
| gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
| gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
| geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
| greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
| hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
| hp8      | HP West European                | hp8_english_ci      |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
| koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
| koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
| latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
| latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
| macce    | Mac Central European            | macce_general_ci    |      1 |
| macroman | Mac West European               | macroman_general_ci |      1 |
| sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
| swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
| tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
| ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
| ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
| utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
| utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
| utf8mb3  | UTF-8 Unicode                   | utf8mb3_general_ci  |      3 |
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_0900_ai_ci  |      4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.00 sec)# 字段含义# Charset: 字符集的名称;# Description:字符集的简单描述;# Default collation:该字符集的默认字符序;# Maxlen:该字符集中字符最大存储长度。
# 或者使用\g替代定界符分号
mysql> show character set\g

格式2:

#\G表示将查询结果进行按列打印,即将查到的结构旋转90度变成纵向显示,不需要分号
mysql> show character set\G
*************************** 1. row ***************************Charset: armscii8Description: ARMSCII-8 Armenian
Default collation: armscii8_general_ciMaxlen: 1
*************************** 2. row ***************************Charset: asciiDescription: US ASCII
Default collation: ascii_general_ciMaxlen: 1
*************************** 3. row ***************************Charset: big5Description: Big5 Traditional Chinese
Default collation: big5_chinese_ciMaxlen: 2
*************************** 4. row ***************************Charset: binaryDescription: Binary pseudo charset
Default collation: binaryMaxlen: 1
*************************** 5. row ***************************Charset: cp1250Description: Windows Central European
Default collation: cp1250_general_ciMaxlen: 1
*************************** 6. row ***************************Charset: cp1251Description: Windows Cyrillic
Default collation: cp1251_general_ciMaxlen: 1
*************************** 7. row ***************************Charset: cp1256Description: Windows Arabic
Default collation: cp1256_general_ciMaxlen: 1
*************************** 8. row ***************************Charset: cp1257Description: Windows Baltic
Default collation: cp1257_general_ciMaxlen: 1
*************************** 9. row ***************************Charset: cp850Description: DOS West European
Default collation: cp850_general_ciMaxlen: 1
*************************** 10. row ***************************Charset: cp852Description: DOS Central European
Default collation: cp852_general_ciMaxlen: 1
*************************** 11. row ***************************Charset: cp866Description: DOS Russian
Default collation: cp866_general_ciMaxlen: 1
*************************** 12. row ***************************Charset: cp932Description: SJIS for Windows Japanese
Default collation: cp932_japanese_ciMaxlen: 2
*************************** 13. row ***************************Charset: dec8Description: DEC West European
Default collation: dec8_swedish_ciMaxlen: 1
*************************** 14. row ***************************Charset: eucjpmsDescription: UJIS for Windows Japanese
Default collation: eucjpms_japanese_ciMaxlen: 3
*************************** 15. row ***************************Charset: euckrDescription: EUC-KR Korean
Default collation: euckr_korean_ciMaxlen: 2
*************************** 16. row ***************************Charset: gb18030Description: China National Standard GB18030
Default collation: gb18030_chinese_ciMaxlen: 4
*************************** 17. row ***************************Charset: gb2312Description: GB2312 Simplified Chinese
Default collation: gb2312_chinese_ciMaxlen: 2
*************************** 18. row ***************************Charset: gbkDescription: GBK Simplified Chinese
Default collation: gbk_chinese_ciMaxlen: 2
*************************** 19. row ***************************Charset: geostd8Description: GEOSTD8 Georgian
Default collation: geostd8_general_ciMaxlen: 1
*************************** 20. row ***************************Charset: greekDescription: ISO 8859-7 Greek
Default collation: greek_general_ciMaxlen: 1
*************************** 21. row ***************************Charset: hebrewDescription: ISO 8859-8 Hebrew
Default collation: hebrew_general_ciMaxlen: 1
*************************** 22. row ***************************Charset: hp8Description: HP West European
Default collation: hp8_english_ciMaxlen: 1
*************************** 23. row ***************************Charset: keybcs2Description: DOS Kamenicky Czech-Slovak
Default collation: keybcs2_general_ciMaxlen: 1
*************************** 24. row ***************************Charset: koi8rDescription: KOI8-R Relcom Russian
Default collation: koi8r_general_ciMaxlen: 1
*************************** 25. row ***************************Charset: koi8uDescription: KOI8-U Ukrainian
Default collation: koi8u_general_ciMaxlen: 1
*************************** 26. row ***************************Charset: latin1Description: cp1252 West European
Default collation: latin1_swedish_ciMaxlen: 1
*************************** 27. row ***************************Charset: latin2Description: ISO 8859-2 Central European
Default collation: latin2_general_ciMaxlen: 1
*************************** 28. row ***************************Charset: latin5Description: ISO 8859-9 Turkish
Default collation: latin5_turkish_ciMaxlen: 1
*************************** 29. row ***************************Charset: latin7Description: ISO 8859-13 Baltic
Default collation: latin7_general_ciMaxlen: 1
*************************** 30. row ***************************Charset: macceDescription: Mac Central European
Default collation: macce_general_ciMaxlen: 1
*************************** 31. row ***************************Charset: macromanDescription: Mac West European
Default collation: macroman_general_ciMaxlen: 1
*************************** 32. row ***************************Charset: sjisDescription: Shift-JIS Japanese
Default collation: sjis_japanese_ciMaxlen: 2
*************************** 33. row ***************************Charset: swe7Description: 7bit Swedish
Default collation: swe7_swedish_ciMaxlen: 1
*************************** 34. row ***************************Charset: tis620Description: TIS620 Thai
Default collation: tis620_thai_ciMaxlen: 1
*************************** 35. row ***************************Charset: ucs2Description: UCS-2 Unicode
Default collation: ucs2_general_ciMaxlen: 2
*************************** 36. row ***************************Charset: ujisDescription: EUC-JP Japanese
Default collation: ujis_japanese_ciMaxlen: 3
*************************** 37. row ***************************Charset: utf16Description: UTF-16 Unicode
Default collation: utf16_general_ciMaxlen: 4
*************************** 38. row ***************************Charset: utf16leDescription: UTF-16LE Unicode
Default collation: utf16le_general_ciMaxlen: 4
*************************** 39. row ***************************Charset: utf32Description: UTF-32 Unicode
Default collation: utf32_general_ciMaxlen: 4
*************************** 40. row ***************************Charset: utf8mb3Description: UTF-8 Unicode
Default collation: utf8mb3_general_ciMaxlen: 3
*************************** 41. row ***************************Charset: utf8mb4Description: UTF-8 Unicode
Default collation: utf8mb4_0900_ai_ciMaxlen: 4
41 rows in set (0.00 sec)

查看指定字符集

mysql> show character set like 'utf%';
+---------+------------------+--------------------+--------+
| Charset | Description      | Default collation  | Maxlen |
+---------+------------------+--------------------+--------+
| utf16   | UTF-16 Unicode   | utf16_general_ci   |      4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci |      4 |
| utf32   | UTF-32 Unicode   | utf32_general_ci   |      4 |
| utf8mb3 | UTF-8 Unicode    | utf8mb3_general_ci |      3 |
| utf8mb4 | UTF-8 Unicode    | utf8mb4_0900_ai_ci |      4 |
+---------+------------------+--------------------+--------+

3.4查看MySQL字符序

MySQL字符序命名规则:

以字符序对应的字符集名称开头

以国家名居中(或以general居中)

后缀:bin(二进制),ci(大小写不敏感),cs(大小写敏感),ai(口音不敏感),as(口音敏感),ks(假名敏感)

查看支持的字序

mysql> show collation;# 字段含义# Collation:字符序名称;# Charset:该字符序关联的字符集;# Id:字符序ID;# Default:该字符序是否是所关联的字符集的默认字符序。armscii8_general_ci就是armscii8的默认字符序,而armscii8_bin就不是;# Compiled:字符集是否已编译到服务器中;# Sortlen:这与对以字符集表示的字符串进行排序所需的内存量有关;# Pad_attribute:这表明了字符序在比较字符串时对末尾padding的处理。NO PAD表明在比较字符串时,末尾的padding也会考虑进去,否则不考虑。

指定条件查询

mysql> show collation where charset = "utf8mb4";

3.5查看当前字符集的设置

通过变量查看

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4   # 重要           |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4   # 重要           |
| character_set_system     | utf8mb3                    |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

变量定义

character_set_client:MySQL客户端的字符集。
character_set_connection:数据通信链路字符集,当MySQL客户机向服务器发送请求时,请求数据以该字符集进行编码。
character_set_database:数据库默认使用的字符集。
character_set_filesystem:MySQL服务器文件系统字符集,该值是固定的binary。
character_set_results:服务器返回给客户端的结果使用的字符集。
character_set_server:服务器默认的字符集。
character_set_system:服务器存储元数据使用的字符集。

修改字符集

格式

ALTER DATABASE 数据库名 CHARACTER SET 字符集名 COLLATE 排序规则;

4.表的基本操作

4.1数据类型

类型组成:数据,文本,日期/时间类型

数字类型 整数int 小数浮点类型

数据类型字节数带符号值范围不带符号值范围
tinyint unsigned1[-128,127][0,255]
smallint2[-32768,32767][0,65535]
mediumint3[-8388608,8388607][0,4294967295]
int4[-2147483648,2147483647][0,4294967295]
bigint8[-9223372036854775808,9223372036854775807][0,18446744073709551616]

注意:

整型(N)表现形式:有时代码写法为int(10),表示数字宽度限制,并且int永远占4个字节,N表示的是显示宽度,不足则补0,超过长度则会无视长度直接显示整个数字

浮点型

数据类型字节数备注
float4

单精度浮点型 7

double8双精度浮点型 15

注意:

可以使用float(M,D),double(M,D)格式限制宽度按(M)和精度(D),如float(3,2),不指定M,D的时,会按照实际的精度来处理

由于float,double类型存在精度丢失问题,所以在考虑精度的时候可以选择decimal

文本型

数据类型描述
char(size)保存固定长度的字符串(可包含字母,数字以及特殊字符),最多255个字符
varchar(size)保存可变长度的字符串(可包含字母,数字以及特殊字符),最多255个字符,如果值的长度大于255,则被转换为TEXT类型
tinytext

存放最大长度为255个字符的字符串

text存放最大长度为65535个字符的字符串
blob用于BLOBS,存放最多65535字节的数据

data类型

数据类型字节数格式备注
date3yyyy-MM-dd存储日期值
time 3HH:mm:ss存储时分秒
datetime8yyyy-MM-dd HH:mm:ss存储日期+时间

总结:常用数据类型:boolean

4.2创建表

格式

create  table  表名 (表选项)

表定义选项格式

列名1  列类型1  约束   comment 注释名, 列名2  列类型2  约束,……

注意:

使用create table 创建表时,表的名称不区分大小写,不能使用SQL语言中的关键字,如drop,alter,inster等

必须指定数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开

示例

mysql> select  database();  # 查看当前数据库
mysql> create database mydb2_stuinfo;  # 创建数据库
Query OK, 1 row affected (0.02 sec)mysql> use mydb2_stuinfo;  # 使用数据库
Database changedmysql> create table student1(id int, name varchar(30), sex char(2), age int unsigned, score float, addr varchar(50));
Query OK, 0 rows affected (0.02 sec)mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| student1                |
+-------------------------+

4.3查看表

show语句:显示当前数据库中已有的数据表

格式

show tables [from 数据库名][like wild];

示例

mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1                  |
| student1                |
+-------------------------+
2 rows in set (0.00 sec)mysql> show tables from mydb3_employee;   # 查看另一个库的表示信息
+--------------------------+
| Tables_in_mydb3_employee |
+--------------------------+
| tb1                      |
+--------------------------+
1 row in set (0.00 sec)

describe语句:查看数据表中各列的信息

格式

{describe|desc}表名[列名];
# or
show columns from 表名称;

示例

mysql> use mydb2_stuinfo;mysql> desc student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | YES  |     | NULL    |       |
| name  | varchar(30)  | YES  |     | NULL    |       |
| sex   | char(2)      | YES  |     | NULL    |       |
| age   | int unsigned | YES  |     | NULL    |       |
| score | float        | YES  |     | NULL    |       |
| addr  | varchar(50)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)#columns 用法
mysql> show columns from student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | YES  |     | NULL    |       |
| name  | varchar(30)  | YES  |     | NULL    |       |
| sex   | char(2)      | YES  |     | NULL    |       |
| age   | int unsigned | YES  |     | NULL    |       |
| score | float        | YES  |     | NULL    |       |
| addr  | varchar(50)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

4.4删除表

格式

drop table [if exists] 表名;

示例

mysql> use mydb3_employee;
Database changedmysql> show columns from tb1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int         | YES  |     | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> drop table tb1;
Query OK, 0 rows affected (0.01 sec)mysql> show  tables;
Empty set (0.00 sec)

注意:

用户必须拥有执行drop table 命令的权限,否则数据表不会被删除

推荐使用if  exists 字句,即先判断是否存在,存在则删除,如

mysql> drop table  if exists  tb1;
Query OK, 0 rows affected (0.01 sec)

4.5修改表

更改表名(重命名)

# 法1:
alter  table  表名  rename  新表名;  # 法2:
rename  table  表名  to  新表名;

示例

mysql> use mydb2_stuinfo;
Database changed
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1                  |
| student1                |
+-------------------------+
1 row in set (0.00 sec)mysql> create table student2(id int(11), name varchar(30), salary float);
Query OK, 0 rows affected, 1 warning (0.05 sec)mysql> desc student2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int         | YES  |     | NULL    |       |
| name   | varchar(30) | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)mysql> alter table student2 rename student3; # 修改
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1                  |
| student1                |
| student3                |
+-------------------------+
2 rows in set (0.01 sec)mysql> rename table student3 to teacher1;  # 修改
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1                  |
| student1                |
| teacher1                |
+-------------------------+
2 rows in set (0.00 sec)

添加新列

alter table 表名 add  新列名 列类型  [after|first] 列名;# after:在指定列之后插入新列
# first:在第一列插入新列
# 注意:无before关键字

示例

# 例:增加一列password	
mysql> alter table student1 add password char(8);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0# 注意:数据库操作后得到的反馈,表明操作的结果。这个信息表示:Records: 2: 表示成功导入或处理的记录总数是2条。Duplicates: 0: 表示在操作过程中没有发现重复的记录。Warnings: 0: 表示在操作过程中没有产生任何警告。mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int          | YES  |     | NULL    |       |
| name     | varchar(30)  | YES  |     | NULL    |       |
| sex      | char(2)      | YES  |     | NULL    |       |
| age      | int unsigned | YES  |     | NULL    |       |
| score    | float        | YES  |     | NULL    |       |
| addr     | varchar(50)  | YES  |     | NULL    |       |
| password | char(8)      | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
7 rows in set (0.00 sec)# 例:再添加一个新列notes varchar(30),位置在score之前
mysql> alter table student1 add notes varchar(30)  after  age;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc  student1;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int          | YES  |     | NULL    |       |
| name     | varchar(30)  | YES  |     | NULL    |       |
| sex      | char(2)      | YES  |     | NULL    |       |
| age      | int unsigned | YES  |     | NULL    |       |
| notes    | varchar(30)  | YES  |     | NULL    |       |
| score    | float        | YES  |     | NULL    |       |
| addr     | varchar(50)  | YES  |     | NULL    |       |
| password | char(8)      | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+# 例:再第一列添加一个新列
mysql> alter table student1 add aa int  first;mysql> desc  student1;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| aa       | int          | YES  |     | NULL    |       |
| id       | int          | YES  |     | NULL    |       |
| name     | varchar(30)  | YES  |     | NULL    |       |
| sex      | char(2)      | YES  |     | NULL    |       |
| age      | int unsigned | YES  |     | NULL    |       |
| notes    | varchar(30)  | YES  |     | NULL    |       |
| score    | float        | YES  |     | NULL    |       |
| addr     | varchar(50)  | YES  |     | NULL    |       |
| password | char(8)      | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

删除列

格式

alter table 表名 DROP 列名;

示例

# 例:删除上例的notes、aa列
mysql> alter table student1  drop notes;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table student1  drop aa;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc  student1;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int          | YES  |     | NULL    |       |
| name     | varchar(30)  | YES  |     | NULL    |       |
| sex      | char(2)      | YES  |     | NULL    |       |
| age      | int unsigned | YES  |     | NULL    |       |
| score    | float        | YES  |     | NULL    |       |
| addr     | varchar(50)  | YES  |     | NULL    |       |
| password | char(8)      | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

修改列名

格式

alter  table  表名 change  旧列名  新列名 列类型;

示例

mysql> alter table student1 change password passwd char(8);  # 改名
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc student1;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int          | YES  |     | NULL    |       |
| name   | varchar(30)  | YES  |     | NULL    |       |
| sex    | char(2)      | YES  |     | NULL    |       |
| age    | int unsigned | YES  |     | NULL    |       |
| score  | float        | YES  |     | NULL    |       |
| addr   | varchar(50)  | YES  |     | NULL    |       |
| passwd | char(8)      | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

修改列类型

格式

alter  table  表名  modify  列名  列类型;

示例

# 插入新列,修改类型
mysql> alter table student1 add birthday char(10); # 增加
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int          | YES  |     | NULL    |       |
| name     | varchar(30)  | YES  |     | NULL    |       |
| sex      | char(2)      | YES  |     | NULL    |       |
| age      | int unsigned | YES  |     | NULL    |       |
| score    | float        | YES  |     | NULL    |       |
| addr     | varchar(50)  | YES  |     | NULL    |       |
| passwd   | char(8)      | YES  |     | NULL    |       |
| birthday | char(10)     | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)mysql> alter table student1 modify birthday date; # 修改
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int          | YES  |     | NULL    |       |
| name     | varchar(30)  | YES  |     | NULL    |       |
| sex      | char(2)      | YES  |     | NULL    |       |
| age      | int unsigned | YES  |     | NULL    |       |
| score    | float        | YES  |     | NULL    |       |
| addr     | varchar(50)  | YES  |     | NULL    |       |
| passwd   | char(8)      | YES  |     | NULL    |       |
| birthday | date         | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

4.6修改列位置

格式

alter table 表名 modify  列名  列类型 after 某列;

示例

# 例:添加新列
mysql> alter table student1 add notes varchar(30) after name;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0# 将notes移动到最后
mysql> alter table student1 modify  notes varchar(30) after birthday;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0# 删除该列
mysql> alter table  student1 drop notes;

4.7复制表的结构

方法1:在create table 语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下

create table 新表名 like 源表

示例

mysql> use  mydb2_stuinfo;mysql> insert into student1 value(1000,"zhangsan","M",18,98.5,"xi'an","12345678","2005-10-01");
Query OK, 1 row affected (0.00 sec)mysql> insert into student1 value(1001, "lisi", "W", 20,66.79, "baoji","87654321","2003-5-01");mysql> select * from  student1;mysql> create table student2 like student1;
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1                  |
| student1                |
| teacher1                |
+-------------------------+
3 rows in set (0.00 sec)mysql> select * from  student2;   # 注意:只是复制结构框架
Empty set (0.00 sec)

方法2:在create table 语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中,下面的语法格式将源表的结构和记录都拷贝到新表中

create table 新表名 select * from 源表

示例

mysql> create table student3 select * from student1;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1                  |
| student1                |
| student2                |
| student3                |
| teacher1                |
+-------------------------+
4 rows in set (0.00 sec)mysql> select * from  student3;

方法3:如果已经存在一张结构一致的表,复制数据

mysql> select * from student2;
Empty set (0.00 sec)mysql> insert into student2 select * from student1;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from student2;mysql> drop table if exists student2;
mysql> drop table if exists student3;
mysql> drop table if exists teacher1;

4.8数据库字典

数据字典:类似于系统编目或花名册,它保存数据库服务器上的元数据信息

元数据:描述数据的数据,内容包括数据库的属性信息,数据库的属性信息,字段的属性信息,视图的属性信息,用户信息,统计类信息等

information_schema数据库是MySQL系统自带的数据库,它提供了数据库元数据的访问方式

4.9 小结

新建表

create  table 表名 (字段名1   数据类型,字段名2   数据类型,...);
create  table 表名 (字段名1   数据类型,字段名2   数据类型,...) character set 字符集  collate 字符集_ci;

删除表

drop  table  表名;

查看表

show tables;
show tables from db1;

查看完成的建表语句

show  create table 表名;

修改表

alter  table 表名  rename  新表名;
== rename table 表名  to  新表名;

查看表字段(表结构)

desc|explain|describe   表名;
show  columns from  表名;

添加列(字段)

alter table 表名  add  字段名  数据类型 [after|first] 字段名;

删除列

alter table 表名   drop 字段名;

修改该列(字段名/字段的数据类型)

alter table 表名  change 旧的字段名  新的字段名 数据类型;
alter table 表名  modify  字段名 新的数据类型;  

表复制(备份)

create table  新表名  like 旧表名 ;             #备份表结构
insert into 新表名 select * from 旧表名;        #复制表数据
create table 新表名 select * from 旧表;        #备份表结构和表数据

4.10删除的注意事项

删除数据库表之前,一定要备份数据,以免数据丢失

在删除数据库表之前,要确保该表没有被其他的表所引用,否则可能会破坏外界约束

在删除数据库之前,要确保该表的数据已经备份,并且不再需要使用

在删除数据库表之前,要确保该表的数据已经被清空,否则会破坏外界约束

在删除数据库表之前,要去确保该表的所有索引都已经被删除。如果还存在索引,可能会导致删除失败

在删除数据库表之前,要确保该表的所有相关程序已经停止运行,以免影响其他程序的正常运行

http://www.dtcms.com/a/323707.html

相关文章:

  • 线上排查问题的一般流程是怎么样的?
  • Linux网络子系统架构分析
  • 检索增强生成:RAG(Retrieval Augmented Generation)
  • doubletrouble靶机通关练习笔记
  • 数学与应用数学:到底有啥区别?
  • 【LLM】大模型投机采样(Speculative Sampling)推理加速
  • 基于麦克风阵列电机噪声振动监测解决方案技术解析
  • C++算法练习:单词识别
  • 前端面试专栏-面试实战:33. 简历撰写技巧与优化
  • Linux操作系统如何不进入图形化界面
  • 鸿蒙开发中的Tabs组件详解
  • Java中Lambda表达式的常见用法和解析:从入门到实战
  • 嵌入式软件工程师笔试题(二)
  • 关于C语言本质的一些思考
  • PAT 1053 Path of Equal Weight
  • 力扣-41.缺失的第一个正数
  • 三极管在电路中的应用
  • 如何有效追踪您的关键词搜索排名
  • USRP B210 N210 X310 参数对比
  • Vue3 生命周期
  • 【文献阅读】我国生态问题鉴定与国土空间生态保护修复方向
  • 3.5.1_2 信道划分介质访问控制(下)
  • Java 大视界 -- Java 大数据在智能家居场景联动与用户行为模式挖掘中的应用(389)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘fastai’问题
  • TSMASTER二次开发:TSMaster_On_Event_Demo.py解析
  • 深度学习之张量
  • ros2 单线程与多线程
  • MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)
  • M8-11 RFID模块通过RS485转Profinet网关与PLC通信的配置指南
  • springboot 2.4跨域变化和swagger结合的问题