DDL深入

在mysql中主表和从表建立了外键约束,则无法删除表,或者修改外键字段中的值。
存在外键约束的时候,怎么进行插入数据。
  如果是一对多的情况下,先建立主表的记录,然后在添加从表的记录,此时才能加入外键的值。

mysql中启动和关闭外键约束
  SET @@FOREIGN_KEY_CHECKS=0;

mysql的数据类型
数值类型
tinyint 1字节  ( -128,127)
smallint  2字节  (-32768,32767)
mediumint 3字节 (-8388608,8388607)
int/integer  4字节 (-2143483648,2147483647) 
bigint  8字节  (-9,223,372,036,854,775,808,9 223 372 036 854 775 807)
float  4字节  (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)
double 8字节  (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

decimal 用于数据库中存储精确的数值,用于保存准确精确度的列。
语法:
  column_name DECIMAL(P,D);
  P是表示有效数字数的精度。 P范围为1~65。
  D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。
字节大小:
  如果M>D,为M+2否则为D+2

对于精度比较高的字段,比如 money,使用decimal,不会考虑float,double,因为它们容易产生误差。
int(M):
  长度M 是告诉mysql,该字段存储的数据宽度是M位数。如果不是M位,(只要是在该类型的存储范围内)可以正常存储。
可以将这个字段的属相修改为UNSIGNED ZEROFILL

`uid` int(3) unsigned zerofill NOT NULL

然后往表中插入数据

insert into `test` (`uid`) VALUES(11);


  -->系统会自动将uid字段M 不够3位的在左侧用0来填充。

日期时间类型
DATE  3字节  1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME  3字节  '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
DATETIME 8字节 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

字符串类型
char  0-255字节  定长字符串
varchar 0-65536字节  边长字符串
tinyblob  0-255字节 不超过 255 个字符的二进制字符串
tinytext  0-255字节 短文本字符串
blob  0-65535字节 二进制形式的长文本数据
text  0-65535字节 长文本数据
mediumblob  0-16 777 215字节 二进制形式的中等长度文本数据
mediumtext  0-16 777 215字节 中等长度文本数据
longblob  0-4 294 967 295字节 二进制形式的极大文本数据
longtext  0-4 294 967 295字节 极大文本数据

char 与 varchar 的区别
char 的长度是不可变的,而varchar的长度是可变的。
定义一个char(10) ,如果存进去的是‘abcd’ ,那么char所占长度依然是10,除了 字符‘abcd’ 外,后面跟6个字符。而varchar 会将长度变为 4.取数据的时候,char类型会去掉多余的空格。
char的存取速度比varchar 块。
char的存储方式是,对引文字符(ASCII)占用1字节,对汉字占用 2字节(GBK)\3字节(UTF-8)。

mysql检查字节长度

select LENGTH(fieldname) from tablename


) ENGINE=InnoDB AUTO_INCREMENT=7935 DEFAULT CHARSET=utf8;
AUTO_INCREMENT=7935  -->表示自动递增的字段,初始值是 7935 。
查看该数据库的自增配置:

show variables like '%increment%';

 可以设置自增策略:

set @@auto_increment_offset =1;
set @@auto_increment_offset =1;  

或者在创建表的时候,指定增量的设置。

posted @ 2019-03-21 21:14  payn  阅读(148)  评论(0)    收藏  举报