关系型数据库大王Mysql——DDL语句操作示例

一 数据库存储原理

  1. 通过客户端输入SQL语句
  2. 先查询内存中是否有匹配的缓存,有就执行返回结果
  3. 缓存没有就通过解析器先解析sql语句是否规范
  4. 语法检测后,通过sql语句开始定位,寻找到数据后加上索引
  5. 结合存储引擎开始执行存入数据

二 SQL语句基础

2.1 sql语句功能

sql:结构化查询语言(structured Query Language):定义对数据库(库、 表、列、索引)的操作,标准语言。

2.2 sql语句的分类

  • DDL(Data Definition Language):数据库定义语言,创建库,创建表操 作,eg:Create、drop、alter、rename
  • DML(Data Manipulation Language):数据库操作语言,增删改查, eg:insert、delete、update、select
  • DCL(Data Control Language):数据库控制语言,定义数据库、表、字 段、用户访问权限和安全的操作,eg:Grant 、revoke
  • Transaction Control:事务控制 commit、rollback

三 Mysql库表操作(DDL)

3.1 登录解析

mysql 复制代码
#登录命令
mysql -uroot -p密码

#mysql常见命令
mysql> \h

For information about MySQL products and services, visit:
   http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
   http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
   https://shop.mysql.com/

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
notee     (\t) Don't write into outfile.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
query_attributes Sets string parameters (name1 value1 name2 value2 ...) for the next query to pick up.

For server side help, type 'help contents'

让其他主机能远程登录上本地mysql

mysql 复制代码
#修改root用户的主机为任意
mysql> update mysql.user set host = '%' where user = 'root';

#查看权限表
mysql> select host,user from mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
4 rows in set (0.00 sec)


#刷新权限表,等价于重启服务
mysql> flush privileges;

#测试
mysql -uroot -p123456 -h192.22.9.101

3.2 库操作

1.库的查看

mysql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+               
| information_schema |		#存储数据库对象信息,用户表信息,列等
| mysql              |		#存储了系统的用户权限信息及帮助信息
| performance_schema |		#存储数据库服务器性能参数
| sys                |		#存储数据版本信息
+--------------------+
4 rows in set (0.00 sec)

mysql> show databases like '%hz%';		#模糊查询
+-----------------+
| Database (%hz%) |
+-----------------+
| hz_test         |
+-----------------+
1 row in set (0.00 sec)

#查询数据库的创建语句,建议使用反引号``
mysql> show create database hz_test;
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                   |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| hz_test  | CREATE DATABASE `hz_test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

2.库的创建

mysql 复制代码
mysql> create database hz_test;	
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+                |
| hz_test            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> create database if not exists hz_test1;	#先判断是否存在再创建数据库,存在不会报错
Query OK, 1 row affected (0.02 sec)

3.库的切换

mysql 复制代码
#进入指定库
mysql> use hz_test
Database changed

#查看当前进入的库
mysql> select database();
+------------+
| database() |
+------------+
| hz_test    |
+------------+
1 row in set (0.00 sec)

#查看数据库的版本
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.26    |
+-----------+
1 row in set (0.00 sec)

#查看当前使用用户
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

4.删除数据库

mysql 复制代码
mysql> drop database hz_test ;
Query OK, 0 rows affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| hz_test1           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> drop database  if exists hz_test;
Query OK, 0 rows affected, 1 warning (0.01 sec)

3.3 数据库字符集与校验规则

1.数据库字符集查看

mysql 复制代码
mysql> show variables like 'character%';
+--------------------------+----------------------------------------------+
| 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       | D:\Mysql\mysql-8.0.26-winx64\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set, 1 warning (0.00 sec)

更改数据库字符集

mysql 复制代码
#更改配置文件my.ini客户端默认字符集
default-character-set=utf8mb4

#更改后重新登录mysql进入查看

!NOTE

utf8与utf8mb4的区别:

utf8的中文字符内存空间占用3字节,且不支持4字节的Unicode编码

而utf8m4中文字符内存空间占用四字节,直接Unicode编码

2.查询校验规则

mysql 复制代码
mysql> show collation;
| utf8mb4_zh_0900_as_cs      | utf8mb4  | 308 |         | Yes      |       0 | NO PAD        |
| utf8_bin                   | utf8     |  83 |         | Yes      |       1 | PAD SPACE     |
| utf8_croatian_ci           | utf8     | 213 |         | Yes      |       8 | PAD SPACE     |

!NOTE

bin:以二进制编码表示

ci:大小写不敏感

cs:大小写敏感

3.4 数据库数据类型

常用的数据库数据类型:

分类 备注和说明 数据类型 说明
二进制数据类型 存储非字符和文本的数据 BLOB 可用来存储图像
文本数据类型 字符数据包括任意字符,符号或数字字符的组合 char 固定长度的非Unicode字符
varchar 可变长度非Unicode数据
text
日期和时间 日期和时间再单引号内输入 time 时间
date 日期
datetime 日期和时间
数值型数据 该数据仅包含数字,包括正数,负数及其浮点数 int,smallint 整数
float,double 浮点数
货币数据类型 用于精确的财务数据 decimal 定点数
Bit数据类型 表示是/否的数据 bit 存储布尔数据类型

!NOTE

char与varchar的区别,char固定长度未使用到的长度会被空格补充会浪费存储资源,而varchar未被使用到的空间不会被填充;两者在数据的查询时,char会更快查询到结果

因此char更适合读写频繁的场景,而varchar适合存储长度差异大的字符串(如文章摘要、地址),可减少磁盘和内存消耗

3.5 表操作

1.创建表

mysql 复制代码
#使用表
mysql> use hz_test1;
Database changed

#查看数据库中的表
mysql> show tables;
Empty set (0.00 sec)

#创建表
mysql> create table user_list(
    -> user_id int(10),
    -> user_name varchar(255),
    -> passwd varchar(255)
    -> );

#查看数据库中的表
mysql> show tables;
+--------------------+
| Tables_in_hz_test1 |
+--------------------+
| user_list          |
+--------------------+
1 row in set (0.00 sec)

#展示表的创建语句
mysql> show create table user_list;	
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                              |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user_list | CREATE TABLE `user_list` (
  `user_id` int DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `passwd` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
#engine 引擎
#charset 字符集

#查看表的详细信息
mysql> desc user_list;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| user_id   | int          | YES  |     | NULL    |       |
| user_name | varchar(255) | YES  |     | NULL    |       |
| passwd    | varchar(255) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

2.操作表

mysql 复制代码
#修改表中字段的类型
mysql> alter table user_list modify user_name varchar(20);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table user_list modify passwd int(10);
Query OK, 0 rows affected, 1 warning (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> desc user_list;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| user_id   | int         | YES  |     | NULL    |       |
| user_name | varchar(20)| YES  |     | NULL    |       |
| passwd    | int         | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

#修改表中的字段和类型
mysql> alter table user_list change user_name user_name_vip varchar(255);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user_list;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| user_id       | int          | YES  |     | NULL    |       |
| user_name_vip | varchar(255) | YES  |     | NULL    |       |
| passwd        | int          | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

#添加表种的字段
mysql> alter table user_list add name varchar(255);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user_list;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| user_id   | int          | YES  |     | NULL    |       |
| user_name | varchar(255) | YES  |     | NULL    |       |
| passwd    | int          | YES  |     | NULL    |       |
| name      | varchar(255) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

#删除表中的字段
mysql> alter table user_list drop name;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user_list;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| user_id   | int          | YES  |     | NULL    |       |
| user_name | varchar(255) | YES  |     | NULL    |       |
| passwd    | int          | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+


#修改表名
#第一种修改表名
mysql> alter table user_list rename admin_user;	
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+--------------------+
| Tables_in_hz_test1 |
+--------------------+
| admin_user         |
+--------------------+
1 row in set (0.00 sec)

#第二种修改表名
mysql> rename table admin_user to user;
Query OK, 0 rows affected (0.02 sec)

#删除表
mysql> drop table if exists user;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
Empty set (0.00 sec)

ame admin_user;

Query OK, 0 rows affected (0.03 sec)

mysql> show tables;

±-------------------+

| Tables_in_hz_test1 |

±-------------------+

| admin_user |

±-------------------+

1 row in set (0.00 sec)

#第二种修改表名

mysql> rename table admin_user to user;

Query OK, 0 rows affected (0.02 sec)

#删除表

mysql> drop table if exists user;

Query OK, 0 rows affected (0.02 sec)

mysql> show tables;

Empty set (0.00 sec)

复制代码
相关推荐
言之。3 小时前
Chroma 开源的 AI 应用搜索与检索数据库(即向量数据库)
数据库·人工智能·开源
来旺3 小时前
互联网大厂Java面试全解析及三轮问答专项
java·数据库·spring boot·安全·缓存·微服务·面试
cr7xin4 小时前
基于Session和Redis实现短信验证码登录
数据库·redis·缓存
乌暮4 小时前
数据库--视图、索引
数据库
Web3&Basketball4 小时前
达梦数据库性能调优总结
数据库·oracle
-Xie-4 小时前
Mysql杂志(三十三)——锁
数据库·mysql
情深不寿3175 小时前
MySQL————索引
数据库·mysql
三十_5 小时前
TypeORM 一对一关联篇:掌握实体关系与 JoinColumn
数据库
Brianna Home5 小时前
博客安全攻防演练:从攻击者视角构筑铜墙铁壁
网络·数据库·安全·oracle