一、DDL
DDL(Data Definition Language),数据定义语言,该部分语言用于对数据库、数据表的操作(不包括对表中数据记录的操作),具体包括:
- 对数据库的操作
- 对数据表的操作
二、 对数据库的操作–【增/删/改/查/切换】
操作 | DDL SQL |
---|---|
创建数据库 | create database [if not exists] mydb1 [charset=utf8mb4] |
删除数据库 | drop database [if exists] mydb1; |
修改数据库编码 | alter database mydb1 character set utf8mb4; |
查看所有的数据库 | show databases; |
切换数据库(选择要操作的库) | use mydb1; |
示例–创建数据库并指定字符集和排序规则
CREATE DATABASE IF NOT EXISTS db1
CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
1、对于一些需要占据4bytes的文字,mysql的
utf8
是不支持的,所以字符集一般选utf8mb4;2、COLLATE用于指定每个国家对应语言的排序规则,是和数据编码(CHARSET)相关的,影响字符类型(VARCHAR,CHAR,TEXT等)的比较或排序,utf8mb4默认对应utf8mb4_general_ci;
3、COLLATE中的_ci字样,表示大小写无关,也就是说"A"和"a"在排序和比较的时候是一视同仁的。selection * from table1 where field1="a"同样可以把field1为"A"的值选出来。对于那些_cs后缀的COLLATE,表示大小写敏感的。
三、对数据表的操作–【增/删/改/查】
操作 | DDL-SQL | |
---|---|---|
增 | create table [if not exists] 表名 ( 字段名1 类型[(宽度)] [约束条件] [comment ‘字段说明’], 字段名2 类型[(宽度)] [约束条件] [comment ‘字段说明’], 字段名3 类型[(宽度)] [约束条件] [comment ‘字段说明’] )[表的一些设置]; | |
删 | DROP TABLE 表名; | |
查 | 查看所有的表 | SHOW TABLES; |
查 | 查看表结构 | DESC 表名; |
查 | 查看建表语句 | SHOW CREATE TABLE table_name; |
改 | 添加列 | alter table 表名 add 列名 类型(长度) [约束]; |
改 | 删除列 | alter table 表名 drop 列名; |
改 | 修改列 | alter table 表名 change 旧列名 新列名 类型(长度) 约束; |
改 | 修改表名 | rename table 表名 to 新表名; |
示例–创建表
CREATE TABLE `t_put_in_roi_ad_plan`(
`id` bigint(20) UNSIGNED PRIMARY KEY,
`channel` bigint(20) UNSIGNED NOT NULL COMMENT '使用channel区分巨量引擎、广点通等',
`account` bigint(20) UNSIGNED NOT NULL COMMENT '广告账户',
`ad_id` bigint(20) UNSIGNED NOT NULL COMMENT '广告计划',
`group_id` INT(11) UNSIGNED NOT NULL COMMENT '广告分组:0\1\2\3代表A1\A2\B1\b2',
`stop_count` bigint(20) UNSIGNED COMMENT '小于ROI阈值次数',
`sub_channel` bigint(20) UNSIGNED NOT NULL COMMENT '子渠道',
`status` TINYINT(4) NOT NULL DEFAULT 1 COMMENT '计划开启/关闭:0-关闭,1-开启,关闭时不计算ROI、不进行状态操作,但参与判断是否为新的adId分组',
`is_stoped` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '暂停标记:0-未暂停,1-已暂停',
`is_deleted` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '删除标记:0-未删除,1-已删除',
`stoped_time` datetime NULL COMMENT '暂停时间,用于-暂停超过72小时删除广告计划的时间对比',
`created_by` VARCHAR(255),
`created_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modified_by` VARCHAR(255),
`modified_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
INDEX (`channel`,`account`),
UNIQUE INDEX(`channel`,`account`,`ad_id`,`sub_channel`)
) COMMENT '投放ROI广告计划表';
3.1 常用数据类型
3.1.1 数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 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和D的值 | 小数值 |
3.1.1.1 int(11)代表什么意思?
(1)11表示数字的显示宽度;
(2)显示宽度并不影响可以存储在该列中的最大值。INT(5) 和 INT(11)可以存储相同的最大值。哪怕设置成 INT(20) 并不意味着将能够存储20位数字(BIGINT),该列还是只能存储INT的最大值;
(3)当列设置为UNSIGNED ZEROFILL时,INT(11)才有意义,其表示的意思为如果要存储的数字少于11个字符,则这些数字将在左侧补零。(注意:ZEROFILL默认的列为无符号,因此不能存储负数)。
int(11)使用举例
1、表结构:
CREATE TABLE product(
price1 INT(11) UNSIGNED,
price2 INT(11) UNSIGNED ZEROFILL,
price3 INT(20) UNSIGNED ZEROFILL
);
2、插入数据及结果
- 场景1:INSERT INTO product VALUES(1,1,1);
- 场景2:INSERT INTO product VALUES(2,-2,2);
- 场景3:INSERT INTO product VALUES(1,1,111111111111);
3.1.1.2 DECIMAL(M,D)的说明
DECIMAL底层使用字符串进行存储,所以小数位最精确,浮点数一般都用DECIMAL类型。
(DOUBLE、FLOAT因为涉及到小数位数截断,造成四舍五入,所以不精确)
3.1.2 字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
3.1.2.1 VARCHAR(20)的说明
1、表示可以存储20个字符,1个汉字或1个数字/字母都表示1个字符;
2、varchar是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长,varchar比char会更加节省空间;
3、char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,不足的部分用隐藏空格填充;但char查找效率会很高。
3.1.3 日期类型
3.1.4 NULL
在mysql中,null和任何值都不相同,包括他自身(即null不等于null)。所以数据表中,某列即使有唯一约束,仍可以插入null值。
1、从开发者视角学习MYSQl系列文章:https://blog.youkuaiyun.com/maoxuemin/article/details/123523457
2、快速问答入口:https://gitee.com/wendakuai/introducton/wikis/question