数据库与表的操作

1. SQL 分类

SQL 根据功能分为以下几类:

  • **DDL **: 定义数据库对象(库、表、列、索引等)

    • 常用语句:CREATE, DROP, ALTER, RENAME, TRUNCATE
    • 示例:
      CREATE TABLE t_user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL
      );
      
  • **DML **: 操作数据库记录

    • 常用语句:INSERT, DELETE, UPDATE, SELECT
    • 示例:
      INSERT INTO t_user (name) VALUES ('Alice');
      
  • **DQL **: 数据查询

    • 常用语句:SELECT
    • 示例:
      SELECT * FROM t_user WHERE age > 20;
      
  • **DCL **: 控制数据库访问权限

    • 常用语句:GRANT, REVOKE
    • 示例:
      GRANT SELECT ON db_name.* TO 'user'@'localhost';
      

2. SQL 语句书写规范
  • SQL 语句不区分大小写,但建议关键字大写。
  • 字符串常量区分大小写。
  • 每条 SQL 语句以 ; 结尾。
  • 使用空格和缩进提高可读性。
  • 注释:
    • 多行注释:/* 注释内容 */
    • 单行注释:-- 注释内容# 注释内容

3. 数据库操作
  • 创建数据库:
     #创建数据库CREATE DATABASE 数据库名称;# 创建数据库,同时指定编码create database db_name default charset="utf8mb4";create database school DEFAULT CHARACTER SET utf8mb4;create database school DEFAULT CHARACTER SET utf8mb4 COLLATE  utf8mb4_general_ci;# 查询当前数据库是哪个数据库select database();查看数据库版本SELECT VERSION();查看当前用户SELECT USER();查看所有用户SELECT User,Host,Password FROM mysql.user;注意:在 MySQL 5.7 及以上版本中,mysql.user 表中的 password 字段已经被移除,取而代之的是 authentication_string 字段。因此,如果你想查看用户的密码信息,需要使用 authentication_string 字段。SELECT user, host, authentication_string FROM mysql.user;# 查看创建的数据库show create databsse 数据库名称;
    
    在这里插入图片描述
    在这里插入图片描述
  • 删除数据库:
    DROP DATABASE 数据库名;
    
    在这里插入图片描述
  • 查看数据库编码:
    SHOW VARIABLES LIKE 'character%';
    
    在这里插入图片描述
character_set_client:MySQL客户机字符集。
character_set_connection:数据通信链路字符集,当MySQL客户机向服务器发送请求时,请求数据以
该字符集进行编码。
character_set_database:数据库字符集。
character_set_filesystem:MySQL服务器文件系统字符集,该值是固定的binary。
character_set_results:结果集的字符集,MySQL服务器向MySQL客户机返回执行结果时,执行结果以
该字符集进行编码。
character_set_server:MySQL服务实例字符集。
character_set_system:元数据(字段名、表名、数据库名等) 的字符集,默认值为utf8。
  • 切换数据库:
    USE db_name;
    

4. 数据库表操作
  • 创建表:

    -- 语法结构
    create table [if not exists] t_name (
    # 定义表结构字段名称1 类型 [约束条件],字段2  类型 [约束条件],……字段n 类型 [约束条件]);/**创建一个用户表用户的姓名用户的年龄用户的性别用户的地址用户的电话**/create table t_user (id int,name varchar(50),age int,gender char(5),address varchar(255),tel char(11));# 查询表中的数据 select * from t_user;# 插入数据
    insert into t_user values(1, "张三", 16, '男', "四川成都", "110");
    

    在这里插入图片描述
    在这里插入图片描述

  • 删除表:

    DROP TABLE t_user;
    
  • 查看表结构:

    DESC t_user;
    

5. 数据类型
  • 数值型:

    • INT: 整数
    • FLOAT: 单精度浮点数
    • DOUBLE: 双精度浮点数
    • DECIMAL: 精确小数
  • 字符串型:

    • CHAR: 定长字符串
    • VARCHAR: 变长字符串
    • TEXT: 长文本数据
    • BLOB: 二进制大对象
  • 日期和时间型:

    • DATE: 日期(YYYY-MM-DD)
    • DATETIME: 日期和时间(YYYY-MM-DD HH:MM:SS)
    • TIMESTAMP: 时间戳(从 1970-01-01 开始的秒数)

6. 数据库约束
  • 主键约束: 唯一标识一条记录
    id INT PRIMARY KEY
    
    案列:
     create table t_user(id int,name varchar(50));
    # 插入数据测试
    insert into t_user values(1, "张三");
    insert into t_user values(1, "张三");
    select * from t_user;drop table t_user;create table t_user(id int primary key,  -- 主键约束name varchar(50)
    );# 插入数据测试
    insert into t_user values(1, "张三");
    insert into t_user values(1, "张三");
    insert into t_user values(null, "张三");
    insert into t_user values(2, "张三");drop table t_user;
    create table t_user(id int primary key auto_increment,  -- 主键约束name varchar(50)
    );
    # 插入数据测试
    insert into t_user values(1, "张三");
    insert into t_user values(1, "张三");
    insert into t_user values(null, "张三");
    insert into t_user values(2, "张三");insert into t_user(name) value("张三");-- 主键还存在一种写法
    create table t_user(id int auto_increment,  -- 主键约束name varchar(50),primary key(id)
    );
    
    在这里插入图片描述

在这里插入图片描述

  • 唯一约束: 确保字段值唯一

    email VARCHAR(100) UNIQUE
    

    案例:

    唯一性约束条件确保所在的字段或者字段组合不出现重复值
    唯一性约束条件的字段允许出现一个NULL
    同一张表内可建多个唯一约束
    唯一约束可由多列组合而成
    建唯一约束时MySQL会为之建立对应的索引——唯一索引。
    如果不给唯一约束起名,该唯一约束默认与列名相同。CREATE TABLE tb_student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(18) UNIQUE  -- 唯一约束
    );CREATE TABLE tb_student(id INT AUTO_INCREMENT,NAME VARCHAR(18),  -- 唯一约束PRIMARY KEY(id),unique(name)
    );
    

    在这里插入图片描述

  • 非空约束: 字段值不能为空

    name VARCHAR(50) NOT NULL
    

    案例:

    create table t_user(id int primary key auto_increment,name varchar(50) unique not null,age  int default 18 ,password varchar(255) not null
    );insert into t_user values(1, "张三", 20, "123456");
    -- 报错
    insert into t_user(name, age) values("李四", 18);
    insert into t_user values(null, "王二", 16);  -- 因为存在自增,所以可以写nullinsert into t_user(name, age, password) values("刘帅哥", 18, "123456");
    insert into t_user(name, password) values("张三", "123456");
    

    在这里插入图片描述

  • 默认值约束: 字段的默认值

    age INT DEFAULT 18
    

    案例:

    create table t_user(id int primary key auto_increment,name varchar(50) unique,age  int default 18  -- 默认值约束
    );insert into t_user values(1, "刘二", 20);
    insert into t_user(name, age) values("刘帅哥", 18);
    insert into t_user values(null, "刘欧巴", 16);  -- 因为存在自增,所以可以写null
    insert into t_user values(default, "刘文理", 16);  -- 因为存在自增,所以可以写默认
    insert into t_user(name) values("张三");
    insert into t_user(name) values("李四");
    

    在这里插入图片描述
    在这里插入图片描述

  • 外键约束: 关联其他表的主键

    FOREIGN KEY (class_id) REFERENCES classes(id)
    
  • 检查约束: 确保字段值符合条件(MySQL 8.0+)

    age INT CHECK (age >= 18)
    

    案例:

    create table t_stu(id int primary key auto_increment,name varchar(50) not null unique,age int check(age >= 18),# gender char(2) check(gender in ("男", "女"))gender enum("男", "女")
    );insert into t_stu value(null, "zs", 20, "女");
    insert into t_stu value(null, "lisi", 10, "女");insert into t_stu value(null, "lisi", 18, "女");
    insert into t_stu value(null, "ww", 28, "哈");
    

    在这里插入图片描述


7. 修改表的结构

在sql中,也提供了动态修改表结构的sql功能。

使用alter指令,实现对数据库对象的结构的调整和修改。

修改列类型ALTER TABLE 表名 MODIFY 列名 列类型;   -- 注意存在值的情况,类型不一定能成功
增加列ALTER TABLE 表名 ADD 列名 列类型;
删除列ALTER TABLE 表名 DROP 列名;
列改名ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;
更改表名ALTER TABLE 表名 RENAME 新表名;RENAME TABLE 表名 TO 新表名;案例:
alter table t_user add mark int default 0;
alter table t_user modify mark varchar(10);
alter table t_user modify mark int;
alter table t_user add test int;
alter table t_user drop test;
alter table t_user change test address varchar(255);
alter table t_user rename user;
rename table user to t_user;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. 复制表的内容
复制一个表结构的实现方法有两种方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。
create table 新表名 like 源表方法二:在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表
记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。
create table 新表名 select * from 源表方法三:如果已经存在一张机构一致的表,复制数据
insert into 表 select * from 原表;

案例:

mysql> create table user like t_user;
Query OK, 0 rows affected (0.06 sec)mysql> show tables;
+----------------------+
| Tables_in_db_chengke |
+----------------------+
| t_stu                |
| t_user               |
| user                 |
+----------------------+
3 rows in set (0.00 sec)mysql> desc user;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int          | NO   | PRI | NULL    | auto_increment |
| name     | varchar(50)  | NO   | UNI | NULL    |                |
| age      | int          | YES  |     | 18      |                |
| password | varchar(255) | NO   |     | NULL    |                |
| mark     | varchar(10)  | YES  |     | NULL    |                |
| address  | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)mysql> select * from user;
Empty set (0.00 sec)mysql> select * from t_user;
+----+-----------+------+----------+-----------+---------+
| id | name      | age  | password | mark      | address |
+----+-----------+------+----------+-----------+---------+
|  1 | 张三    |   20 | 123456   | 0         | NULL    |
|  2 | 刘帅哥    |   18 | 123456   | 0         | NULL    |
|  3 | 张三      |   18 | 123456   | 0         | NULL    |
|  4 | hehe      |   20 | 122      | 张三    | NULL    |
+----+-----------+------+----------+-----------+---------+
4 rows in set (0.00 sec)mysql> create table user select * from t_user;
Query OK, 4 rows affected (0.04 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql> show tables;
+----------------------+
| Tables_in_db_chengke |
+----------------------+
| t_stu                |
| t_user               |
| user                 |
+----------------------+
3 rows in set (0.00 sec)mysql> select * from user;
+----+-----------+------+----------+-----------+---------+
| id | name      | age  | password | mark      | address |
+----+-----------+------+----------+-----------+---------+
|  1 | 张三    |   20 | 123456   | 0         | NULL    |
|  2 | 刘帅哥    |   18 | 123456   | 0         | NULL    |
|  3 | 张三      |   18 | 123456   | 0         | NULL    |
|  4 | hehe      |   20 | 122      | 张三    | NULL    |
+----+-----------+------+----------+-----------+---------+
4 rows in set (0.00 sec)mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int          | NO   |     | 0       |       |
| name     | varchar(50)  | NO   |     | NULL    |       |
| age      | int          | YES  |     | 18      |       |
| password | varchar(255) | NO   |     | NULL    |       |
| mark     | varchar(10)  | YES  |     | NULL    |       |
| address  | varchar(255) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)create table user select id, name, mark from t_user;-- 将查询的数据快速插入到表中
insert into user select * from user;

在这里插入图片描述
在这里插入图片描述


8. 数据库字典
由information_schema数据库负责维护tables-存放数据库里所有的数据表、以及每个表所在数据库。
schemata-存放数据库里所有的数据库信息
views-存放数据库里所有的视图信息。
columns-存放数据库里所有的列信息。
triggers-存放数据库里所有的触发器。
routines-存放数据库里所有存储过程和函数。
key_column_usage-存放数据库所有的主外键
table_constraints-存放数据库全部约束。
statistics-存放了数据表的索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40011.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年渗透测试面试题总结-某shopee -红队-Singapore(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 shopee -红队-Singapore 一、Linux提权方式扩展分析 二、入侵痕迹清除技术 三、真实IP发现技术 四、…

GeoChat : Grounded Large Vision-Language Model for Remote Sensing论文精读

GeoChat : Grounded Large Vision-Language Model for Remote Sensing 是一个针对遥感场景的llm,提供支持多任务对话(对高分辨率遥感图像)。也造了个数据集。 一些思考: 文中提到的局限性:小物体和多框预测较难。小物…

基于STM32的PID算法控制电机调速

一、制作目标 以STM32F103C8T6单片机作为主控,使用PID控制算法,控制TB6612FNG电机驱动板模块驱动直流减速电机(带AB相编码器),实现任意设定转速的电机转速动态控制,类似于汽车的定速巡航功能,可…

系统思考—看见未来

感谢上海财经大学终身教育学院的持续邀请!每个月,都会带着不同的思维火花,走进财大与学员们一起探索系统思考的奥秘。 这次为宜宾市的干部们带来了一场深刻的学习体验。通过系统思考,帮助大家从整体视角去发现问题、分析问题、解…

qwindowkit 编译教程

1、Windows编译及示例 1.1 下载源码 https://github.com/stdware/qwindowkit 1.2 cmake编译 1.3 VS构建 1.4 编译成功

HashMap的位操作是什么?HashSet 的 contains 方法复杂度是多少?红黑树简单讲一下?

一、HashMap 的位操作设计 HashMap 使用位运算优化哈希计算与索引定位,核心场景如下: 哈希扰动函数 计算键的哈希值时,将高16位与低16位异或: static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hash…

软件开发过程中常用的调试工具(gdb)

gdb 因为我们公司其中脚本中有rk的gdb调试工具脚本,内部只需要将其打开后进行编译即可: 需要将编译出来的cvr_app 第一种:使用gdb将app给跑起来:gdb cvr_app 然后在出现问题时: 输入bt,可以打印出当前…

S32K144外设实验(七):FTM输出多路互补带死区PWM

文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 互补对的PWM输出是很重要的外设功能,尤其应用再无刷电机的控制。 1.1 时钟系统 笔者再墨迹一遍时钟的设置,因为很重要。 FTM的CPU接口时钟为SY…

Qt6相对Qt5的主要提升(AI总结)

我: Qt 6 相对于5 有哪些新功能? Qt 6 相对于 Qt 5 有诸多新功能和改进,以下是主要的新增特性: 1. 架构和核心库的重构 模块化设计:Qt 6 采用了更加灵活的模块化设计,开发者可以按需引入必要的功能模块&a…

一文解读DeepSeek的安全风险、挑战与应对策略

引言 DeepSeek作为中国领先的AI大模型提供商,凭借其开源、低成本和高性能的优势,迅速在全球AI市场占据重要地位。然而,随着其应用范围的扩大,DeepSeek在数据安全、模型漏洞、网络攻击等方面面临严峻挑战。本文基于最新公开资料&am…

文生图语义识别插件使用(controlnet)

1. 插件下载(github) https://github.com/Mikubill/sd-webui-controlnet https://github.com/lllyasviel/ControlNet2. 模型下载(hugging face) https://github.com/Mikubill/sd-webui-controlnet/wiki/Model-download https://huggingface.co/bdsqlsz/qinglong_controlnet-l…

论华为 Pura X 折叠屏性能检测

在科技浪潮中,折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机,承载前沿科技与精湛工艺,成为行业焦点。它融合先进折叠屏技术与优质材质,致力于打破传统手机使用边界,为用户开启全新体验。但产…

多路转接Poll

在之前我们讲过select是最古老的多路转接方案,古老就意味着他不是很方便使用,他需要用户手动保存fd_set这个位图结构,来表示读写事件的关注与否或者就绪性。 而且由于fd_set的大小是固定的,这就意味着他能管理的套接字文件描述符是…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时,请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…

基于深度学习的图片识别系统(下)

文章目录 前言1.任务描述2.模型搭建3.代码解释3.1模型加载3.2加载数据3.3模型权重的保存3.4学习率3.5过拟合3.6训练模型3.7调试检查 4.结果分析5. 完整代码结语 前言 书接上回,我们已经完成数据预处理部分的内容,后续仍需要对表格进行裁剪,此…

再学:区块链基础与合约初探 EVM与GAS机制

目录 1.区块链是什么 2.remix ​3.账户​ ​4.以太坊三种交易​ 5.EVM 6.以太坊客户端节点 ​7.Gas费用 8.区块链浏览器 1.区块链是什么 只需要检验根节点 Merkel根是否有更改,就不用检查每个交易是否有更改。方便很多。 2.remix 3.账户 如果交易失败的话&…

Java 中装饰者模式与策略模式在埋点系统中的应用

前言 在软件开发中,装饰者模式和策略模式是两种常用的设计模式,它们在特定的业务场景下能够发挥巨大的作用。本文将通过一个实际的埋点系统案例,探讨如何在 Java 中运用装饰者模式和策略模式,以及如何结合工厂方法模式来优化代码…

HCIP_NOTE03_网络组成

网络组成 LAN MAN WAN 园区网 企业或机构内部的网络,分大中小型 行业园:企业园网 校园网 政务园 商业园 三层交换机 数据大量交换的局域网内部,转发效率高,有简单的路由功能 路由器 进出口网络,适用于复杂的网络环境,选路需求 无线网 信号传输稳定性差---- 电磁波易受干…

简记_单片机硬件最小系统设计

以STM32为例: 一、电源 1.1、数字电源 IO电源:VDD、VSS:1.8~3.6V,常用3.3V,去耦电容1 x 10u N x 100n ; 内核电源:内嵌的稳压器输出:1.2V,给内核、存储器、数字外设…

32.[前端开发-JavaScript基础]Day09-元素操作-window滚动-事件处理-事件委托

JavasScript事件处理 1 认识事件处理 认识事件(Event) 常见的事件列表 认识事件流 2 事件冒泡捕获 事件冒泡和事件捕获 事件捕获和冒泡的过程 3 事件对象event 事件对象 event常见的属性和方法 事件处理中的this 4 EventTarget使用 EventTarget类 5 事件委托模式 事件委托&am…