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 unsigned | 1 | [-128,127] | [0,255] |
smallint | 2 | [-32768,32767] | [0,65535] |
mediumint | 3 | [-8388608,8388607] | [0,4294967295] |
int | 4 | [-2147483648,2147483647] | [0,4294967295] |
bigint | 8 | [-9223372036854775808,9223372036854775807] | [0,18446744073709551616] |
注意:
整型(N)表现形式:有时代码写法为int(10),表示数字宽度限制,并且int永远占4个字节,N表示的是显示宽度,不足则补0,超过长度则会无视长度直接显示整个数字
浮点型
数据类型 | 字节数 | 备注 |
float | 4 | 单精度浮点型 7 |
double | 8 | 双精度浮点型 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类型
数据类型 | 字节数 | 格式 | 备注 |
date | 3 | yyyy-MM-dd | 存储日期值 |
time | 3 | HH:mm:ss | 存储时分秒 |
datetime | 8 | yyyy-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删除的注意事项
删除数据库表之前,一定要备份数据,以免数据丢失
在删除数据库表之前,要确保该表没有被其他的表所引用,否则可能会破坏外界约束
在删除数据库之前,要确保该表的数据已经备份,并且不再需要使用
在删除数据库表之前,要确保该表的数据已经被清空,否则会破坏外界约束
在删除数据库表之前,要去确保该表的所有索引都已经被删除。如果还存在索引,可能会导致删除失败
在删除数据库表之前,要确保该表的所有相关程序已经停止运行,以免影响其他程序的正常运行