学习笔记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,一经查实,立即删除!

相关文章

C语言常用字符串

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

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;包含线上…

痤疮分割 实验心路历程

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

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表示全白,范围内的其他值表示不同的灰度。 但在计算机中实…

杰发科技AC7840——CAN通信简介(1)

简介 7840支持4路CAN-FD Demo调试 官网下载demo&#xff0c;烧录&#xff0c;打开串口发现打印如下。原因是没有连接CAN盒子&#xff0c;总线错误。 CAN收发器端波形 CAN_L有信号&#xff0c;CAN_H没有 波形放大 GPIO端波形 有持续波形输出 波形放大查看&#xff0c;有50U…

【尘缘送书第六期】2023年度学习:AIGC、AGI、GhatGPT、人工智能大模型实现必读书单

【文末送书】今天推荐几本AIGC、AGI、GhatGPT、人工智能大模型领域优质书籍。 目录 前言1 《ChatGPT 驱动软件开发》2 《ChatGPT原理与实战》3 《神经网络与深度学习》4 《AIGC重塑教育》5 《通用人工智能》6 文末送书 前言 2023年是人工智能大语言模型大爆发的一年&#xff0…

IJCAI 2024 International Joint Conference on Artificial Intelligence

目录 1、 重要1.1 官网&#xff1a;1.2 提交网址&#xff1a;1.3 模板 &#xff08;latex & word&#xff09; 2、 Call for Papers2.1 Important Dates2.2 Details 3、 注意事项4 New in 20245 Simplified procedure for resubmission information6、 Submission Process …

电脑出现错误0x80004005怎么解决,解决0x80004005的问题

当电脑出现0x80004005错误时&#xff0c;通常是由于系统或应用程序之间的通信问题或文件系统损坏引起的。该错误代码表示未指定错误&#xff0c;在Windows系统中较为常见。 一.解决0x80004005错误的步骤 重新启动电脑 有时候&#xff0c;错误只是一个暂时的问题&#xff0c;重…

【操作系统和计网从入门到深入】(二)进程

前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记&#xff0c;所以如果是博主比较熟悉的知识点&#xff0c;博主可能就直接跳过了&#xff0c;但是所有重要的知识点&#xff0c;在这个专栏里面都会提到&#xff01;而且我也一定会保证这个专栏知识点的完整性&…

高通平台开发系列讲解(USB篇)MBIM协议详解

文章目录 一、MBIM协议二、MBIM 消息类型三、基本控制消息构成3.1、MBIM OPEN MSG FORMAT3.2、MBIM CLOSE MSG FORMAT3.3、MBIM_COMMAND_MSG3.4、MBIM_COMMAND_DONE3.5、MBIM_INDICATE_STATUS_MSG四、MBIM Message(UUID+CID)4.1、UUID_BASIC_CONNECT

频率、概率

频率 在相同的条件下进行试验&#xff0c;假设试验进行了次&#xff0c;其中随机事件A发生了次&#xff0c;那么就称为随机事件A发生的频率。 概率 假设随机试验E的样本空间是S&#xff0c;对于其中每个随机事件&#xff0c;都对应了一个实数&#xff0c;把这个实数称为随机…

网络游戏APP备案|游戏

网络游戏APP备案|游戏 网络游戏备案分析需要备案原因&#xff08;个人看法&#xff09;对小公司对大公司 总结 网络游戏备案分析 相信做网络游戏的伙伴们在23年都收到了各个平台的公告&#xff0c;网络游戏需要进行APP的备案。也就是说网路游戏现在安卓平台也不是你想上架测试…