MySQL之DDL(数据定义语言)

一、简介

   DDL (Data Definition Language)数据定义语言,适用范围:对数据库中的某些对象(例如,database,TABLE)进行管理,如Create,ALTER和Drop, DDL 操作是隐性提交的,不能rollback!

二、数据库

  进行数据库的操作,首先得登录。

mysql -u 用户名 -p 用户密码
root@419413b9d276:/# mysql -u alian -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 64
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

2.1、显示数据库

  注意不要少了那个 s

show databases;

2.2、创建数据库

  简单写法,采用数据库的默认设置

CREATE DATABASE 数据库名;

  推荐写法,设置 基字符集 数据库排序规则 数据库的名称不能更改

CREATE DATABASE IF NOT EXISTS 数据库名
DEFAULT CHARACTER SET utf8mb4 
DEFAULT COLLATE utf8mb4_general_ci;

2.3、选择数据库

USE 数据库名

2.4、删除数据库

DROP database 数据库名

三、数据类型

3.1、数值类型

类型大小( bytes)范围(有符号)范围(无符号)用途
TINYINT1(-128,127)(0,255)小整数值
SMALLINT2(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度浮点数值
DOUBLE8(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

3.2、日期和时间类型

类型大小( bytes)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳

3.3、字符串类型

类型大小( bytes)用途
CHAR0-255定长字符串
VARCHAR0-65535变长字符串
TINYBLOB0-255不超过 255 个字符的二进制字符串
TINYTEXT0-255短文本字符串
BLOB0-65 535二进制形式的长文本数据
TEXT0-65 535长文本数据
MEDIUMBLOB0-16 777 215二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215中等长度文本数据
LONGBLOB0-4 294 967 295二进制形式的极大文本数据
LONGTEXT0-4 294 967 295极大文本数据

3.4、关于int(长度)

  • 如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,比如插入1,显示为00000000001,左边补了 10 个零直至长度达到 11 位
  • 设置字段的显示宽度并不限制字段存储值的范围,如果你设置int(6),但是仍然可以存储99999999
  • 设置的字符宽度只对数值长度不满足宽度时有效,比如设置int(6),插入1时,长度不足6,因此在左边补充5个零,如果你插入888888888,那个显示宽度就不起作用了

四、数据表

4.1、创建表

  创建表的正确姿势说明

CREATE TABLE `user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` INT UNSIGNED NOT NULL DEFAULT '1000' COMMENT '学生编号',
  `user_name` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '学生姓名',
  `gender` CHAR(1) NOT NULL DEFAULT '1' COMMENT '性别',
  `birthday` DATE NOT NULL DEFAULT '1970-01-01' COMMENT '生日',
  `home_address` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '家庭住址',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_user_id` (`user_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学生信息表';
  • mysql创建表尽量保留一个自增长的id,并且设置为 UNSIGNED
  • 字段的命名要有意义,结合编程语言可以把驼峰模式改为 下划线 分割会自动映射
  • 字段的类型一定要合理,并且设置合适的长度,建议加上字段说明 COMMENT
  • 设置任意一个字段一定要设置默认值,尽量避免值为 NULL 的情况
  • create_time update_time 一般业务表都会有的,一个是创建的时间,然后都不会变,一个是随着数据改变,时间也会表,非常的实用
  • 根据情况设置索引,索引的命名规范(主键索引: pk_ 即primary key;唯一索引: uk_ 即 unique key;普通索引: idx_ 即index的简称)
  • 业务表引擎一般是InnoDB,因为它支持事务
  • 表的字符集设置为 utf8mb4 ,排序规则 utf8mb4_general_ci
  • 最后记得加上表的注释 COMMENT

4.2、显示表

show TABLEs;

4.3、查看表结构

desc 数据库的表名;

4.4、显示创建表的语句

show create TABLE 数据库的表名;

4.5、修改表

4.5.1、修改表名或注释
ALTER TABLE 原数据库表名 rename to 新数据库表名;
ALTER TABLE 数据库表名 COMMENT='这是表的注释';
4.5.2、添加字段
ALTER TABLE 数据库表名 add 要添加的字段名 数据类型 约束条件 字段说明 after 字段名;
#比如在student表最后添加一个age字段
ALTER TABLE student add `age` TINYINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '年龄';
#比如在student表中的gender字段后添加一个age字段
ALTER TABLE student add `age` TINYINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '年龄' after gender;
#如果是在student表中的gender字段前添加一个age字段
ALTER TABLE student add `age` TINYINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '年龄' before gender;
4.5.3、修改字段名
ALTER TABLE 数据库表名 CHANGE 旧字段名 新字段名 新字段类型;
#如我们把student表中的age字段改为user_age,默认值改为1(实际就是创建字段定义重新写下)
ALTER TABLE student change age user_age TINYINT UNSIGNED NOT NULL DEFAULT '1' COMMENT '年龄';
4.5.4、 删除字段
ALTER TABLE 数据库表名 DROP 要删除的字段名;
#比如我们现在删除user_age字段(因为有了生日的属性)
ALTER TABLE student DROP user_age;
4.5.5、设置默认值
##设置模式值
ALTER TABLE 数据库表名 ALTER 字段名 SET DEFAULT 要设置的值;
##把student表的gender设置默认值为0
ALTER TABLE student ALTER gender SET DEFAULT 0;
4.5.6、 删除默认值(不建议)
##删除模式值
ALTER TABLE 数据库表名 ALTER 字段名 DROP DEFAULT;
#比如删除student表的gender的默认值
ALTER TABLE student ALTER gender DROP DEFAULT;

4.6、清空表

TRUNCATE TABLE 数据库的表名;

4.7、删除表

DROP TABLE 数据库的表名;

4.8、修改自增长值

#修改自增长的值
ALTER TABLE 数据库的表名 AUTO_INCREMENT=要设置的自增长的值

4.9、修改表的存储引擎

#修改表的存储引擎(MyISAM 或者 INNODB)
ALTER TABLE 数据库的表名 ENGINE=存储引擎名称
ALTER TABLE student ENGINE=INNODB;

五、主键和索引

5.1、添加主键

ALTER TABLE 数据库的表名 ADD PRIMARY KEY(字段名称);

5.2、添加复合主键

ALTER TABLE 数据库的表名 ADD PRIMARY KEY(字段名称1,字段名称2,...);

5.3、删除主键

ALTER TABLE 数据库的表名 DROP PRIMARY KEY;

  例外:如果是自增长的主键需要先移除自增长设置

#用MODIFY删除自增长属性,注意MODIFY不能去掉主键属性
ALTER TABLE student MODIFY id INT UNSIGNED NOT NULL COMMENT '主键';
#删除主键
ALTER TABLE student DROP PRIMARY KEY;

5.4、创建唯一索引

CREATE UNIQUE INDEX 索引名称 ON 表名称(表字段) 

5.5、添加唯一索引

ALTER TABLE 数据库的表名 ADD UNIQUE 索引名称(字段名称);
#比如给student的user_id字段添加索引,索引名称为idx_user_id
ALTER TABLE student ADD UNIQUE uk_user_id(user_id);

5.6、创建普通索引

#此处length表示字段的前多少位,也就是短索引
CREATE INDEX 索引名称 ON 数据库的表名(字段名称(length))  

5.7、添加普通索引

ALTER TABLE 数据库的表名 add INDEX 索引名称(字段名称);
#比如给student的user_name字段添加索引,索引名称为idx_user_name
ALTER TABLE student ADD INDEX idx_user_name(user_name);

5.8、查看表的索引

SHOW INDEX FROM 数据库的表名;

5.9、删除索引

#删除索引
ALTER TABLE 数据库的表名 DROP UNIQUE 索引名称;
#比如删除student表上user_name字段上的索引
ALTER TABLE student DROP INDEX idx_user_name;

或者

#或者
DROP INDEX 索引名称 on 数据库的表名;
#比如删除student表上user_name字段上的索引
DROP INDEX idx_user_name on student;

六、视图

6.1、视图创建

CREATE VIEW 视图名(字段1,字段2,...,字段n)
AS
SELECT 字段1,字段2,...,字段n FROMWITH CHECK OPTION;

比如我们把学生表的编号和姓名放到一个视图

#创建一个包含学生编号和姓名的视图
CREATE VIEW v_student(user_code,user_name)
AS
SELECT user_code,user_name FROM tb_student
WITH CHECK OPTION;

下面是一个多表视图创建的事例

#把学生表和班级表的编号和名称放到一个视图
CREATE VIEW v_class_student(class_code,class_name,user_code,user_name)
AS
SELECT c.class_code,c.class_name,s.user_code,s.user_name FROM tb_class c, tb_student s WHERE c.class_code=s.class_code
WITH CHECK OPTION;

6.2、视图查询

#查询视图
select * from 视图名;
#比如我们差之前创建的学生视图
SELECT user_code,user_name FROM v_student;

6.3、视图更改

#更改视图
create or replace view 视图名 as 查询语句;

6.4、视图删除

#删除视图
drop view if exists 视图名;
#删除学生视图
drop view if exists v_student;

学习计划:

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值