Mysql速成笔记1(DDL)

# 1.DDL之数据库创建
/*
    1.1 数据库创建
        创建数据库
        CREATE DATABASE 数据库名;
        判断再创建数据库
        CREATE DATABASE IF NOT EXITS 数据库名;
        创建数据库指定字符集
        CREATE DATABASE IF NOT EXITS CHARACTER SET 字符集;
        创建数据库指定排序方式
        CREATE DATABASE IF NOT EXITS COLLETE 排序方式;
        创建数据库指定字符集和排序方式
        CREATE DATABASE IF NOT EXITS CHARACTER SET 字符集 COLLETE 排序方式;
        查询数据库的字符集和排序方式
        # mysql8:默认 utf8mb4 utf8mb4_0900_ai_ci
        show variables like 'character_set_database' 在数据库中想写字符是单引号双引号都行但是推荐是单引号
        show variables like 'collations_set_database'
        练习:创建ddl_dl库,指定字符集为utf8,且排序方式用大小写敏感的utf8mb4_0900_as_cs模式
 */
 CREATE DATABASE IF NOT EXISTS ddl_dl CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs #utf8等同于utf8mb3 这俩不配套
 
 /* 
     1.2 数据库查看
         查看所有库
         show databases;
         查看当前使用库 
         select database();
         查看库下所有表
         show tables from 数据库名;
         查看创建库的信息和语句
         show create database 数据库名;
         选中和切换数据库名
         use 数据库名;
         
 */

SHOW DATABASES
         
SELECT DATABASE();

USE ddl_dl

SHOW TABLES FROM mysql;

SHOW CREATE DATABASE ddl_dl;

/*
    1.3 数据库修改
        修改数据库字符集
        ALTER DATABASE 数据库名 CHARACTER SET 字符集;
        修改数据库排序方式
        ALTER DATABASE 数据库名 COLLATE 排序方式;
        修改数据库字符集和排序方式
        ALTER DATABASE 数据库名 CHARACTER SET 字符集 COLLATE 排序方式;
        注意:
        1. 数据库修改只能修改字符集和排序方式,不能修改数据库名
        2. 如果你想改名字,被反数据,删除旧库,创建新库,恢复数据即可!

    1.4 数据库删除
        直接删除数据库
        DROP DATABASE 数据库名;
        判断删除数据库
        DROP DATABASE IF EXISTS 数据库名;
        注意:删除是一个危险命令,确认明确,再操作!!
*/

/* 
    1.5数据库管理练习
    场景1:
    假设你正在为一个多语言的博客平台设计数据库。你需要创建一个名为 bog platlorm 的数据库,
    支持存储多语言的文章和评论。由于博客平台可能包含来自不同语言的用户,你决定使用 utf8mb4字符集,
    排序方式选择默认值,以支持广泛的Unicode 字符
    场景2:
    查看数据库字符集和排序规则
    场景3:
    假设在后续的发展中,你决定将排序方式修改为 utf8mb4 0900 as cs,以实现大小写敏感的比较。
    场景4:查看数据库字符集和排序规则
    场景5:项目惨遭放弃,需要删除项目库,并且跑路
 */

CREATE DATABASE IF NOT EXISTS blog_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;

SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_set_database';

ALTER DATABASE blog_platform COLLATE utf8mb4_0900_as_cs;

SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_set_database';


DROP DATABASE IF EXISTS blog_platform;

#2.DDL之数据表操作
/*
    2.1 建表谱法建表谱法总结
    create table [if not exist]表名
    (#列的信息
    列名 类型[列的约束][列的注释],
    列名 类型[列的约束][列的注释],
    列名 类型[列的约束][列的注释]
    )[描述] [注释]
建表事项
1.表名 列名 列类型必须填写的
2.推荐使用if not exists
3.注释不是必须得,但是是很有必要的!
4.列之间使用,隔开,最后一列没有

*/

/* 
2.2 建表实战
建表语法总结
    场录1:
    假设你正在设计一个简单的在线图书管理系统。需要创建一个名为book libs的数据库,
    你决定使用 utf8mb4 字符集,排序方式选用大小写敏感的utf8mb4 0900_as_cs。
    场录2:创建一个图书表books,判断不存在再创建,并且手动设置books表字符集为utf8mb4,
    添加表注释内容国时图书表books中应该以下列:
    图书名称book name列,类型为varchar(20),加注释。
    图书价格bookprice列,类型为double(4,1),添加注释
    图书数量booknum列,类型为int,添加注释。
    按以上要求完成图书表的创建! 
*/
CREATE DATABASE IF NOT EXISTS book_libs CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;
USE book_libs;
CREATE TABLE IF NOT EXISTS books(
    book_name varchar(20) comment '图书名称',
    book_price double(4,1) comment '图书价格',
    book_num int comment '图书数量'
)CHARSET = utf8mb4 comment '图书表';#在mysql中可以用双引号也可以用单引号,推荐使用单引号

SHOW TABLES FROM book_libs;book_libs;

/*
2.3 建表类型[整数]
整数类型(类型,占有空间,范围)

标准sql:
int /integer 4字节 无符号0-2^32-1 有符号 -2^31-2^31-1 
smallint     2字节 无符号0-2^16-1 有符号 -2^15-2^15-1
mysql方言:
tinyint      1字节 无符号0-2^8-1 有符号 -2^7-2^7-1
mediumint    3字节 无符号0-2^24-1 有符号 -2^23-2^23-1
bigint       8字节 无符号0-2^64-1 有符号 -2^63-2^63-1
有符号:列名 整数类型 ->有符号!有负号 有负值和正值
      列名 整数类型 unsigned ->无符号|无负号 没有负值,都是正值,将负值部分,绝对值后,加入正值部分!
      这个无符号只能跟着数值类型 并且紧贴着数值类型写,他俩是一个组合,要谢就一起写。
注意:选合适范围,范围合适先选占有空间最小的!
    创建一个dd1d1库中,创建一个t1表,包含:年和学号(范围不确定,但是没有负值)

*/

CREATE TABLE IF NOT EXISTS t1(
    t1_age TINYINT unsigned COMMENT '年龄,无符号,范围是 0 -255',
    t1_id BIGINT unsigned COMMENT '学号,最大的,且没有负号'
);

/* 
2.4 建表类型[浮点/定值]
浮点类型(类型,M,D) 基于二进制存储
    float(m,d) 4宁节 m 24 d 8
    double(m,d) 8宁节 m 53 d 30 这俩加unsigned 不会把负值迁移到正值(与int相对)
定值类型(类型,M,D) 基于十进制存储
    decimal(m,d) 动态占有(不同Mysql版本的计算公式有差异) m 65 d 30
    使用对比:精度要求不高,例如:身高,体重 float / double
    精度要求特别高,钱工资,价格 decimal
 */

 /* 
 2.6建表类型[字符串]
字符串类型
    char 周定长度类型一旦声明固定占有对应的空间最大255 char类型永远不为空 [性能较好,因为不需要去做运算]
    varchar 可变长度类型 一旦声明,可以插入小于的长度,自动进行伸缩 M ,理论上说M的大小没有限制,但是其占有的空间不能超过一行的最大限制65535字节 varchar有可能为空[性能一般,因为内部需要去做伸缩运算]
    text 大文本类型,声明不要指定长度,有固定的大小限制,text[65535],不占有一行的最大限制空间 [性能较差,因为读写会带来大量的IO时间消耗]
        大文本,建议存储到文本文件,使用varchar记录文本文件地址,不是用TEXT,直接存大文本,因为TEXT性能较差,占用空间较大,读取消耗的时间太多
细节理解1.char声明的时候可以不写m char = char(1)
        2.char声明了最大长度限制,输入的文本小于长度限制,会在右侧补全空格 char(5)->'abc'->'abc  '
        3.char类型在读取的时候,会自动去掉右侧的空格'abc '->'abc'
        4.varchar声明的时候,必须添加m限制varchar(m)
        5.mysg14.0以下版术 varchar(20)->20 字节限制mb3->6
        6.mysq15.0以上版本varehar(20)->20字符限制
        7.varchar类型中识别空格,插入空格读取也是有空格
演示varchar最大限制
    前提: mysql中一行数据最大的占有空间是65535字节,除了TEXT和BLOBs类型的列
        一行->name1列->name1列占有的最大空间65535字节
        varchar类型默认会使用1字节标识是否为nu11->65535-1=65534字节
        字符集utf8mb4 1个字符=4个字节 65534/4=16383.xxx
解决方案:
    1.缩小字符大小限制 m变小[不合理]
    2.可以修改字符集[不合理]
    3.可以将字符串类型变成TEXT,不占有一行的限制
  */

USE ddl_dl;

CREATE TABLE IF NOT EXISTS t1(
    name1 VARCHAR(16000) COMMENT '姓名,固定长度10字节',
    name2 VARCHAR(384) COMMENT '年龄,可变长度3字节' 
)charset=utf8mb4 COMMENT '即使这样也会报错,因为每行最多只能有16383个字符';

CREATE TABLE IF NOT EXISTS t2(
    name1 VARCHAR(16000) COMMENT '姓名,固定长度10字节',
    name2 TEXT COMMENT '年龄,可变长度3字节' 
)charset=utf8mb4;
/* 
2.7 建表类型[时间类型]
时间类型
    year 1 yyyy | yy '09' 09
    time 3 HH:MM:SS '10:10:10'
    date 3 YY-MM-DD '2000-10-10'
    ◇atetime 8 YY-MM-DD HH:MM:SS
    timestamp 4 YY-MM-DD HH:MM:SS
注意情况
    1.year类型有两位或者四位的表达形式,两位00-69 =2000-2069 70-99=1970- 1999两位需要转换记忆不推荐
    2.时间类型就是一个特殊格式的字符串,插入数据的时候'' , 时间类型需要自动赋值,需要手动添加相关的设置!
扩展自动填写时间:
    1.插入默认添加时间
    datetime |timestamp default current timestamp ;
    2.修改默认更改时间(插入的默认时间)
    datetime | timestamp default current timestamp on update current timestamp;
演示:创建t2表,
    注册日期 字段插入自动添加时间,更新数据不变(插入数据的时候,自动维护时间,后续修改数据,时间不变!)
    更新日期 字段插入自动添加时间,更新数据时间改变(插入数据需要自动维护时间,修改数据也需要维护时间!)

 */

CREATE TABLE t2(
NAME VARCHAR(20) COMMENT '姓名',
register_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '插入自动维护时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新自动维护时间'
)

/* 
2.8创建表实战
场景2:
创建一个学生表(student)米存储借书的学员信息,其中应包含学生姓名、年龄、身高、生日以及注册时间和更新时间等属性

student->字符集->默认
姓名->stu_name varchar(10)
性别->stu_sex char(1) COMMENT '男M,女F'
年龄-> stu_age tinyint unsigned COMMENT '0-255'
身高-> stu_height double(4,1) COMMENT '4位整数,1位小数'
生日-> stu_birthday date COMMENT '2000-10-10'
注册-> stu_regtime timestamp default current timestamp COMMENT '插入自动维护时间'
更新-> stu_uptime timestamp default current timestamp on update current timestamp COMMENT '更新自动维护时间'


 */
CREATE DATABASE IF NOT EXISTS books_libs CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs #utf8等同于utf8mb3 这俩不配套
 
 CREATE TABLE IF NOT EXISTS student(
    stu_name VARCHAR(10) COMMENT '姓名',
    stu_sex CHAR(1) COMMENT '男M,女F',
    stu_age TINYINT UNSIGNED COMMENT '年龄0-255',
    stu_height DOUBLE(4,1) COMMENT '身高 4位整数,1位小数',
    stu_birthday DATE COMMENT '生日 2000-10-10',
    stu_regtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册日期 插入的时候自动维护',
    stu_uptime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日期 插入和更新的时候自动维护时间'
 )charset=utf8mb4 COMMENT '学生表';

/* 
2.8 修改和删除表
修改表中列
    添加列
    alter table 表名 add 列名 类型 [first |after 原列名]
    修改列名
    alter table 表名 change 原列名 新列名 新类型[first |after 原列名]修改列类型
    修改列类型
    alter table 表名 modify 列名 新类型 [first |after 原列名]
    删除列
    alter table 表名 drop 列名:
    修改表名
    alter table 表名 rename[to]新的表名;
    删除表
    drop table [if exists]表名:
    清空表数据
    truncate table 表名:  #删除表中数据+ 删除表的关联记录 
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值