学习笔记10——Mysql的DDL语句

学习笔记系列开头惯例发布一些寻亲消息

链接:https://baobeihuijia.com/bbhj/contents/3/197161.html
在这里插入图片描述

  • 数据库创建:

    CREATE DATABASE books;
    CREATE DATABASE IF NOT EXISTS books;
    
  • 更改字符集

    ALTER DATABASE books CHARACTER SET gbk;
    
  • 库的删除

    DROP DATABASE IF EXISTS books;
    
  • 表的创建

    CREATE TABLE book(id INT,bName VARCHAR(20),price DOUBLE,authorId INT,publishDate DATETIME
    );
    
  • 表的修改

    # 改列名改列属性
    ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;
    # 改列属性
    ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
    # 改表名字
    ALTER TABLE book RENAME TO books;
    ALTER TABLE book ADD COLUMN pubDate TIMESTAMP 【first/after 字段名】;
    ALTER TABLE book DROP COLUMN pubDate;
    
  • 表的删除

    DROP TABLE IF EXISTS book;
    
  • 表的复制

    # 仅仅复制表的结构
    CREATE TABLE author_copy LIKE author;# 复制表的结构+数据
    CREATE TABLE author_copy2 SELECT * FROM author;# 仅仅复制某些字段
    CREATE TABLE copy4
    SELECT id,an_name
    FROM author
    WHERE 0;# 可以跨库,只要写成 库名.表名
    CREATE TABLE dept2
    SELECT department_id, department_name
    from my_employees.departments;
  • 常见数据类型

    # 整型 Tinyint/Smallint/Mediumint/Int/integer/bigint# 默认为有符号,大于范围则插入临界值
    CREATE TABLE tab_int(t1 INT,t2 INT UNSIGNED# 长度不够7用0来填充t3 INT(7) ZEROFILL
    );# 浮点小数 :MD都可以省略,随着插入的数据改变
    float(M,D):M代表整数+小数部分长度,D代表小数部分长度
    double(M,D)# 定点小数 :MD都可以省略,M默认为10,D默认为0,精度更高
    dec(M,D)# 短的字符型 
    char     不可变长,可以省略默认为1  	不可超过最大字符数  效率高
    varchar   可变					  不可超过最大字符数  效率低# ENUM:枚举,只能选择列表中一个插入
    e1 enum('a','b','c');
    # set :选择列表中一个或者多个插入
    s1 set('a','b','c','d')
    # binary和varbinary 保存较短的二进制
    # 长的字符型 text,blob(长的二进制)# 日期
    date 1001-01-01
    time 22:22:22
    year 1001
    datetime:1001-01-01 00:00:00,只插入年份会自动给时间
    timestamp:和datetime表示一样,但是会受当前的时区影响,更能反映真实时间INSERT INTO tab_date VALUES (NOW(),NOW());
    
  • 常见约束

    列级约束
    - NOT NULL
    - DEFAULT:保证字段有默认值
    - PRIMARY KEY:主键,唯一且非空
    - UNIQUE:唯一但是可以为空CREATE TABLE stuinfo1(id INT PRIMARY KEY,stuName VARCHAR(20) NOT NULL,gender CHAR(1) CHECK(gender='男' OR gender ='女'),age INT DEFAULT 18,majorId INT,seat INT UNIQUE
    );表级约束
    - CHECK:mysql没效果
    - PRIMARY KEY:主键,唯一且非空
    - UNIQUE:唯一但是可以为空
    - FOREIGN KEY:外键,该表格的该字段值来自于主表的关联列的值
    CREATE TABLE stuinfo1(id INT ,stuName VARCHAR(20) ,gender CHAR(1) ,age INT ,majorId INT,CONSTRAINT pk PRIMARY KEY(id),CONSTRAINT uq UNIQUE(seat),CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)	# 或者不起名PRIMARY KEY(id),UNIQUE(seat),FOREIGN KEY(majorid) REFERENCES major(id)
    );
    
  • 主键和唯一的区别

  • 外键:

    • 关联列必须是主键/唯一键
    • 插入数据时,先插入主表再插入从表,删除的时候先删除从表再删主表
  • 修改约束

    # 主键的增删只需要一次,不需要每次motify都带着
    # 列级约束
    ALTER TABLE stuinfo1 MODIFY COLUMN id INT PRIMARY KEY;
    ALTER TABLE stuinfo1 MODIFY COLUMN stuName VARCHAR(10) NOT NULL;# 表级约束
    ALTER TABLE stuinfo1 ADD PRIMARY KEY(seat); # 必须先存在再添加
    ALTER TABLE stuinfo1 ADD UNIQUE(seat); # 必须先存在再添加
    ALTER TABLE stuinfo1 ADD FOREIGN KEY (majorId) REFERENCES major(id);
    ALTER TABLE stuinfo1 ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorId) REFERENCES major(id);
    
  • 删除约束

    ALTER TABLE stuinfo1 MODIFY COLUMN id INT;# 删除主键和唯一键的名字(主键起名也没有效果),列级约束无法删除主键
    ALTER TABLE stuinfo1 DROP PRIMARY KEY;
    ALTER TABLE stuinfo1 DROP INDEX seat;# 删除外键
    ALTER TABLE stuinfo1 DROP FOREIGN KEY fk_stuinfo_major;
    
  • 标识列

    # 只有key才能设置标识列、只有有一个、只能是数值类型的CREATE TABLE tab_identify(id INT PRIMARY KEY AUTO_INCREMENT,NAME VATCHAR(20)
    );
    # 无需手动增加
    INSERT INTO tab_identify values(NULL,'JOIN');# 所有库都会被修改
    SHOW VARIABLES LIKE '%auto_increment%';
    SET auto_increment_increment = 3;
    # 起始位置可以手动插入# 增删标识列
    ALTER TABLE tab MOTIFY COLUMN id INT PRIMARY KRY AUTO_INCREMENT;
    ALTER TABLE tab MOTIFY COLUMN id INT;
    
  • 事务

    要么全部执行、要么全部不执行
    # 四大特性:原子性、一致性、隔离性、持久性# 需要设置自动提交功能为OFF,只有当前事务设置有效
    set autocommit = 0;
    start transaction;
    仅限 sql语句不包含DDL语句
    commit/rollback; 二选一,上述sql只是提交到了内存中,如果要执行那么就commit,如果不执行那就rollback- 脏读:没有提交
    - 不可重复读:更新
    - 幻读:插入# 查看隔离级别
    select @@tx_isolation
    set session|global transaction isolation level read committed;# 四种隔离级别
    read uncommitted:事务尚未提交,库中的数据就已经修改了,当事务rollback的时候,这些临时修改且被读到的数据成为脏数据
    read committed:可以避免脏读(未提交就不会修改),但是该事务commit前后,另一个事务的读取不可重复
    repeatable_read:不管另一个事务是否提交,读到什么就一直是什么,避免不可重复读;但是另一个事务插入行之后,数据还是会变多
    serializable:串行化,另一个事务的修改都会被阻塞# 设置保存点
    SAVEPOINT a;
    ROLLBACK TO a;
    
  • 视图

    # 只保存了sql语句,没有保存真实的数据
    - 简化sql,不必了解查询细节
    - 保护数据,提高安全性# 创建
    CREATE VIEW avg_salary
    AS
    SELECT AVG(salary),department_id
    FROM employees
    GROUP BY department_id;# 使用
    SELECT * FROM avg_salary;# 修改1
    CREATE OR REPLACE VIEW myv3
    AS
    SELECT AVG(salary),job_id
    FROM employees
    GROUP BY job_id;# 修改2
    ALTER VIEW myv3
    AS 
    SELECT AVG(salary),job_id
    FROM employees
    GROUP BY job_id;# 删除
    DROP VIEW myv3;# 修改,原始表也会修改(要看视图定义方式,有的可以更新有的不能)
    INSERT INTO myv3 VALUES('张飞','qq,com');
    UPDATE myv3 SET NAME='吴京' WHERE email = 'qq,com';
    DELETE FROM myv3 WHERE email = 'qq,com';
    
  • 删除带外键的主表的方式

    - 级联删除,主表内容删除会把从表内容删除
    ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;- 级联置空
    ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
    
  • 系统变量

    系统变量:系统提供,属于服务器层面
    - 全局变量服务器每次启动会将全局变量赋初始值,针对所有会话有效,重启无效SHOW GLOBAL【SESSION】 VARIABLES;SHOW GLOBAL【SESSION】 VARIBLIES LIKE '%char%';SELECT @@global|session.系统变量名SET global|session.系统变量名 = VALUE;SET @@global|session.系统变量名 = VALUE;SELECT @@global.tx_isolation;SET @@global.autocommit = 0;- 会话变量:仅针对当前会话有效,换一个连接就无效了SHOW SESSION VARIABLES;SELECT @@SESSION.transaction_isolation;SELECT @@SESSION.transaction_isolation = read uncommitted;
    
  • 自定义变量

    - 用户变量:仅当前会话有用,要加@,不需要限定类型
    SET @用户变量名:=值;
    SELECT 字段 INTO @变量名 FROM 表;
    SELECT COUNT(*) INTO @count FROM emplyees;
    # 使用
    SELECT @count;- 局部变量:作用于begin end中的第一句话,一般不用加@,需要限定类型
    声明: DECLARE 
    赋值:SET/SELECT
    使用:SELECT SET @m = 1;
    SET @n = 2;
    SELECT @n: = 2;(加冒号)
    SET @sum= @m + @n;
    SELECT @sum;BEGIN
    DECLARE m INT DEFAULT 1;
    SET m = 2;
    SELECT @m = 3;
    SELECT m;
    END
    
  • 存储过程和函数

    - 提高代码的重用
    - 减少编译次数
    - 减少了逐步与服务器的连接次数# 创建
    CREATE PROCEDURE 名字(参数)
    BEGIN一组合法的SQL语句
    END参数模式
    IN:参数可以作为输入
    OUT:参数作为返回值
    INOUT:既需要输入值,又可以返回值#### IN
    DELIMITER $
    CREATE PROCEDURE myp1(IN beautyName VARCHAR(20))
    BEGINSELECT bo.*FROM boys boRIGHT JOIN beauty bON b.boyfriend_id  = bo.idWHERE b.name = beautyName;
    END $CALL myp1('柳岩');#### OUT
    DELIMITER $
    CREATE PROCEDURE myp1(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)
    BEGINSELECT bo.boyName, bo.userCP INTO boyName, INTO userCPFROM boys boRIGHT JOIN beauty bON b.boyfriend_id  = bo.idWHERE b.name = beautyName;
    END $SET @boyName$
    CALL myp1('小昭',@boyName)$select @boyName;#### INOUT
    SET @a=3;
    SET @b=4;DELIMITER $
    CREATE PROCEDURE myp1(INOUT a INT,INOUT b INT)
    BEGINSET a = a*2;SET b = b*2;
    END $CALL myp1(@a,@b)$
    SELECT @a$# 删除
    DROP PROCEDURE myp1;# 查看
    SHOW CREATE PROCEDURE myp1;# 一般无法修改存储过程
    

    在这里插入图片描述

  • 函数和存储过程的区别

    • 存储过程可以0或多个返回、而函数必须有且仅有一个返回
    # 无参
    DELIMITER $
    CREATE FUNCTION myf1() RETURNS INT
    BEGINDECLARE c INT DEFAULT 0;SELECT COUNT(*) INTO cFROM employees;RETURN c;
    END $
    SELECT myf1() $# 有参
    DELIMITER $
    CREATE FUNCTION myf1(empName VARCHAR(20)) RETURNS DOUBLE
    BEGINSET @SAL=0;SELECT salary INTO @SALFROM employeesWHERE first_name = empName;RETURN @SAL;
    END $
    SELECT myf1('cynthia') $# 实现两数相加
    DELIMITER $
    CREATE FUNCTION test_fun1(num1 FLOAT, num2 FLOAT) RETURNS FLOAT
    BEGINDECLARE s FLOAT DEFAULT 0;SET s = num1 + num2;RETURN s;
    END $
    SELECT test_fun1(2.3,1.7)$# 查看函数
    SHOW CREATE FUNCTION myf1;# 删除
    DROP FUNCTION myf1;
    
  • 流程控制结构(顺序/分支/循环)

    一、分支
    - if函数:任何位置
    IF(表达式1,表达式2,表达式3);- case:任何位置
    DELIMITER $
    CREATE PROCEDURE test(IN SCORE INT)
    BEGINCASEWHEN score>=90 AND score <=100 THEN SELECT 'A';WHEN score>=80 THEN SELECT 'B';WHEN score>=60 THEN SELECT 'C';ELSE SELECT 'D';END CASE;
    END$
    SELECT test(20)$- if结构:只能放在begin end中
    DELIMITER $
    CREATE FUNCTION test(SCORE INT) RETURNS CHAR
    BEGINIF score>=90 AND score <=100 THEN RETURN 'A';ELSEIF score>=80 THEN RETURN 'B';ELSEIF score>=60 THEN RETURN 'C';ELSE RETURN 'D';END IF;
    END$
    SELECT test(20)$
    
    二、循环 while/loop/repeat,必须放在begin end之间
    CREATE PROCEDURE pro_while(IN insertCount INT)
    BEGINDECLARE i INT DEFAULT 1;WHILE i<=insertCount DOINSERT INTO boys VALUES(16,'zhangsan',200);SET i = i+1;END WHILE;
    END $
    CALL pro_while(2);# 如果添加leave或者iterate,就必须添加名称
    # 添加leave
    CREATE PROCEDURE pro_while(IN insertCount INT)
    BEGINDECLARE i INT DEFAULT 1;a:WHILE i<=insertCount DOINSERT INTO boys VALUES(16,'zhangsan',200);SET i = i+1;IF i>=20 THEN LEAVE a;END IF;END WHILE a;
    END $
    CALL pro_while(2)$# 添加iterate
    CREATE PROCEDURE pro_while(IN insertCount INT)
    BEGINDECLARE i INT DEFAULT 1;a:WHILE i<=insertCount DOIF MOD(i,2)!=0 THEN ITERATE a;END IF;INSERT INTO boys VALUES(16,'zhangsan',200);SET i = i+1;END WHILE a;
    END $
    CALL pro_while(2)$
    

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

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

相关文章

FFmpeg之AVFilterLink

这个结构体主要是用来link两个filter的,它存在于每个AVFilterContext中 struct AVFilterContext {const AVClass *av_class; ///< needed for av_log() and filters common optionsconst AVFilter *filter; ///< the AVFilter of which this is an inst…

XX.push is not a function

错误通常发生在尝试在非数组类型的变量上使用push方法 问题&#xff1a;定义了数组类型&#xff0c;用push方法一直报错&#xff0c;感觉哪里都没毛病 原因&#xff1a;虽然刚开始定义了数组类型&#xff0c;但可能是因为在代码的某个地方将其重新赋值为了非数组类型的值。 …

【计算机网络基础2】IP地址和子网掩码

1、IP地址 网络地址 IP地址由网络号&#xff08;包括子网号&#xff09;和主机号组成&#xff0c;网络地址的主机号为全0&#xff0c;网络地址代表着整个网络。 广播地址 广播地址通常称为直接广播地址&#xff0c;是为了区分受限广播地址。 广播地址与网络地址的主机号正…

Mybatis-Plus基础之框架基础

文章目录 Mybatis-Plus 框架基础引入 maven 依赖定义实体类&#xff0c;并标注注解定义 Mapper 接口&#xff0c;要求继承自特定父接口使用 MapperScan 注解&#xff0c;扫描 mapper 接口所在位置验证 Mybatis-Plus 框架基础 MyBatis-Plus 是 MyBatis 的一种增强框架&#xff…

C语言常用字符串

目录 1.什么是字符串 2.如何定义字符串 第3和第4定义的区别&#xff1a;3是字符串变量&#xff0c;4是字符串常量&#xff0c;不予许被修改 3.strlen和sizeof的区别 4.地址分配&#xff08;malloc,realloc,free,memset&#xff09; 案例 5.字符串拷贝(strcpy,strncpy) …

kafka创建新topic

创建topic bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic mytopic bin/kafka-topics.sh //bin目录下的.sh --create --bootstrap-server //固定写法 localhost:9092 //ip端口 --replication-fac…

vue 集成行政区域选择插件region和数据回显

故事&#xff1a;最近&#xff0c;项目需要进行行政区域围栏的绘制&#xff0c;由于老旧项目是利用js保存全国行政区域地址和编码&#xff0c;在选择器select进行匹配显示&#xff0c;但此方法复杂&#xff0c;因此选择集成区域插件region 步骤一&#xff1a;用命令安装region…

JS实现返利网注册系统(网页数据验证)

主代码 <!DOCTYPE HTMLPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"><head><title>返利网注册</tit…

品牌线下店铺的查价方式

不同于电商平台&#xff0c;线下店铺会更传统&#xff0c;产品定价除了受品牌规则的约束&#xff0c;同样也与门店实际销量和促销有关&#xff0c;当遇到地方活动&#xff0c;促销力度大了&#xff0c;价格难免会与品牌要求相差异&#xff0c;但是管控渠道&#xff0c;包含线上…

无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

这个错误表明系统无法找到mvn命令。这通常是因为Maven没有正确安装或者Maven的安装路径没有添加到系统的环境变量中。你需要确保Maven已经正确安装&#xff0c;并且将Maven的安装路径添加到系统的环境变量中。 你可以按照以下步骤在Windows上安装Maven&#xff1a; 1. 访问Mave…

痤疮分割 实验心路历程

数据集的制作 将labelme生成的标注文件记普通的json文件转成coco数据集格式的json文件 图像分辨率过大 如果不做任何调整&#xff1a; 会出现“killed”的报错&#xff0c;表示图片像素过大&#xff0c;显卡内存不够&#xff0c;无法支撑训练 显卡 换成更高性能的显卡&am…

小红书运营方式,需要搭建自己的选题库

无论是个人还是专业号&#xff0c;面临最大的问题是持续创作的能力。如何能够持续发文&#xff0c;同时还能围绕自己的业务输出内容。很多账号断更就是不知道该更新什么&#xff0c;久而久之账号断更。 一般来说这种情况&#xff0c;就需要建立自己的选题库&#xff0c;通过系…

FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale…

『Redis』在Docker中快速部署Redis并进行数据持久化挂载

&#x1f4e3;读完这篇文章里你能收获到 在Docke中快速部署Redis如何将Redis的数据进行持久化 文章目录 一、拉取镜像二、创建挂载目录1 宿主机与容器挂载映射2 挂载命令执行 三、创建容器—运行Redis四、查看运行情况 一、拉取镜像 版本号根据需要自己选择&#xff0c;这里以…

AI 种菜革命:农业科学家们的探索/《流浪地球》导演感受到AI的威胁,《浪球3》也遇灵感洗礼 | 魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525; 资讯预览 AI 种菜革命&#xff1a;农业科学家们的探索 《流浪地球》导演感受到AI的威…

外贸:这些你可能并不知道

昨天我打开平台&#xff0c;然后发现有一个产品被限流了&#xff0c;限流的原因是有客户投诉产品的价格和实际销售的价格不符&#xff0c;然后查看产品&#xff0c;发现是之前很久发布的一款产品&#xff0c;于是赶紧删除了。 以往&#xff0c;我们在平台上发布产品的时候为了…

STM32超声波——HC_SR04

文章目录 一.超声波图片二.时序图三.超声波流程四.单位换算五.取余计算六.换算距离七.超声波代码 一.超声波图片 测量距离&#xff1a;2cm——400cm 二.时序图 (1).以下时序图要先提供一个至少10us的脉冲触发信号&#xff0c;告诉单片机我准备好了&#xff0c;然后该超声波…

电脑连接了wifi但是没有网络

电脑连接了WiFi但是网络不可用 问题场景&#xff1a;问题描述解决方案&#xff1a; 问题场景&#xff1a; 搬砖搬的好好的&#xff0c;电脑的WiFi突然就断开了&#xff0c;这时候还没意识到问题的严重性&#xff0c;直接就去重新连WiFi&#xff0c;能连上&#xff0c;但是没有…

医院HIS系统慢和卡顿网络流量分析

分析背景 近期医院的医生使用HIS系统的时候&#xff0c;经常出现系统慢和卡顿现象。经过交流得知医生在点击一个页面&#xff0c;需要等很久才能加载出来&#xff0c;且对于开药这种的操作&#xff0c;医生需要点每个大类去找到对应的药&#xff0c;每点一次都需要等一会儿才能…

灰度图存储 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 黑白图像常采用灰度图的方式存储,即图像的每个像素填充一个灰色阶段值,256节阶灰图是一个灰阶值取值范围为0-255的灰阶矩阵,0表示全黑,255表示全白,范围内的其他值表示不同的灰度。 但在计算机中实…