数据库是一个按照数据结构来组织、存储和管理数据的仓库。以下是对数据库概念的详细解释:
定义与基本概念:
数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。
数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。
数据库的作用:
数据库作为计算机系统中最重要的组件之一,被广泛用于各种应用程序和业务领域。
数据库能够高效地管理和处理大量数据,提供数据的存储、查询、更新和删除等功能。
名称 | 全称 | 简称 |
数据库 | 存储数据的仓库,数据是有组织地进行存储 | db |
数据库管理系统 | 操纵和管理数据库的大型软件 | dbms |
sql | 操作关系型数据库的编程语言,定义了一套操作挂机呢习性数据库统一标准 | sql |
数据模型:
关系型数据库(rdbms)
概念:建立在关系模型上,由多张相互连接的二维表组成的数据库。
特点:
1、sql通用语法
1、sql语句可以单行或多行书写,以分号结尾。
2、sql可以使用空格/缩进来增强语句的可读性。
3、mysql数据库和sql语句不区分大小写,关键字建议使用大写
4、注释:
2、sql分类
分类 | 全称 | 说明 |
ddl | date definition language | 数据定义语句,用来定义数据库对象(数据库、表、字段) |
dml | date manipulation language | 数据操作语言,用于对数据库表中的数据进行增删改 |
dql | date query language | 数据查询语言,用于查询数据库中表的记录 |
dcl | date control language | 数据控制语言,用于创建数据库用户、控制数据库的访问权限 |
3、ddl
· ddl - 数据库操作
show databases;
我们可以看到一共有四个数据库,这四个数据库是安装mysql成功后自带的数据库
mysql> show databases;
+--------------------+
| database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database if not exists test;/*字符集内容是可以省略的因为mysql有一套自己的字符集,排序顺序也可以省略*/
query ok, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> drop database if exists test;
query ok, 0 rows affected (0.01 sec)
mysql> /*假如我们想要使用某一个数据库所需要的指令为*/
mysql> use mysql
database changed
mysql> /*假如数据库创建太多,我们想要知道我们目前正在使用的数据库所需要的指令*/
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)
· ddl - 表操作 - 查询
查询当前数据库所有表
mysql> create database if not exists test;
query ok, 1 row affected (0.01 sec)
mysql> use test;
database changed
mysql> show tables;
empty set (0.00 sec)/*刚创建出的数据库没有表结构*/
mysql> use mysql;
database changed
mysql> show tables;
+------------------------------------------------------+
| tables_in_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version |
| replication_group_member_actions |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+------------------------------------------------------+
38 rows in set (0.00 sec)
查询表结构
mysql> desc tr_user
-> ;
+-------+-------------+------+-----+---------+-------+
| field | type | null | key | default | extra |
+-------+-------------+------+-----+---------+-------+
| id | int | yes | | null | |
| name | varchar(50) | yes | | null | |
| age | int | yes | | null | |
| sex | varchar(1) | yes | | null | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
查询指定表的建表语句
mysql> show create table tr_user;
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| table | create table
|
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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='用户表' |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
· ddl - 表操作 - 创建
mysql> use test;
database changed
mysql> create table tr_user(
-> id int comment '编号',
-> name varchar(50) comment '姓名',
-> age int comment '年龄',
-> sex varchar(1) comment '性别'
-> )comment '用户表';
query ok, 0 rows affected (0.03 sec)
mysql> show tables;
+----------------+
| tables_in_test |
+----------------+
| tr_user |
+----------------+
1 row in set (0.00 sec)
· ddl - 表操作 - 数据类型
分类 | 类型 | 大小 | 有符号范围 | 无符号范围 | 描述 |
数值类型 | tinyint | 1byte | (-128,127) | (0,255) | 小整数值 |
smallint | 3byte | (-32768,32767) | (0,65535) | 大整数值 | |
mediumint | 3byte | (-8388608,8388607) | (0,16777215) | 大整数值 | |
int或integer | 4byte | (-2147483648,-2147483647) | (0,4294967259) | 大整数值 | |
bigint | 8byte | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 | |
float | 4byte | (-3.402823466 e+308,402823466351 e+308) | 0和(1.175494351 e-38,402823466 e+38) | 单精度浮点数 | |
double | 8byte | (-1.7976931348623157 e+308,1.7976931348623157 e+308) | 0和(2.2250738585072014 e-308,1.7976931348623157 e+308) | 双精度浮点数 | |
decimal | 依赖于m(精度)和d(标度)的值 | 依赖于m(精度)和d(标度)的值 | 小数值 |
分类 | 类型 | 大小 | 描述 |
字符串类型 | char | 0-255 byte | 定长字符串 |
varchar | 0-65535 byte | 变长字符串 | |
tinyblob | 0-255 byte | 不超过255个字符的二进制数据 | |
tinytext | 0-255 byte | 短文本字符串 | |
blob | 0-65535 byte | 二进制形式的长文本数据 | |
text | 0-65535 byte | 长文本数据 | |
mediumblob | 0-16777215 byte | 二进制形式的中等长度文本数据 | |
mediumtext | 0-16777215 byte | 中等长度文本数据 | |
longblob | 0-4294967259 byte | 二进制形式的极大文本形式 | |
longtext | 0-4294967259 byte | 极大文本数据 |
注意:char(10)代表当前字符串能够存储的最大长度即10个字符,一旦超出就会报错与varchar(10)的区别是char(10)是不管我们存储多大字节的数据,都占用10个字节(其他位置用空格代替);而varchar(10)会根据数据的大小确定,但最大不能超过10个字节,大大节省了空间占用。 但char的性能更好,varchar的性能较差这是因为varchar需要内容来计算所占空间的大小。
分类 | 类型 | 大小 | 范围 | 格式 | 描述 |
日期类型 | date | 3 | 1000- 01- 01至9999- 12- 31 | yyyy-mm-dd | 日期值 |
time | 3 | -838:59:59至839:59:59 | hh:mm:ss | 时间值或持续时间 | |
year | 1 | 1901至2155 | yyyy | 年份值 | |
datatime | 8 | 1000- 01- 01 00:00:00至9999- 12- 31 23:59:59 | yyyy-mm-dd hh:mm:ss | 混合日期和时间值 | |
timestamp | 4 | 1970- 01- 01 00:00:01至2038- 01- 19 03:14:07 | yyyy-mm-dd hh:mm:ss | 混合日期和时间值、时间戳 |
· ddl - 表操作 - 修改
添加字段
比如:为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
mysql> desc tr_user;
+----------+-------------+------+-----+---------+-------+
| 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 | |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
修改数据类型
修改字段名和字段类型
比如:将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
mysql> desc tr_user;
+----------+-------------+------+-----+---------+-------+
| 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 | |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
删除字段
比如:将tr_user表的username删除
alter table tr_user drop username;
query ok, 0 rows affected (0.01 sec)
records: 0 duplicates: 0 warnings: 0
修改表名
比如:将表名tr_user修改为新表名user_tr
alter table tr_user rename to user_tr;
query ok, 0 rows affected (0.01 sec)
· ddl - 表操作 - 删除
删除表
删除指定表,并重新创建该表
mysql> show tables;
+----------------+
| tables_in_test |
+----------------+
| tr_user |
| user |
+----------------+
2 rows in set (0.00 sec)
比如:我们想要删除user这个表名
drop table if exists user;
query ok, 0 rows affected, 1 warning (0.00 sec)
mysql> show tables;
+----------------+
| tables_in_test |
+----------------+
| tr_user |
+----------------+
1 row in set (0.00 sec)
truncate table tr_user;
query ok, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| tables_in_test |
+----------------+
| tr_user |
+----------------+
1 row in set (0.00 sec)
/*truncate的这种形式删除指定表,表名还在,但表的内容已经不存在了,仅仅留下了空表*/
4、mysql图形化界面(datagrip)
下载安装:
激活:datagtip如何跳过试用设置永久使用?(windows2021-2023版本通用)_datagrip无限试用-csdn博客
5、dml
dml全称为data manipulation language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
· dml - 添加数据
1、给指定字段添加数据
2、给全部字段添加数据
3、批量添加数据
注意:
插入数据时,指定字段数据需要与值的顺序是一一对应的;
字符串和日期型数据应该包含在引号中;
插入数据的大小,应该在字段的规定范围内
/*为指定字段添加数据*/
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,'女');
select * from tr_user;
· dml - 修改数据
注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
update tr_user set name='张无忌' where id=1;
#修改id为1的数据,将name修改为小昭,sex改为女
update tr_user set name='小昭',sex='女' where id=1;
#修改表中的sex,全部改为男
update tr_user set sex='男' where id;
select * from tr_user;
· dml - 删除数据
注意:
delete语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据;
delete语句不能删除某一个字段的值(可以使用update) 。
#删除id=1的数据
delete from tr_user where id=1;
#删除所有数据
delete from tr_user where id;
发表评论