ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

记录ddl 学习过程

记录ddl 学习过程 DDL 数据定义语言简称DDL(Data Definition Language)用来定义数据库对象数据库表列等关键字createalterdrop搭建数据存储的框架如管理数据库、管理数据表、管理字段1、数据库的基本操作① 创建数据库创建 数据库 create database 数据库名称(字母数字下划线组成以字母开头不能出现中文以及特殊字符)mysqlcreate database 数据库名称[设置编码格式];案例 创建db_itheima库 create database db_itheima;创建db1库并指定默认字符集 create database db_itheima default charset gbk;create databaseifnot exists db_itheima default charactersetutf8;说明不能创建相同名字的数据库 如果存在不报错(if not exists)扩展编码格式常见的gbk中国的编码格式与utf8国际通用编码格式latin1这是早期的字符编码格式支持256个字符适用于基本的西方语言字符集。gb2312/gbk由于latin1的字符集无法表示汉字中国开发了自己的编码格式gb2312后来升级为gbk以支持更多汉字和扩展字符集。big5中国台湾也开发了一套用于表示繁体中文的字符编码格式称为big5适用于繁体中文字符集。utf8为了支持多语言环境国际标准化组织开发了utf8编码能够表示几乎所有已知语言的字符。由于早期版本的utf8不完全支持某些特殊符号和表情符号MySQL5.6版本以后推出了utf8mb4用于支持更多字符如Emoji表情每个字符最多使用4个字节。② 查询数据库显示 所有数据库 show databases;③ 删除数据库删除 数据库 drop database 数据库名称;④ 选择数据库从数据库列表中查找需要使用的数据库mysql use db_itheima;查看正在使用的数据库8.0以后版本需要基于select查询来获取当前数据库mysql select database();小结创建数据库CREATE DATABASE 数据库名查看数据库SHOW DATABASES;删除数据库DROP DATABASE 数据库名 – 慎重使用数据库USE 数据库名DDL数据表操作DDL要学4个关键字create创建、drop删除、alter修改、show查询特别注意创建数据表必须有一个前提首先要明确选择某一个数据库。1、数据表的基本操作1、数据表的创建创建 数据表 create table 数据表名称PowerShell mysql create table 数据表名称( 字段1 字段类型 [字段约束], 字段2 字段类型 [字段约束], ... ); 常用字段类型 整数int-21亿 ~ 21亿 浮点decimal(M,N)M代表整数长度 小数总长度N代表小数点后保留几位小数decimal(5,2) 999.99 字符串类型固定长度用char(M)变化长度用varchar(M) M代表最大字符数 枚举类型enum(男,女)插入值要么为男要么为女 案例创建一个admin管理员表拥有3个字段编号、用户名称、用户密码 mysql create database db_itheima; mysql use db_itheima; mysql create table tb_admin( id tinyint, username varchar(20), password char(32) ) engineinnodb default charsetutf8; tinyint 微整型范围-128 ~ 127无符号型则表示0 ~ 255 表示字符串类型可以使用char与varcharchar代表固定长度的字段varchar代表变化长度的字段 案例创建一个article文章表拥有4个字段编号、标题、作者、内容 mysql use db_itheima; mysql create table tb_article( id int, title varchar(50), author varchar(20), content text ) engineinnodb default charsetutf8; text 文本类型一般情况下用varchar存储不了的字符串信息都建议使用text文本进行处理。 varchar存储的最大长度理论值65535个字符。但是实际上有几个字符是用于存放内容的长度的所以真正可以使用的不足65535个字符另外varchar类型存储的字符长度还和编码格式有关。1个GBK格式的占用2个字节长度1个UTF8格式的字符占用3个字节长度。GBK 65532~65533/2UTF8 65532~65533/32、查询已创建数据表显示所有数据表当前数据库mysqluse 数据库名称;mysqlshow tables;显示数据表的创建过程编码格式、字段等信息 mysqldesc 数据表名称;mysqlshow create table 数据表名称;# 查询建表语句3、修改数据表信息多写① 数据表字段添加基本语法 alter table 数据表名称 add 新字段名称 字段类型 firstmysqlaltertable数据表名称add新字段名称 字段类型first mysqlaltertable数据表名称add新字段名称 字段类型after其他字段名称;选项说明first把新添加字段放在第一位after字段名称把新添加字段放在指定字段的后面 案例在tb_article文章表中添加一个addtime字段类型为date(年-月-日)日期类型有两个date年-月-日、time小时:分钟:秒、datetime年-月-日 小时:分钟:秒 mysqlaltertabletb_articleaddaddtimedateaftercontent;mysqldesctb_article;② 修改字段名称或字段类型修改字段名称与字段类型也可以只修改名称mysqlaltertabletb_admin change username namevarchar(40);mysqldesctb_admin;说明 change比较神奇既可以修改字段名称又可以修改字段类型 change 源字段名称 修改后字段名称 修改后的字段类型这个也可以不改但是必须要写 仅修改字段的类型 mysqlaltertabletb_adminmodifynamevarchar(20);mysqldesctb_admin;说明modify字段名称 新字段类型仅可以修改字段类型③ 删除某个字段mysqlaltertabletb_articledrop字段名称;mysqldesctb_article;④ 修改数据表名称renametable旧名称to新名称;4、删除数据表droptable数据表名称;扩展查看数据库 与 数据表对应的编码格式-- 查看数据库编码格式showcreatedatabase数据库名称;-- 查看数据表编码格式showcreatetable数据表名称;showcreatedatabasedb_itheima;showcreatetabletb_article;2、字段类型详解重点整数int、浮点数decimal、字符串char/varchar/text、枚举类型enum、日期时间类型date、time、datetime类型 英文读音 中文近似注音 作用int /ɪnt/ 因特 整数decimal /ˈdesɪml/ 戴西莫 精确小数金额char /tʃɑː®/ 查 定长字符串varchar /ˈvɑːkɑː®/ 瓦卡 变长字符串text /tekst/ 泰克斯特 大文本enum /ɪˈnjuːm/ 伊纽姆 枚举单选date /deɪt/ 德特 仅日期年月日time /taɪm/ 泰姆 仅时间时分秒datetime /ˌdeɪtˈtaɪm/ 德特泰姆 日期 时间① 整数类型分类 类型名称 说明tinyint 很小的整数 -128 ~ 127smallint 小的整数 -32768 ~ 32767mediumint 中等大小的整数 -8388608 ~ 8388607int(integer) 普通大小的整数 -2147483648 ~ 2147483647create table tb_student(idint, name varchar(20), age tinyint unsigned)defaultcharsetutf8;unsigned 无符号的意思 SQL优化手段尽量选择满足这个字段范围区间的数据类型② 浮点类型小数类型浮点类型精度失真情况和定点类型推荐使用定点类型分类 类型名称float 单精度浮点数double 双精度浮点数decimal(m,d) 定点数decimal(10,2)decimal(10,2) 代表这个数的总长度为10 整数长度 小数长度2代表保留2位小数decimal(5,2) 999.99建议① 精度要求不高2-4位小数的情况影响不大可以使用float/double② 如果精度要求比较高的情况可以使用decimalcreate table tb_product(idint, name varchar(100), price decimal(11,2))defaultcharsetutf8;③ 日期类型份额里 类型名称year YYYY 1901~2155time HH:MM:SS -838:59:59~838:59:59date YYYY-MM-DD 1000-01-01~9999-12-3datetime YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59timestamp YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC~2038-01-19 03:14:07UTC选日期类型看格式用的最多的是 date、datetimedate年-月-日time小时分钟秒数datetime date time合并create table tb_news(idint, title varchar(100), addtime datetime)defaultcharsetutf8;④ 文本字符串类型类型名称 说明char(m) m为0~255之间的整数定长固定长度m代表字符长度255代表不能超过255个字符varchar(m) m为0~65535之间的整数变长变化长度65535代表字节长度和编码有关utf8最多2万多个汉字text 允许长度0~65535字节mediumtext 允许长度0~167772150字节longtext 扩展 允许长度0~4294967295字节选择文本主要长度固定char、变化varchar、还长的就是text。varchar(m)理论值65535个字符但是理论上底层最大能存储的字节数也是65535。但是如果是汉字和编码格式有关gbk模式下1个汉字2个字节理论上大概能3万左右个汉字。utf8模式下1个汉字3个字节理论值就是2万多个汉字。普通enum(‘值1’,‘值2’,‘值3’)多选一从多个值中选择其中的某一个3、字段约束详解重点字段约束在数据类型的基础上给字段添加约束行为如不能为空等等基本语法create table 数据表名称(字段名称 字段类型[可选字段约束])defaultcharsetutf8mb4;在MySQL中字段约束一共有五种约束① 主键约束 ② 唯一约束 ③ 非空约束 ④ 默认值约束 ⑤ 外键约束1、主键约束强调非空、唯一、一个表中有且仅有1个主键在MySQL中往往id字段都是主键primary keyarticle文章表id主键title标题author作者addtime发布时间use db_itheima;create table article(idint primary key,# /ˈpraɪmeri/主要的title varchar(80), author varchar(20), addtimedate)defaultcharsetutf8mb4;或 create table article(idint, title varchar(80), author varchar(20), addtime date, primary key(id))defaultcharsetutf8mb4;-- 向表中插入数据 insert into article values(1,MySQL数据库运维,张三,2025-02-10);-- 主键强制为null错误演示 insert into article values(null,Python运维开发,李四,2025-02-10);-- 主键强制重复错误演示 insert into article values(1,Python运维开发,李四,2025-02-10);2、唯一约束强调唯一可以为空一个表中可以同时拥有多个唯一约束unique主键约束 与 唯一约束区别和主键约束相同点都是唯一的和主键约束不同点主键非空、有且仅有1个唯一可以为空在一个表中也可以同时拥有多个空值案例创建一个用户表id主键nameagecode身份证号码要求唯一create table users(idint primary key, name varchar(20), age tinyint unsigned, code char(18)unique)defaultcharsetutf8;-- 插入数据 insert intousersvalues(1,张三,18,123456789012345678);-- 插入重复数据错误演示 insert intousersvalues(2,李四,18,123456789012345678);-- 插入数据但是唯一列为null insert intousersvalues(2,王五,18, null);3、非空约束强调非空这个列不允许出现null空值not null案例创建一个商品表goods有id主键name商品名称price商品价格name和price都必须为非空create table goods(idint primary key, name varchar(80)not null, price decimal(11,2)not null)defaultcharsetutf8mb4;-- 插入数据 insert into goods values(1,Python从入门到放弃,99.99);-- 插入数据错误演示 insert into goods values(2,Java从入门到放弃, null);4、默认值约束强调默认值插入数据时如果没有指定对应的值则其自动使用默认值做为最终结果default 默认值案例创建一个用户表usersid主键、name用户名、age年龄、gender性别要求gender默认值为maledrop tableusers;create table users(idint primary key, name varchar(20), age tinyint unsigned, gender enum(male,female)defaultmale)defaultcharsetutf8mb4;descusers;-- 插入数据 insert intousersvalues(1,张三,18,male);-- 插入数据触发默认值 insert into users(id, name, age)values(2,李四,18);insert intousersvalues(3,王五,18, default);-- 插入数据不使用默认值 insert intousersvalues(4,赵六,18,female);5、外键约束了解强调多表级联操作外键约束前提① 多表 ② 数据表引擎必须为InnoDB引擎小结MySQL语句中一共有5种主键约束、唯一约束、非空约束、默认值约束、外键约束-- 产品类别表 CREATE TABLE product_category(cid INT PRIMARY KEY AUTO_INCREMENT COMMENT分类主键, cname VARCHAR(50)NOT NULL COMMENT分类名称, remark VARCHAR(200)COMMENT分类备注)ENGINEInnoDB DEFAULTCHARSETutf8mb4;-- 产品表 CREATE TABLE product(pid INT PRIMARY KEY AUTO_INCREMENT COMMENT产品主键, pname VARCHAR(100)NOT NULL COMMENT产品名称, price DECIMAL(10,2)NOT NULL COMMENT产品价格, stock INT DEFAULT0COMMENT库存, cid INT COMMENT所属分类id, -- 定义外键product.cid 关联 product_category.cid FOREIGN KEY fk_product_category(cid)REFERENCES product_category(cid)ON DELETE CASCADE -- 级联删除分类删掉该分类下所有产品一起删 ON UPDATE CASCADE -- 级联更新分类cid修改产品里cid同步更新)ENGINEInnoDB DEFAULTCHARSETutf8mb4;4、auto_increment自动增长重点作用自动增长往往用于设置主键可以让其值自动增长默认从1开始依次递增。drop tableusers;create table users(idint auto_increment primary key, name varchar(20), age tinyint unsigned, gender enum(male,female)defaultmale)defaultcharsetutf8mb4;insert intousersvalues(null,张三,23,male);insert intousersvalues(null,李四,24,male);delete fromuserswhereid2;insert intousersvalues(null,王五,25,male);5、小结主键约束和自动增长列 primary key 唯一非空 auto_increment 确保行数据不重复的列主键列唯一且不为空唯一约束unique 唯一 限定某个字段的值不能重复但是允许null只重复非空约束not null 非空 限定某个字段的值不能为空(null)但是允许空字符串外键约束foreign key 表和表之间的关系 指的是主表中和从表的主键对应的哪个字段(从表的外键和主表的主键产生关联) 每个表中可以包含多个外键外键是跨表引用其他表的主键被引用为主表外键表为子表
返回列表