【MySQL底子篇】概述及SQL指令:DDL及DML

打印 上一主题 下一主题

主题 843|帖子 843|积分 2529

数据库是一个按照数据结构来构造、存储和管理数据的堆栈。以下是对数据库概念的详细解释:
定义与基本概念:
数据库是长期存储在计算机内的、有构造的、可共享的、统一管理的大量数据的聚集。
数据库不仅仅是数据的简单堆积,而是遵循肯定的规则和模式进行构造和管理的。
数据库中的数据可以包罗文本、数字、图像、音频等各种范例的信息。
数据库的作用:
数据库作为计算机系统中最紧张的组件之一,被广泛用于各种应用程序和业务领域。
数据库可以大概高效地管理和处置处罚大量数据,提供数据的存储、查询、更新和删除等功能。
名称全称简称
数据库存储数据的堆栈,数据是有构造地进行存储DB
数据库管理系统利用和管理数据库的大型软件DBMS
SQL操纵关系型数据库的编程语言,定义了一套操纵挂机呢习性数据库统一尺度SQL
数据模型:
 关系型数据库(RDBMS)
概念:创建在关系模型上,由多张相互毗连的二维表组成的数据库。
特点:
   1、使用表存储数据,格式统一便于维护
  2、使用SQL语言操纵,便于统一,使用方便
  1、SQL通用语法

1、SQL语句可以单行或多行誊写,以分号结尾。
2、SQL可以使用空格/缩进来加强语句的可读性。
3、MySQL数据库和SQL语句不区分巨细写,关键字建议使用大写
4、注释:
   ·        单行注释:--注释内容 或 # 注释内容(MySQL独有)
  ·        多行注释:/*注释内容*/
  2、SQL分类

分类全称说明
DDLDate Definition Language数据定义语句,用来定义数据库对象(数据库、表、字段)
DMLDate Manipulation Language数据操纵语言,用于对数据库表中的数据进行增编削
DQLDate Query Language数据查询语言,用于查询数据库中表的记录
DCLDate Control Language数据控制语言,用于创建数据库用户、控制数据库的访问权限
3、DDL

·  DDL - 数据库操纵

   查询:
  查询所有数据库:
  show databases;
  查询当前数据库
  select database();
  创建
  create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
  删除
  drop database [if exists] 数据库名;
  使用
  use 数据库名;
  1. show databases;
复制代码

我们可以看到一共有四个数据库,这四个数据库是安装MySQL成功后自带的数据库 
  1. mysql> show databases;
  2. +--------------------+
  3. | Database           |
  4. +--------------------+
  5. | information_schema |
  6. | mysql              |
  7. | performance_schema |
  8. | sys                |
  9. +--------------------+
  10. 4 rows in set (0.00 sec)
  11. mysql> create database if not exists test;/*字符集内容是可以省略的因为MySQL有一套自己的字符集,排序顺序也可以省略*/
  12. Query OK, 1 row affected (0.00 sec)
  13. mysql> show databases;
  14. +--------------------+
  15. | Database           |
  16. +--------------------+
  17. | information_schema |
  18. | mysql              |
  19. | performance_schema |
  20. | sys                |
  21. | test               |
  22. +--------------------+
  23. 5 rows in set (0.00 sec)
  24. mysql> drop database if exists test;
  25. Query OK, 0 rows affected (0.01 sec)
  26. mysql> /*假如我们想要使用某一个数据库所需要的指令为*/
  27. mysql> use mysql
  28. Database changed
  29. mysql> /*假如数据库创建太多,我们想要知道我们目前正在使用的数据库所需要的指令*/
  30. mysql> select database();
  31. +------------+
  32. | database() |
  33. +------------+
  34. | mysql      |
  35. +------------+
  36. 1 row in set (0.00 sec)
复制代码
·  DDL - 表操纵 - 查询

 查询当前数据库所有表
   show tables; 
  1. mysql> create database if not exists test;
  2. Query OK, 1 row affected (0.01 sec)
  3. mysql> use test;
  4. Database changed
  5. mysql> show tables;
  6. Empty set (0.00 sec)/*刚创建出的数据库没有表结构*/
  7. mysql> use mysql;
  8. Database changed
  9. mysql> show tables;
  10. +------------------------------------------------------+
  11. | Tables_in_mysql                                      |
  12. +------------------------------------------------------+
  13. | columns_priv                                         |
  14. | component                                            |
  15. | db                                                   |
  16. | default_roles                                        |
  17. | engine_cost                                          |
  18. | func                                                 |
  19. | general_log                                          |
  20. | global_grants                                        |
  21. | gtid_executed                                        |
  22. | help_category                                        |
  23. | help_keyword                                         |
  24. | help_relation                                        |
  25. | help_topic                                           |
  26. | innodb_index_stats                                   |
  27. | innodb_table_stats                                   |
  28. | ndb_binlog_index                                     |
  29. | password_history                                     |
  30. | plugin                                               |
  31. | procs_priv                                           |
  32. | proxies_priv                                         |
  33. | replication_asynchronous_connection_failover         |
  34. | replication_asynchronous_connection_failover_managed |
  35. | replication_group_configuration_version              |
  36. | replication_group_member_actions                     |
  37. | role_edges                                           |
  38. | server_cost                                          |
  39. | servers                                              |
  40. | slave_master_info                                    |
  41. | slave_relay_log_info                                 |
  42. | slave_worker_info                                    |
  43. | slow_log                                             |
  44. | tables_priv                                          |
  45. | time_zone                                            |
  46. | time_zone_leap_second                                |
  47. | time_zone_name                                       |
  48. | time_zone_transition                                 |
  49. | time_zone_transition_type                            |
  50. | user                                                 |
  51. +------------------------------------------------------+
  52. 38 rows in set (0.00 sec)
复制代码
查询表结构 
    desc 表名
  1. mysql> desc tr_user
  2.     -> ;
  3. +-------+-------------+------+-----+---------+-------+
  4. | Field | Type        | Null | Key | Default | Extra |
  5. +-------+-------------+------+-----+---------+-------+
  6. | id    | int         | YES  |     | NULL    |       |
  7. | name  | varchar(50) | YES  |     | NULL    |       |
  8. | age   | int         | YES  |     | NULL    |       |
  9. | sex   | varchar(1)  | YES  |     | NULL    |       |
  10. +-------+-------------+------+-----+---------+-------+
  11. 4 rows in set (0.01 sec)
复制代码
 查询指定表的建表语句
   show create table 表名;
  1. mysql> show create table tr_user;
  2. +---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  3. | Table   | Create Table
  4.                                                            |
  5. +---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  6. | tr_user | CREATE TABLE `tr_user` (
  7.   `id` int DEFAULT NULL COMMENT '编号',
  8.   `name` varchar(50) DEFAULT NULL COMMENT '姓名',
  9.   `age` int DEFAULT NULL COMMENT '年龄',
  10.   `sex` varchar(1) DEFAULT NULL COMMENT '性别'
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表' |
  12. +---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  13. 1 row in set (0.01 sec)
复制代码
·  DDL - 表操纵 - 创建 

   create table 表名(
          字段1 字段1范例[comment 字段1注释],
           字段2 字段2范例[comment 字段2注释],
          ......
          字段n 字段n范例[comment 字段n注释]
  )[comment 表注释];
  1. mysql> use test;
  2. Database changed
  3. mysql> create table tr_user(
  4.     -> id int comment '编号',
  5.     -> name varchar(50) comment '姓名',
  6.     -> age int comment '年龄',
  7.     -> sex varchar(1) comment '性别'
  8.     -> )comment '用户表';
  9. Query OK, 0 rows affected (0.03 sec)
  10. mysql> show tables;
  11. +----------------+
  12. | Tables_in_test |
  13. +----------------+
  14. | tr_user        |
  15. +----------------+
  16. 1 row in set (0.00 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)
  1. mysql> alter table tr_user add nickname varchar(20) comment'昵称';
  2. Query OK, 0 rows affected (0.03 sec)
  3. Records: 0  Duplicates: 0  Warnings: 0
  4. mysql> desc tr_user;
  5. +----------+-------------+------+-----+---------+-------+
  6. | Field    | Type        | Null | Key | Default | Extra |
  7. +----------+-------------+------+-----+---------+-------+
  8. | id       | int         | YES  |     | NULL    |       |
  9. | name     | varchar(50) | YES  |     | NULL    |       |
  10. | age      | int         | YES  |     | NULL    |       |
  11. | sex      | varchar(1)  | YES  |     | NULL    |       |
  12. | nickname | varchar(20) | YES  |     | NULL    |       |
  13. +----------+-------------+------+-----+---------+-------+
  14. 5 rows in set (0.00 sec)
复制代码
 修改数据范例
   ALTER TABLE 表名 MODIFY 字段名 新数据范例(长度);
  修改字段名和字段范例
   ALTER TABLE 表名 CHANGE 旧字段名 新字段名 范例(长度) [comment 注释] [束缚]; 
  比如:将tr_user表中的nickname修改为username,范例为varchar(30)
  1. alter table tr_user change nickname username varchar(30) comment'昵称';
  2. Query OK, 0 rows affected (0.01 sec)
  3. Records: 0  Duplicates: 0  Warnings: 0
  4. mysql> desc tr_user;
  5. +----------+-------------+------+-----+---------+-------+
  6. | Field    | Type        | Null | Key | Default | Extra |
  7. +----------+-------------+------+-----+---------+-------+
  8. | id       | int         | YES  |     | NULL    |       |
  9. | name     | varchar(50) | YES  |     | NULL    |       |
  10. | age      | int         | YES  |     | NULL    |       |
  11. | sex      | varchar(1)  | YES  |     | NULL    |       |
  12. | username | varchar(30) | YES  |     | NULL    |       |
  13. +----------+-------------+------+-----+---------+-------+
  14. 5 rows in set (0.00 sec)
复制代码
删除字段 
    ALTER TABLE 表名 DROP 字段名;
  比如:将tr_user表的username删除
  1. alter table tr_user drop username;
  2. Query OK, 0 rows affected (0.01 sec)
  3. Records: 0  Duplicates: 0  Warnings: 0
复制代码
 修改表名
   ALTER TABLE 表名 RENAME TO 新表名;
  比如:将表名tr_user修改为新表名user_tr 
  1. alter table tr_user rename to user_tr;
  2. Query OK, 0 rows affected (0.01 sec)
复制代码
  ·  DDL - 表操纵 - 删除

删除表
   DROP TABLE [IF EXISTS] 表名; 
  删除指定表,并重新创建该表
   TRUNCATE TABLE 表名; 
  1. mysql> show tables;
  2. +----------------+
  3. | Tables_in_test |
  4. +----------------+
  5. | tr_user        |
  6. | user           |
  7. +----------------+
  8. 2 rows in set (0.00 sec)
复制代码
 比如:我们想要删除user这个表名
  1. drop table if exists user;
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)
  3. mysql> show tables;
  4. +----------------+
  5. | Tables_in_test |
  6. +----------------+
  7. | tr_user        |
  8. +----------------+
  9. 1 row in set (0.00 sec)
复制代码
  1. truncate table tr_user;
  2. Query OK, 0 rows affected (0.02 sec)
  3. mysql> show tables;
  4. +----------------+
  5. | Tables_in_test |
  6. +----------------+
  7. | tr_user        |
  8. +----------------+
  9. 1 row in set (0.00 sec)
  10. /*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,...);
  注意:
插入数据时,指定字段数据必要与值的顺序是一一对应的;
字符串和日期型数据应该包含在引号中;
插入数据的巨细,应该在字段的规定范围内
  1. /*为指定字段添加数据*/
  2. insert into tr_user(id, name, age, sex) values(1,'李三',68,'男');
  3. #给全部字段添加数据
  4. insert into tr_user values(2,'狗蛋',20,'男');
  5. #批量添加数据
  6. insert into tr_user value(3,'二狗',18,'男'),(4,'林黛玉',25,'女');
  7. select * from tr_user;
复制代码

· DML - 修改数据

   UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件];
  注意:修改语句的条件可以有,也可以没有,假如没有条件,则会修改整张表的所有数据。 
  1. update tr_user set name='张无忌' where id=1;
  2. #修改id为1的数据,将name修改为小昭,sex改为女
  3. update tr_user set name='小昭',sex='女' where id=1;
  4. #修改表中的sex,全部改为男
  5. update tr_user set sex='男' where id;
  6. select * from tr_user;
复制代码
 · DML - 删除数据

   DELETE FROM 表名 [WHERE 条件]
  注意:
DELETE语句的条件可以有,也可以没有,假如没有条件,则会删除整张表的所有数据;
DELETE语句不能删除某一个字段的值(可以使用UPDATE) 。
  1. #删除id=1的数据
  2. delete from tr_user where id=1;
  3. #删除所有数据
  4. delete from tr_user where id;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表