数据库是一个按照数据结构来组织、存储和管理数据的仓库。以下是对数据库概念的详细解释:
定义与基本概念:
数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。
数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。
数据库的作用:
数据库作为计算机系统中最重要的组件之一,被广泛用于各种应用程序和业务领域。
数据库能够高效地
管理和处理大量
数据,提供
数据的
存储、
查询、
更新和
删除等
功能。
数据模型:
关系型数据库(RDBMS)
概念:建立在关系模型上,由多张相互连接的二维表组成的数据库。
特点:
1、使用表存储数据,格式统一便于维护
2、使用SQL语言操作,便于统一,使用方便
1、SQL通用语法
1、SQL语句可以单行或多行书写,以分号结尾。
2、SQL可以使用空格/缩进来增强语句的可读性。
3、MySQL数据库和SQL语句不区分大小写,关键字建议使用大写
4、注释:
· 单行注释:--注释内容 或 # 注释内容(MySQL独有)
· 多行注释:/*注释内容*/
2、SQL分类
3、DDL
查询:
查询所有数据库:
show databases;
查询当前数据库
select database();
创建
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
删除
drop database [if exists] 数据库名;
使用
use 数据库名;
show databases;
我们可以看到一共有四个数据库,这四个数据库是安装MySQL成功后自带的数据库
mysql> create database if not exists test;/*字符集内容是可以省略的因为MySQL有一套自己的字符集,排序顺序也可以省略*/
Query OK, 1 row affected (0.00 sec)
mysql> drop database if exists test;
Query OK, 0 rows affected (0.01 sec)
mysql
> /*假如我们想要使用某一个数据库所需要的指令为*/
mysql
> /*假如数据库创建太多,我们想要知道我们目前正在使用的数据库所需要的指令*/
mysql> select database();
· DDL - 表操作 - 查询
查询当前数据库所有表
show tables;
mysql> create database if not exists test;
Query OK, 1 row affected (0.01 sec)
Empty set (
0.00 sec)
/*刚创建出的数据库没有表结构*/
+------------------------------------------------------+
+------------------------------------------------------+
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version |
| replication_group_member_actions |
| time_zone_leap_second |
| time_zone_transition_type |
+------------------------------------------------------+
38 rows in set (0.00 sec)
查询表结构
desc 表名
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
查询指定表的建表语句
show create table 表名;
mysql> show create table tr_user;
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tr_user | CREATE TABLE `tr_user` (
`id` int DEFAULT NULL COMMENT 编号,
`name` varchar(50) DEFAULT NULL COMMENT 姓名,
`age` int DEFAULT NULL COMMENT 年龄,
`sex` varchar(1) DEFAULT NULL COMMENT 性别
) ENGINE
=InnoDB
DEFAULT CHARSET
=utf8mb4
COLLATE=utf8mb4_0900_ai_ci COMMENT
=用户表 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
· DDL - 表操作 - 创建
create table 表名(
字段1 字段1类型[comment 字段1注释],
字段2 字段2类型[comment 字段2注释],
......
字段n 字段n类型[comment 字段n注释]
)[comment 表注释];
mysql> create table tr_user(
-> name varchar(50) comment 姓名,
-> sex varchar(1) comment 性别
Query OK, 0 rows affected (0.03 sec)
· DDL - 表操作 - 数据类型
分类类型大小有符号范围无符号范围描述数值类型TINYINT1byte(-128,127)(0,255)小整数值SMALLINT3byte(-32768,32767)(0,65535)大整数值MEDIUMINT3byte(-8388608,8388607)(0,16777215)大整数值INT或INTEGER4byte(-2147483648,-2147483647)(0,4294967259)大整数值BIGINT8byte(-2^63,2^63-1)(0,2^64-1)极大整数值FLOAT4byte(-3.402823466 E+308,402823466351 E+308)0和(1.175494351 E-38,402823466 E+38)单精度浮点数DOUBLE8byte(-1.7976931348623157 E+308,1.7976931348623157 E+308)0和(2.2250738585072014 E-308,1.7976931348623157 E+308)双精度浮点数DECIMAL依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值小数值
分类类型大小描述字符串类型CHAR0-255 byte定长字符串VARCHAR0-65535 byte变长字符串TINYBLOB0-255 byte不超过255个字符的二进制
数据TINYTEXT0-255 byte短文本字符串BLOB0-65535 byte二进制形式的长文本
数据TEXT0-65535 byte长文本
数据MEDIUMBLOB0-16777215 byte二进制形式的中等长度文本
数据MEDIUMTEXT0-16777215 byte中等长度文本
数据LONGBLOB0-4294967259 byte二进制形式的极大文本形式LONGTEXT0-4294967259 byte极大文本
数据
注意:char(10)代表当前字符串能够存储的最大长度即10个字符,一旦超出就会报错与varchar(10)的区别是char(10)是不管我们存储多大字节的数据,都占用10个字节(其他位置用空格代替);而varchar(10)会根据数据的大小确定,但最大不能超过10个字节,大大节省了空间占用。 但char的性能更好,varchar的性能较差这是因为varchar需要内容来计算所占空间的大小。
分类类型大小范围格式描述日期类型DATE31000- 01- 01至9999- 12- 31YYYY-MM-DD日期值TIME3-838:59:59至839:59:59HH:MM:SS时间值或持续时间YEAR11901至2155YYYY年份值DATATIME81000- 01- 01 00:00:00至9999- 12- 31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP41970- 01- 01 00:00:01至2038- 01- 19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值、时间戳
· DDL - 表操作 - 修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
比如:为tr_user表添加一个新的字段’昵称‘为nickname,类型为varchar(20)
mysql> alter table tr_user add nickname varchar(20) comment昵称;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
| nickname | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
比如:将tr_user表中的nickname修改为username,类型为varchar(30)
alter table tr_user change nickname username varchar(30) comment昵称;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
| username | varchar(30) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
删除字段
ALTER TABLE 表名 DROP 字段名;
比如:将tr_user表的username删除
alter table tr_user drop username;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
比如:将表名tr_user修改为新表名user_tr
alter table tr_user rename to user_tr;
Query OK, 0 rows affected (0.01 sec)
· DDL - 表操作 - 删除
删除表
DROP TABLE [IF EXISTS] 表名;
删除指定表,并重新创建该表
TRUNCATE TABLE 表名;
比如:我们想要删除user这个表名
drop table if exists user;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
/*truncate的这种形式删除指定表,表名还在,但表的内容已经不存在了,仅仅留下了空表*/
4、MySQL图形化界面(DataGrIP)
下载安装:
DataGrip下载安装及使用教程(详细版)-CSDN博客
激活:DataGtip如何跳过试用设置永久使用?(Windows2021-2023版本通用)_datagrip无限试用-CSDN博客
5、DML
DML全称为Data ManIPulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
· DML - 添加数据
1、给指定字段添加数据
INSERT INTO 表名 (字段1,字段2,...) VALUES(值1,值2,...);
2、给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...);
3、批量添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
注意:
插入数据时,指定字段数据需要与值的顺序是一一对应的;
字符串和日期型数据应该包含在引号中;
插入数据的大小,应该在字段的规定范围内
insert into tr_user(id, name, age, sex) values(1,李三,68,男);
insert into tr_user values(2,狗蛋,20,男);
insert into tr_user value(3,二狗,18,男),(4,林黛玉,25,女);
UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件];
注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
update tr_user set name=张无忌 where id=1;
update tr_user set name=小昭,sex=女 where id=1;
update tr_user set sex=男 where id;
DELETE FROM 表名 [WHERE 条件]
注意:
DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据;
DELETE语句不能删除某一个字段的值(可以使用UPDATE) 。
delete from tr_user where id=1;
delete from tr_user where id;