MySQL
MySql字段类型 默认长度
整型:
TINYINT 1 字节
SMALLINT 2 个字节
MEDIUMINT 3 个字节
INT 4 个字节
INTEGER 4 个字节
BIGINT 8 个字节
浮点型:
FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53
FLOAT 4 个字节
DOUBLE 8 个字节
DOUBLE PRECISION 8 个字节
REAL 8 个字节
DECIMAL(M,D) M字节(D+2 , 如果M < D)
NUMERIC(M,D) M字节(D+2 , 如果M < D)
日期和时间型:
DATE 3 个字节
DATETIME 8 个字节 (我试的mysql8,最大6)
TIMESTAMP 4 个字节
TIME 3 个字节
YEAR 1 字节
串类型:
CHAR(M) M字节,1 <= M <= 255
VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8
BLOB, TEXT L+2 字节, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32
ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535)
SET('value1','value2',...) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)
常用SQL
修改表字段
ALTER TABLE contract MODIFY COLUMN content_file_key text null comment '合同文本文件ID';
mysql根据条件字段true或者false,来修改表字段的值为0或者1,sql怎么写?
使用CASE语句
更新
UPDATE my_table
SET active_flag = CASE WHEN is_active THEN 1 ELSE 0 END;
插入
INSERT INTO another_table (active_flag)
SELECT CASE WHEN is_active THEN 1 ELSE 0 END
FROM my_table;
使用IF函数
更新
UPDATE my_table
SET active_flag = IF(is_active, 1, 0);
插入
INSERT INTO another_table (active_flag)
SELECT IF(is_active, 1, 0)
FROM my_table;
Mysql替换表中字段值
如果col_name的值为a,则替换成b
UPDATE table_name
SET col_name = CASE WHEN col_name = 'a' THEN 'b' ELSE col_name END
WHERE id = '1';