DDL(数据定义语言)
创建和查看表
格式
数据类型
数值类型
字符串类型
日期类型
相同点
用途相同:两者都用于存储日期和时间的组合值,通常包括年、月、日、小时、分钟和秒。
格式相同:它们的格式通常是 YYYY-MM-DD HH:MM:SS。
存储相同:在许多数据库系统中,它们都可以存储毫秒级别的精度。
不同点
- 时间范围:
Datetime:在 MySQL 中,Datetime 的有效范围是 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。这使得它适用于更广泛的时间范围需求。
Timestamp:Timestamp 的有效范围是 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC。它的范围受到 UNIX 时间戳的限制(32位的整数)。 - 时区处理:
Datetime:Datetime 字段不处理时区。它存储的时间值与时区无关,并且在存储和读取时不会进行时区转换。
Timestamp:Timestamp 字段会根据服务器的时区设置进行转换。当插入一个 Timestamp 值时,它会先将其转换为 UTC,然后存储。当读取该值时,它会将其转换回服务器的时区。 - 自动更新:
Datetime:Datetime 字段不会自动更新。
Timestamp:Timestamp 字段可以配置为在每次行更新时自动更新(使用 CURRENT_TIMESTAMP 作为默认值并配置 ON UPDATE)。 - 存储方式:
Datetime:存储的是字符串形式的日期时间,通常使用8字节存储。
Timestamp:存储的是从1970年1月1日开始的秒数,即 UNIX 时间戳,通常使用4字节存储。 - 实际使用
Datetime 通常用于需要存储绝对时间且不涉及时区转换的场景,比如记录事件的发生时间、预约时间等。
Timestamp 更适用于需要记录和比较时间戳的场景,尤其是当数据在不同时区的系统之间传输时,如记录最后修改时间、创建时间等。
修改表结构
修改列
alter table student change dept department VARCHAR(30);
DML(数据操作语言)
数据插入
使用, 可以插入多条数据
INSERT into student (sid,name,gender,age,birth,address)
VALUES (1001,'李四','男',18,'2001-07-23','南昌'),
(xxx),
(xxx);
数据修改
数据删除
MySQL约束
主键约束
单列主键
pk1是主键名,括号里是列名,pk1可以省略
联合主键
联合主键里的各列任何一个都不能为空
自增长约束
非空约束
唯一约束
NULL和任何值都不相等,NULL和NULL都不相等,所以设置了唯一约束的列是可以同时为NULL的
删除唯一约束
alter table <table name> drop index <唯一约束名>
默认约束
零填充约束
如果插入了123,则会变成0000000123(加了约束后int是10位)