数据库的标识规则及数值类型的用法

标识符命名:
数据库涉及的字符规范,注意不是语法规则,属于建议性质的规则
        ①  采用a-z英文字母、数字0-9和下划线 _ 组成,共 63 个字符,不能出现其他字符,除非是注释
                不区分大小写
                使用中文字符实际上是不会有语法错误的,但是不建议
        
②一般命名长度不要超过30个字符的系统限制,变量名称由于需要使用@ 标识符,所以长度限制为 29
       
③数据库对象、变量的命名都采用英文字符,禁止使用中文命名,绝对不允许在对象名称中间出现空
                如果在命名过程中破坏规则实际上引入反引号就好`,注意不是单引号
                create table `t 1`(id int);
       
        ④ 小心保留字,尽量保证命名中不采用保留字,避免容易产生冲突
       ⑤注意开发中字段名称和类型名称的一致性
SQL 注释方法:
一般在编写 sql 脚本文件时需要添加合理的注释信息
        ①单行注释 select 1 ; # 说明信息
                select 1; -- 说明信息
        ②多行注释 /* 开头 */ 收尾
数据类型
        数据类型主要给列上添加域完整性约束。开发者设置列的数据类型后,DBMS 会对添加的数据进行合法 性验证,如果不合法则报错,拒绝添加
数值型
      ① 5种整型 tinyint smallint mediumint int bigint ,主要区别就是取值范围不同,还可以在类
型前添加一个限制词 unsigned ,不允许添加负数
       ② 3种浮点型:不能精确存放 float double ,可以精确存放 decimal numeric
类型名称
范围说明
tinyint
1B,取值范围-128127
smallint2B,取值范围为-3276832767
mediumint3B,取值范围为-83886088388607
int4B,取值范围为2e9
bigint8B,取值范围为9e18
float4B,单精度浮点型,取值范围3.4e38
double8B,双精度浮点型,取值范围1.7e308
decimalnumeric采用定点存放浮点数,具体字节数取决于定义时设置的参数
         unsigned设置列为无符号型,只能存放大于等于0的数据,没有负数。当使用无符号类型时取值范围由 于没有负数部分,从而导致上限扩大一倍
create table t3(id int unsigned); 
mysql> insert into t3 value(-10); -- 不允许存储负数 
ERROR 1264 (22003):Out of range value for column 'id' at row 1 

mysql> insert into t3 value(255); -- 存储数据的上线扩大一倍
 Query OK, 1 row affected (0.01 sec)

create table t3(id int unsigned); 

mysql> insert into t3 value(-10);-- 不允许存储负数 
ERROR 1264 (22003): Out of range value for column 'id' at row 1 

mysql> insert into t3 value(255); -- 存储数据的上线扩大一倍 
Query OK, 1 row affected (0.01 sec)
        可以在类型名后添加括号,其中包含一个正整数,例如int(5),这里的含义并不是要求只能存放5位长度的整数;含义是当进行查询时自动使用空格填充到5个长,如果真实数据长度大于5,则按实际输出
mysql> create table t4(id int(2)); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into t4 values(99999); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t4 values(9);
 Query OK, 1 row affected (0.01 sec)

 mysql> select * from t4;
 +-------+ 
 |    id |
 +-------+
 | 99999 | 
 |     9 | 
 +-------+ 
2 rows in set (0.00 sec)
         decimal和numeric作为字符串存储浮点数,可以实现浮点数的精确存储,并不是float和double种使用 二进制浮点数存储。使用方法numeric(总位宽,小数位数),小数位数必须小于等于总位宽;小数位数最 大值30,总位宽最大值为65,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽
mysql> create table t5(id numeric(5,3)); 
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t5 values(99.999);
 Query OK, 1 row affected (0.01 sec) 

mysql> insert into t5 values(-99.999); -- 位宽统计中符号位不算
 Query OK, 1 row affected (0.01 sec) 

mysql> insert into t5 values(100); -- 整数超出范围报错 ERROR 1264 (22003): Out of range value for column 'id' at row 1

 mysql> insert into t5 values(9.1235); -- 小数位数多余则自动四舍五入 
Query OK, 1 row affected, 1 warning (0.00 sec)

 mysql> insert into t5 values(9.1234);
 Query OK, 1 row affected, 1 warning (0.01 sec)

 mysql> select * from t5;
+---------+ 
|      id | 
+---------+ 
|  99.999 |
| -99.999 |
|   9.124 |
|   9.123 | 
+---------+
 4 rows in set (0.00 sec)
int和numeric
         int类型不能保存小数位,存储小数时会自动进行四舍五入
mysql> create table t6(id int); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t6 values(99.99);
 Query OK, 1 row affected (0.01 sec) 

mysql> select * from t6;
 +------+ 
 |   id |
 +------+
 |  100 |
 +------+ 
1 row in set (0.00 sec)
         numeric可以保存小数位,如果小数位数为0,可以模拟得到int类型的存储效果。采用的实际存储 方式为字符串。查询效率远低于int
mysql> create table t7(id numeric);
 Query OK, 0 rows affected (0.03 sec)

 mysql> desc t7; 
+-------+---------------+------+-----+---------+-------+ 
| Field |          Type | Null | Key | Default | Extra | 
+-------+---------------+------+-----+---------+-------+ 
|    id | decimal(10,0) |  YES |     |    NULL |       |
+-------+---------------+------+-----+---------+-------+ 
1 row in set (0.00 sec)
数值列的扩展属性
    auto_increment一般用于主键,可以实现该列的自动生成连续整数值
mysql> create table t8(id int auto_increment,name varchar(20));
 ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

 mysql> create table t8(id int primary key auto_increment,name varchar(20));
 Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t8 values(null,'yan1');-- 插入数据时不指定插入的值或者设置 插入值为null则会自动添加一个自增值
 Query OK, 1 row affected (0.01 sec) 

mysql> insert into t8 values(99,'yan1'); -- 如果插入数据时不指定对应的值,则 自增长max(id)+1;如果指定对应的值,则自增效果失效 
Query OK, 1 row affected (0.01 sec)

 mysql> insert into t8(name) values('yan1'); 
Query OK, 1 row affected (0.01 sec)

 mysql> select * from t8;
+-----+------+
|  id | name | 
+-----+------+
|   1 | yan1 |
|  99 | yan1 | 
| 100 | yan1 | 
+-----+------+ 
3 rows in set (0.00 sec)
         unsigned禁用负值
        zerofill如果查询显示时,实际数据小于指定位宽,则自动添加0值
mysql> create table t9(id int(5) zerofill);
 Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t9 values(12);
 Query OK, 1 row affected (0.01 sec)

 mysql> select * from t9;
+-------+ 
| id |
 +-------+
 | 00012 | 
+-------+ 
1 row in set (0.00 sec) 

mysql> insert into t9 values(123456);
 Query OK, 1 row affected (0.01 sec) 

mysql> select * from t9; 
+--------+
|     id | 
+--------+
|  00012 | 
| 123456 |
+--------+ 
2 rows in set (0.00 sec)
         default用于设置默认值
mysql> create table t10(id int default 0,name varchar(20)); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t10 values(11,'yan1');-- 指定对应的数据,则default无效 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t10 values(null,'yan1'); -- 指定对应的数据,则default无 效,即使设置的值为null
 Query OK, 1 row affected (0.01 sec) 

mysql> insert into t10(name) values('yan1'); -- 只有不针对这个列进行数据插入 时default才能生效 Query OK, 1 row affected (0.00 sec)

 mysql> select * from t10; 
 +------+------+ 
 |   id | name |
 +------+------+
 |   11 | yan1 | 
 | NULL | yan1 |
 |    0 | yan1 |
 +------+------+ 
3 rows in set (0.00 sec)
null的含义:
        null的意思为未知的数据,它既不是空字符串,不是任何一个具体的值;不能把任何值与一个null 值进行比较。因为null的意思是不确定的值。真正的null值比较必须使用特殊的运算符is null或者is not null
mysql> select null=null; -- =表示等值比较
+-----------+ 
| null=null | 
+-----------+ 
|      NULL |
+-----------+ 
1 row in set (0.00 sec)

 mysql> select null!=null; -- 比较不相等
+------------+ 
| null!=null |
+------------+ 
|       NULL | 
+------------+ 
1 row in set (0.00 sec) 

mysql> select null is null; 
+--------------+ 
| null is null | 
+--------------+ 
|            1 | 
+--------------+ 
1 row in set (0.00 sec) 

mysql> select null is not null; 
+------------------+ 
| null is not null | 
+------------------+
|                0 |
+------------------+ 
1 row in set (0.00 sec)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值