【MySQL】创建数据库和表

news2024/12/27 14:55:20

文章目录

  • 1. 创建和删除数据库
    • 1.1 create database
    • 1.2 drop database
  • 2. 创建表:create table
    • 2.1 列属性
  • 3. 更改表:alter table
  • 4. 创建关系
  • 5. 更改主键和外键约束
  • 6. 字符集和排序规则
    • 6.1 字符集
    • 6.2 排序规则
    • 6.2 更改库、表或特定列的字符集
  • 7.存储引擎
    • 7.1 更改表的存储引擎

1. 创建和删除数据库

1.1 create database

  • 创建新数据库,一个没有任何表的空数据库。
  • 例如:create database if not exists sql_store2;

1.2 drop database

  • 删除数据库。
  • 例如:drop database if exists sql_store2;

2. 创建表:create table

2.1 列属性

  • primary key:主键

  • auto_increment:自动递增

  • not null:非空

  • default 0:默认值

  • unique:唯一值

    create table if not exists customers (
        customer_id int primary key auto_increment,
        first_name varchar(50) not null,
        points int not null default 0,
        email varchar(255) not null unique
    );
    

3. 更改表:alter table

  • 不要在生产环境下更改表,这样会造成严重后果。在测试数据库上尝试更改,确保执行正常且不会产生任何不良影响后,再在生产数据库中更改。

  • add:添加列,after可选择添加列的位置,如果不写就默认加在最后一列

  • modify:修改列,可修改列数据类型、属性

  • drop:删除列

    alter table customers
        add last_name varchar(50) not null after first_name,
        add city varchar(50) not null ,
        modify first_name varchar(55) default '',
        drop points;
    

4. 创建关系

  • foreign key 外键取名 (要键入外键的列名):键入外键
    • 外键取名:fk_子表_父表
  • references 父表名(列名):引用顾客表中的顾客id列
  • on update cascade:指定更新行为
  • on delete no action:指定删除行为
  • 注意:删除表的语句顺序
    • 此时顾客表是关系的一部分,此情况下,如果要删除顾客表,需要先删除订单表。因此删除订单表的语句要写在前面。
    create database if not exists sql_store2;
    use sql_store2;
    
    drop table if exists orders; -- 删除订单表语句在前。
    drop table if exists customers;
    
    create table if not exists customers (
        customer_id int primary key auto_increment,
        first_name varchar(50) not null,
        points int not null default 0,
        email varchar(255) not null unique
    );
    
    create table if not exists orders(
        order_id int primary key,
        customer_id int not null ,
        foreign key fk_orders_customers (customer_id)
            references customers(customer_id)
            on update cascade
            on delete restrict
    );
    

5. 更改主键和外键约束

  • 添加主键:add primary key (列名1,列名2,列名3)
  • 删除主键:drop primary key。删除主键时不用打列名称。
  • 删除外键:drop foreign key 外键名。
  • 添加外键:add foreign key 外键名 (列名)。同4.创建关系。
alter table orders
    add primary key (order_id),
    drop primary key,
    drop foreign key orders_ibfk_1,
    add foreign key fk_orders_customers (customer_id)
        references customers(customer_id)
        on update cascade
        on delete no action

6. 字符集和排序规则

6.1 字符集

  • 字符集:当存储一个字符串,比如ABC的时候,MySQL会使用字符集将每个字符转换为数值表示,因此字符集是将每个字符映射到数字的表。
    • show charset:查询当前版本MySQL支持的所有字符集
      在这里插入图片描述

    • utf-8:是MySQL版本5以上使用的默认字符集,可以存储几乎所有国际语言。多数情况下不需要考虑更改字符集。

  • 某些情况下更改字符集来减少数据库的大小。
    • Maxlen列:表示存储每个字符时最多保留的字节长度。英语占1字节,西欧和中东占2字节,亚洲语言占3字节。
    • 例如,表中某列的类型是char(10),不管此列使用1个还是10个字符,都会保留10个字符串的空间。
    • 如果使用utf-8,MySQL为每个字符预留的最大字节数是3,此时会为此列的每个单元格中预留10*3个字节。
    • 如果只需要支持拉丁语,此时就可以用latin1的字符集,此字符集为每个字符预留的最大字节数是1,此时回味此列的每个单元格中预留10*1个字节空间。
    • 通过更改字符集减少MySQL占用磁盘的字节数。

6.2 排序规则

  • 排序规则决定了某类语言的字符如何排序,例如utf16字符集的默认排序规则是utf16_general_ci
  • ci:case-insensitive不区分大小写,排序时给予大小写同等优先级。
    在这里插入图片描述

6.2 更改库、表或特定列的字符集

  • character set 字符集:设置字符集

  • 库的字符集

    -- 创建库时设置字符集
    create database db_name
        character set latin1
    -- 更改数据库的字符集
    alter database db_name
        character set latin1
    
  • 表的字符集

    -- 创建表时设置字符集
    create table customers(id int, name varchar(50), phone varchar(255))
        character set latin1
    -- 更改表的字符集
    alter table customers
    	character set latin1
    
  • 特定列的字符集:如想为名字列设置字符集,在数据类型后设置字符集。

    create table if not exists customers (
        first_name varchar(50) character set latin1 not null
    );
    

7.存储引擎

  • 存储引擎决定了数据如何被存储,及哪些功能可供使用。

  • show engines:查看当前版本MySQL支持的所有存储引擎。
    在这里插入图片描述

  • 常用的存储引擎:

    • MyISAM:旧的存储引擎,在版本5.5之前流行
    • InnoDB:更高级的存储引擎,支持事务等功能。

7.1 更改表的存储引擎

  • 更改一张表的存储引擎会花费较多时间,因为MySQL必须重建这张表。在此期间无法访问此表,因此不要在产出阶段更改存储引擎,除非要定期维护。
    alter table customers
        engine = InnoDB
    

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

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

相关文章

2.8 EXERCISES

如果我们想使用每个线程来计算向量加法的一个输出元素,那么将线程/块索引映射到数据索引的表达式是什么? 答:C 假设我们想用每个线程来计算向量加法的两个(相邻)元素。将线程/块索引映射到i(由线程处理的…

深入理解并解析Flutter Widget

文章目录 完整代码程序入口构建 Widget 结构定义 widget 状态定义 widget UI获取上下文关于build()build() 常用使用 完整代码 import package:english_words/english_words.dart; import package:flutter/material.dart; import package:provider/provider.dart;void main() …

红队打靶练习:EVM: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 目录探测 1、gobuster 2、dirsearch WEB wpscan get username get password MSF get shell 提权 get root get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interf…

Flink中的状态管理

一.Flink中的状态 1.1 概述 在Flink中,算子任务可以分为有状态和无状态两种状态。 无状态的算子任务只需要观察每个独立事件,根据当前输入的数据直接转换输出结果。例如Map、Filter、FlatMap都是属于无状态算子。 而有状态的算子任务,就…

西电期末1027.判断同构数

一.题目 二.分析与思路 不用把他转成字符串再转成数字之类的&#xff0c;用数学解决就好&#xff01;找出一个数的最后位就是将其对求余啊&#xff0c;找一个数有几位以前也有过啊&#xff0c;那不就过了嘛&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 in…

探索2024年软件测试的几大主导趋势

进入2024年&#xff0c;考虑影响测试环境的问题至关重要。这种思考将成为团队了解主要瓶颈和实现当今不断提高的期望的首要因素。 01 了解关键测试瓶颈 毋庸置疑&#xff0c;现代团队需要不断创新、适应和拥抱最新趋势&#xff0c;以保持竞争力并提供以客户为中心的解决方案。尽…

YOLO蒸馏原理篇之---MGD、CWD蒸馏

一、MGD蒸馏 论文地址:https://arxiv.org/abs/2205.01529 论文翻译:https://mp.weixin.qq.com/s/FSvo3ns2maTpiTTWsE91kQ 1.1 摘要 知识蒸馏已成功应用于各种任务。当前的蒸馏算法通常通过模仿教师的输出来提高学生的表现。本文表明,教师还可以通过指导学生的特征恢复来提…

如何恢复Mac误删文件?

方法1. 使用撤消命令 当你在 Mac 上删除了错误的文件并立即注意到你的错误时&#xff0c;你可以使用撤消命令立即恢复它。顾名思义&#xff0c;此命令会反转上次完成的操作&#xff0c;并且有多种方法可以调用它。如果你已经采取了其他操作或退出了用于删除文件的应用程序&…

QT常用控件使用及布局

QT常用控件使用及布局 文章目录 QT常用控件使用及布局1、创建带Ui的工程2、ui界面介绍1、界面设计区2、对象监视区3、对象监属性编辑区4、信号与槽5、布局器6、控件1、Layouts1、布局管理器2、布局的dome 2、Spacers3、Buttons4、项目视图组(Item Views)5、项目控件组(Item Wid…

MySQL忘记密码,如何重置密码(Windows)

1. 停止MySQL服务 打开“服务”管理工具&#xff08;可以在开始菜单搜索“服务”或运行 services.msc&#xff09;。 找到你的MySQL服务&#xff0c;可能叫别的&#xff0c;但是应该都是mysql开头的。 鼠标右键停止运行它。 2. 跳过权限表启动 MySQL 打开命令提示符&#x…

【软件测试】软件开发各阶段的自动测试技术

说到自动化测试&#xff0c;你可能最为熟悉的就是GUI自动化测试了。比如&#xff0c;早年的C/S架构&#xff0c;通常就是用自动化测试脚本打开被测应用&#xff0c;然后在界面上以自动化的方式执行一系列的操作&#xff1b;再比如&#xff0c;现今的Web站点测试&#xff0c;也是…

CCC数字钥匙设计【NFC】--NFC通信之APDU TLV

CCC3.0&#xff0c;包含NFC、BLE、UWB技术。当采用NFC通信时&#xff0c;车端与手机端是通过APDU来进行交互的。而在APDU中的data数据段&#xff0c;又可能会嵌入TLV协议的数据&#xff0c;以完成车端与手机端的通信交互。 本文先介绍APDU及TLV的一些基础知识&#xff0c;再通…

1/7文章

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;具有运动模糊的大规模场景的混合神经绘制1、研究背景2、方法提出3、相关方法3.1、混合神经渲染模型&#xff08;Hybrid Neural Re…

特种印制电路技术

1特种印制电路技术现状、分类及特点 2006年&#xff0c;信息产业部(现工信部)电子信息产品管理司将高档PCB产品类型概括为HDI板、多层FPC、刚挠结合板、IC载板、通信背板、特种板材印制板、印制板新品种等种类。但直至目前&#xff0c;在印制电路设计与制造领域还没有形成特种…

Linux学习第50天:Linux块设备驱动实验(二):Linux三大驱动之一

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、使用请求队列实验 1.实验程序编写 使用开发板上的一段RAM来模拟一段块设备&#xff0c;也就是ramdisk. 机械硬盘 34 #define RAMDISK_SIZE (2 * 1024 * 10…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑系统调峰需求与光热电站收益平衡的储热容量优化配置》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题表明研究的主题涉及到光热电站系统中的储热容量优化配置&#xff0c;而优化的目标是在系统中实现调峰需求并平衡光热电站的收益。让我们逐步解读这…

使用.Net nanoFramework为ESP32进行蓝牙配网

通过前面的介绍&#xff0c;我们已经学会了如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。然而&#xff0c;在实际的物联网环境中&#xff0c;我们往往需要使用更便捷的式来满足配网需求。这篇文章将带你了解一些常见的配网方案&#xff0c;并以 ESP32 为例&…

数据结构入门到入土——链表(2)

目录 一&#xff0c;与链表相关的题目&#xff08;2&#xff09; 1.输入两个链表&#xff0c;找出它们的第一个公共节点 2.给定一个链表&#xff0c;判断链表中是否有环 3.给定一个链表&#xff0c;返回链表开始入环的第一个节点&#xff0c;若无则返回null 一&#xff0c;…

【好书推荐】ReactJS实践入门

作者简介 Chris Minnick是一位多产的作家、博主、培训师、演说家和Web工程师。他创立的WatzThis&#xff1f;公司&#xff0c;一直致力于寻找更好的方法向初学者教授计算机和编程技能。 Chris拥有超过25年的全栈开发经验&#xff0c;他也是一名教龄超过10年的培训师&#xff0c…

科学的摇篮 - 贝尔实验室

AT&T贝尔实验室&#xff08;AT&T Bell Laboratories&#xff09;是美国电信公司AT&T的研究与开发部门&#xff0c;成立于1925年。它在20世纪的许多年里一直是科学与技术创新的重要中心&#xff0c;做出了众多重大贡献&#xff0c;并为多项科技成就奠定了基础。以下…