數據庫是一個按照數據結構來組織、存儲和管理數據的倉庫。以下是對數據庫概念的詳細解釋:
定義與基本概念:
數據庫是長期存儲在計算機內的、有組織的、可共享的、統一管理的大量數據的集合。
數據庫不僅僅是數據的簡單堆積,而是遵循一定的規則和模式進行組織和管理的。
數據庫中的數據可以包括文本、數字、圖像、音頻等各種類型的信息。
數據庫的作用:
數據庫作為計算機系統中最重要的組件之一,被廣泛用于各種應用程序和業務領域。
數據庫能夠高效地管理和處理大量數據,提供數據的存儲、查詢、更新和刪除等功能。
名稱 | 全稱 | 簡稱 |
數據庫 | 存儲數據的倉庫,數據是有組織地進行存儲 | DB |
數據庫管理系統 | 操縱和管理數據庫的大型軟件 | DBMS |
SQL | 操作關系型數據庫的編程語言,定義了一套操作掛機呢習性數據庫統一標準 | SQL |
數據模型:
?關系型數據庫(RDBMS)
概念:建立在關系模型上,由多張相互連接的二維表組成的數據庫。
特點:
1、使用表存儲數據,格式統一便于維護
2、使用SQL語言操作,便于統一,使用方便
1、SQL通用語法
1、SQL語句可以單行或多行書寫,以分號結尾。
2、SQL可以使用空格/縮進來增強語句的可讀性。
3、MySQL數據庫和SQL語句不區分大小寫,關鍵字建議使用大寫
4、注釋:
·? ? ? ? 單行注釋:--注釋內容 或 # 注釋內容(MySQL獨有)
·? ? ? ? 多行注釋:/*注釋內容*/
2、SQL分類
分類 | 全稱 | 說明 |
DDL | Date Definition Language | 數據定義語句,用來定義數據庫對象(數據庫、表、字段) |
DML | Date Manipulation Language | 數據操作語言,用于對數據庫表中的數據進行增刪改 |
DQL | Date Query Language | 數據查詢語言,用于查詢數據庫中表的記錄 |
DCL | Date Control Language | 數據控制語言,用于創建數據庫用戶、控制數據庫的訪問權限 |
3、DDL
·? DDL - 數據庫操作
查詢:
查詢所有數據庫:
show databases;
查詢當前數據庫
select database();
創建
create database [if not exists] 數據庫名 [default charset 字符集] [collate 排序規則];
刪除
drop database [if exists] 數據庫名;
使用
use 數據庫名;
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 - 表操作 - 查詢
?查詢當前數據庫所有表
show tables;?
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)
查詢表結構?
?desc 表名
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)
?查詢指定表的建表語句
show create table 表名;
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 - 表操作 - 創建?
create table 表名(
? ? ? ? 字段1 字段1類型[comment 字段1注釋],
?????????字段2?字段2類型[comment 字段2注釋],
? ? ? ? ......
????????字段n?字段n類型[comment 字段n注釋]
)[comment 表注釋];
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 - 表操作 - 修改
添加字段
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: 0mysql> 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)
?修改數據類型
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: 0mysql> 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)
刪除字段?
?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 表名;?
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)
下載安裝:
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,'女');
select * from tr_user;
· DML - 修改數據
UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE?條件];
注意:修改語句的條件可以有,也可以沒有,如果沒有條件,則會修改整張表的所有數據。?
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 FROM 表名?[WHERE?條件]
注意:
DELETE語句的條件可以有,也可以沒有,如果沒有條件,則會刪除整張表的所有數據;
DELETE語句不能刪除某一個字段的值(可以使用UPDATE)?。
#刪除id=1的數據
delete from tr_user where id=1;
#刪除所有數據
delete from tr_user where id;