sql 4,创建表类型
1,整数类型(类型,占有空间,范围) 标准sql: int / integer 4字节 无符号 0 - 2/32-1 有符号 -2 31 / 2 / 31 -1 smallint 2字节 无符号 0 - 2/16-1 有符号 -2 17 / 2 / 17 -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 -> 无符号|无符号 没有负值,都是正值,将负值部分,绝对值后,加入正值部分! 注意: 选合适范围,范围合适先占有空间最小的! 练习1 创建一个ddl_d1库中,创建一个t1表,包含: 年龄和学号(范围不确定,但是没有负值)
CREATE TABLE t1(
t1_age TINYINT UNSIGNED COMMENT '年龄,无符号,范围就是 0 - 255',
t1_number BIGINT UNSIGNED COMMENT '学号,最大的,且没有负号'
)
2,
建表类型[浮点/定值] 浮点类型(类型,M,D) float(m,d) 4字节 m 24 d 8 double(m,d) 8字节 m 53 d 30 定值类型(类型,M,D) decimal(m,d) 动态占有 m 65 d 30
使用对比:
精度要求不高,例如:身高,体重 float / double
精度要求特别高,钱 工资,价格 decimal
3,
建表类型[字符串] 字符串类型 char 固定长度类型 一旦声明固定占有对应的空间 M 最大255 [性能较好] varchar 可变长度类型 一旦声明,可以插入小于的长度,自动进行伸缩 M 占有的空间不能超过一行的最大显示65535字节 [性能一般] text 大文本类型,声明不要指定长度,有固定的大小限制, text [65535] , 不占有一行的最大限制空间 细节理解 1. char声明的时候可以不写m char = char(1) 2. char声明了最大长度限制,输入的文本小于长度限制,会在右侧补全空格 char(5) -> 'abc' -> 'abc ' 3. char类型在读取的时候,会自动去掉右侧的空格 'abc ' -> 'abc' 4. varchar声明的时候,必须添加m限制 varchar(m) 5. mysql4.0以下版本 varchar(20) -> 20字节限制 mb3 -> 6 6. mysql5.0以上版本 varchar(20) -> 20字符限制 7. varchar类型中识别空格,插入空格 读取也是有空格 演示varchar最大限制 前提: mysql中一行数据最大的占有空间是65535字节,除了TEXT or BLOBs类型的列(不占有65535限制 法外狂徒) 一行-> name1列 -> name1列占有的最大空间65535字节 varchar类型默认会使用1字节标识是否为null -> 65535-1 = 65534字节 字符集utf8mb4 1个字符 = 4个字节 65534 / 4 = 16383 解决方案 : 1. 缩小字符大小限制 m变小 [不合理] 2. 可以修改字符集 [不合理] 3. 可以将字符串类型变成TEXT,不占有一行的限制
4,
建表类型[时间类型] 时间类型 year 1 yyyy | yy '1910' | 1910 time 3 HH:MM:SS '10:10:10' date 3 YYYY-MM-DD '1910-10-10' datetime 8 YYYY-MM-DD HH:MM:SS '1910-10-10 10:10:10' timestamp 4 YYYY-MM-DD HH:MM:SS '1970-10-10 10:10:10' 注意情况 1. year可以写两位年 00 - 99 00-69 =2000 - 2069 70 - 99 = 1970 - 1999 推荐四位的年 2. 时间类型,要遵循他们的格式插入,插入的时候就是按字符插入,时间默认不会自动赋值 扩展自动填写时间:
1.插入默认添加时间
datatime | timestamp default current_timestamp
2.修改默认更改时间
datatime | timestamp default current_timestamp on update current_timestamp
演示: 创建t2表, 注册日期 字段插入自动添加时间,更新数据不变 更新日期 字段插入自动添加时间,更新数据时间改变 */
CREATE TABLE t2(
name1 VARCHAR(20),
reg_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册日期,插入数据自动维护时间',
up_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日期,插入数据填写时间,更新数据自动改变时间'
)
5,修改表中字段的名字
alter table books change 要修改的字段名 修改后的字段名 字段名的类型
alter table books change book_num book_num1 TINYINT
6,修改表的字段类型
alter table 表名 modify 要修改的字段 要修改为的字段类型
alter table books MODIFY book_num1 int
7,删除表中某个字段
alter table 表名 drop 字段名
alter table books drop books_num1
8,新增字段
alter table books add 新增的字段名 字段类型
alter table books add books_num2 int
9,修改表名
alter table books rename book