你看到的这个文章来自于 http://www.cnblogs.com/ayanmw
转载自: http://blog.csdn.net/daydreamingboy/article/details/6310907
分析 MySQL 数据类型的长度
MySQL 有几种数据类型可以限制类型的 "长度", 有 CHAR(Length)VARCHAR(Length)TINYINT(Length)SMALLINT(Length)MEDIUMINT(Length)INT(Length)BIGINT(Length)FLOAT(Length, Decimals)DOUBLE(Length, Decimals)和 DECIMAL(Length, Decimals)
然而, 这些数据类型的长度, 并不是都指数据的大小具体说就是:
(1)CHARVARCAHR 的长度是指字符的长度, 例如 CHAR[3]则只能放字符串 "123", 如果插入数据 "1234", 则从高位截取, 变为 "123" VARCAHR 同理
(2)TINYINTSMALLINTMEDIUMINTINT 和 BIGINT 的长度, 其实和数据的大小无关! Length 指的是显示宽度, 举个例子:
- mysql> create table test(id int(3) zerofill);
- Query OK, 0 rows affected (0.09 sec)
- mysql> insert into test(id) values(1),(1234);
- Query OK, 2 rows affected (0.06 sec)
- Records: 2 Duplicates: 0 Warnings: 0
- mysql> select * from test;
- +------+
- | id |
- +------+
- | 001 |
- | 1234 |
- +------+
- 2 rows in set (0.00 sec)
可以看出, id 的显示宽度为 3, 不足的左边补 0, 数据长度超过的则原样输出如果没有 zerofill, 则看不出显示宽度, 没有前导零
(3)FLOATDOUBLE 和 DECIMAL 的长度指的是全部数位 (包括小数点后面的), 例如 DECIMAL(4,1) 指的是全部位数为 4, 小数点后 1 位, 如果插入 1234, 则查询的数据是 999.9 过程如下
- mysql> alter table test add realnum decimal(4,1);
- Query OK, 2 rows affected (0.03 sec)
- Records: 2 Duplicates: 0 Warnings: 0
- mysql> insert into test(id,realnum) values(2,1234);
- Query OK, 1 row affected, 1 warning (0.05 sec)
- mysql> select * from test;
- +------+---------+
- | id | realnum |
- +------+---------+
- | 001 | NULL |
- | 1234 | NULL |
- | 002 | 999.9 |
- +------+---------+
- 3 rows in set (0.02 sec)
附录 常见 MySQL 数据类型(留作备忘)
类 & nbsp; 型 | 大 & nbsp; 小 | 描 & nbsp; 述 |
CAHR(Length) | Length 字节 | 定长字段,长度为 0~255 个字符 |
VARCHAR(Length) | String 长度 + 1 字节或 String 长度 + 2 字节 | 变长字段,长度为 0~65 535 个字符 |
TINYTEXT | String 长度 + 1 字节 | 字符串,最大长度为 255 个字符 |
TEXT | String 长度 + 2 字节 | 字符串,最大长度为 65 535 个字符 |
MEDIUMINT | String 长度 + 3 字节 | 字符串,最大长度为 16 777 215 个字符 |
LONGTEXT | String 长度 + 4 字节 | 字符串,最大长度为 4 294 967 295 个字符 |
TINYINT(Length) | 1 字节 | 范围:-128~127,或者 0~255(无符号) |
SMALLINT(Length) | 2 字节 | 范围:-32 768~32 767,或者 0~65 535(无符号) |
MEDIUMINT(Length) | 3 字节 | 范围:-8 388 608~8 388 607,或者 0~16 777 215(无符号) |
INT(Length) | 4 字节 | 范围:-2 147 483 648~2 147 483 647,或者 0~4 294 967 295(无符号) |
BIGINT(Length) | 8 字节 | 范围:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者 0~18 446 744 073 709 551 615(无符号) |
FLOAT(Length, Decimals) | 4 字节 | 具有浮动小数点的较小的数 |
DOUBLE(Length, Decimals) | 8 字节 | 具有浮动小数点的较大的数 |
DECIMAL(Length, Decimals) | Length+1 字节或 Length+2 字节 | 存储为字符串的 DOUBLE,允许固定的小数点 |
DATE | 3 字节 | 采用 YYYY-MM-DD 格式 |
DATETIME | 8 字节 | 采用 YYYY-MM-DD HH:MM:SS 格式 |
TIMESTAMP | 4 字节 | 采用 YYYYMMDDHHMMSS 格式;可接受的范围终止于 2037 年 |
TIME | 3 字节 | 采用 HH:MM:SS 格式 |
ENUM | 1 或 2 字节 | Enumeration(枚举) 的简写,这意味着每一列都可以具有多个可能的值之一 |
SET | 1、2、3、4 或 8 字节 | 与 ENUM 一样,只不过每一列都可以具有多个可能的值 |
参考资料: http://blog.csdn.net/reanimation1/archive/2008/08/26/2833327.aspx
mysql 查看表的结构的 mysql 语句为:
mysql 查看表结构命令, 如下:
desc 表名;
show columns from 表名;
describe 表名;
show create table 表名;
use information_schema;
select * from columns where table_name = 表名;
顺便记下:
show databases; -- 显示数据库列表
use 数据库名; -- 设置为当前工作数据库
show tables; -- 显示当前工作数据库 下的表 列表
原有一 unique 索引 AK_PAS_Name(PAC_Name)在表 tb_webparamcounter 中,
执行以下 sql 修改索引
- alter table tb_webparamcounter drop index AK_PAS_Name;
- alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name);
若发现索引的逻辑不对, 还需要再加一个字段进去, 执行
- alter table tb_webparamcounter drop index AK_PAS_Name;
- alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name,PAC_Value);
注意: 这时的 PC_ID,PAC_Name,PAC_Value 三个字段不是 FOREIGN KEY
否则必需先 drop FOREIGN KEY, 再重做上一步才行
顺便提下 oracle
- select * from v$database;
- select * from all_users;
- select * from user_tables;
来源: http://www.bubuko.com/infodetail-2530464.html