Day33
SQL-续
数据类型
tinyint、int、unsigned、float、double、decimal、char、varchar、BLOB、LONGBLOB、TEXT、LONGTEXT、date、time、datetime、timestamp、year
# 数据类型 # 整数类型 ------------------------------------------------------------- # tinyint - 1字节 # int - 4字节 # 经验:存储状态码可以选择tinyint,没有特殊要求存储整数可以选择int # INT(3):取值范围是-2147483648~2147483647,数据不满3位就用0填充 # unsigned - 无符号(不满存负数) # zerofill - 0填充 CREATE TABLE user ( id int(3) PRIMARY KEY auto_increment, name varchar(3) , age int(3) unsigned zerofill ) # 浮点类型 ------------------------------------------------------------- # FLOAT # DOUBLE # DECIMAL:以字符串形式存储的小数 # 经验:因为FLOAT和DOUBLE可能会失去精度,所以小数一般使用DECIMAL # 字符串类型 ------------------------------------------------------------- # CHAR(32):定长字符串,比如:存储"abc"会开辟32个字符的空间存储数据 # VARCHAR(32):变长字符串,比如:存储"abc"会开辟3个字符的空间存储数据 # 32:MySQL5.0之前为字节单位,之后为字符单位 # BLOB:存储二进制数据 # LONGBLOB:存储极长的二进制数据 # 经验:存储二进制数据的技术叫做BLOB,就说明MySQL可以存储二进制文件(音频、视频、图片...) # TEXT:存储纯文本数据 # LONGTEXT:存储极长的纯文本数据 # 经验:存储纯文本数据的技术叫做CLOB,就说明MySQL可以存储纯文本文件 # 字符串类型 ------------------------------------------------------------- # date : 2024-06-05 # time : 09:46:30 # datetime :2024-06-05 09:46:30 # timestamp:时间戳 # year : 2024 # UPDATE CURRENT_TIMESTAMP - 数据行修改数据后,自定更新时间戳 CREATE TABLE user ( id int(3) PRIMARY KEY AUTO_INCREMENT, name varchar(3) COLLATE utf8mb4_general_ci DEFAULT NULL, age int(3) unsigned zerofill DEFAULT NULL, xxx timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, )
约束
理解:对于数据的限制
# 约束 # 理解:对于数据的限制 # 主键约束 ---------------------------------------------------------------------------------- # 理解:唯一约束+非空约束,该列上的数据不能重复,且不能为null # 添加主键约束 - 方式一 CREATE TABLE user( username VARCHAR(32) PRIMARY KEY, password VARCHAR(32), name VARCHAR(32), sex VARCHAR(32), age INT(3), phone VARCHAR(32) ) # 添加主键约束 - 方式二 CREATE TABLE user( username VARCHAR(32), password VARCHAR(32), name VARCHAR(32), sex VARCHAR(32), age INT(3), PRIMARY KEY(username,password) ) # 删除主键约束 ALTER TABLE user DROP PRIMARY KEY; # 唯一约束 ---------------------------------------------------------------------------------- # 理解:该列上的数据不能重复,但可以为null # 添加唯一约束 ALTER TABLE user ADD UNIQUE(phone); # 删除唯一约束 ALTER TABLE user DROP INDEX phone; # 非空约束 ---------------------------------------------------------------------------------- # 理解:该列上的数据不能为null,但可以重复 # 添加非空约束 ALTER TABLE user MODIFY name VARCHAR(32) NOT NULL; # 删除非空约束 ALTER TABLE user MODIFY name VARCHAR(32) NULL; # 添加默认值 ALTER TABLE user MODIFY password VARCHAR(32) DEFAULT("000000"); # 外键约束 ---------------------------------------------------------------------------------- # 理解:约束两个字段的参照完整性 # 添加外键约束 ALTER TABLE user ADD FOREIGN KEY(t_id) REFERENCES type(id); # 删除外键约束(外键名使用show create table user查询) ALTER TABLE USER DROP FOREIGN KEY user_ibfk_1; # 经验:在项目中不使用外键约束,因为效率低
索引
主键索引、唯一索引、普通索引、全文索引、面试题
# 索引 # 理解:索引类似于一本书的目录,让查询更快 # 主键索引 ---------------------------------------------------------------------------------- # 理解:主键作为约束,让字段上的数据不能重复且不能为空;主键作为索引,字段作为查询条件会更快 # 添加主键索引 - 方式一 CREATE TABLE user( username VARCHAR(32) PRIMARY KEY, password VARCHAR(32), name VARCHAR(32), sex VARCHAR(32), age INT(3), phone VARCHAR