常用数据类型
数值
类型 大小 范围(有符号) 范围(无符号) TINYINT 1 Bytes (-128,127) (0,255) SMALLINT 2 Bytes (-32 768,32 767) (0,65 535) MEDIUMINT 3 Bytes (-8 388 608,8 388 607) (0,16 777 215) INT或INTEGER 4 Bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) BIGINT 8 Bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) FLOAT 4 Bytes (-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) 0,(1.175 494 351 E-38,3.402 823 466 E+38) DOUBLE 8 Bytes (-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) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 日期
类型 大小 ( bytes) 范围 格式 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS YEAR 1 1901/2155 YYYY 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 bytes 定长字符串 VARCHAR 0-65535 bytes 变长字符串 TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串 TINYTEXT 0-255 bytes 短文本字符串 BLOB 0-65 535 bytes 二进制形式的长文本数据 TEXT 0-65 535 bytes 长文本数据 MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据 MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据 LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据 LONGTEXT 0-4 294 967 295 bytes 极大文本数据
show databases; -- 查看所有的数据库 create database dataName; -- 创建数据库dataName show tables; -- 查看数据库中所有的表 drop TABLE if EXISTS tableName; -- 当表存在时,删除表 -- 创建表 CREATE TABLE tableName( id int, other VARCHAR(20) NOT NULL ); describe tableName; 查看表结构 select * from tableName; 查询表数据 -- 插入语句 insert into tableName ('id' ,'other') values ('001','other'); -- 修改数据 update table tableName where id = ''; -- 删除数据 delete from table tableName where id = ''; -- 添加一列 ALTER TABLE tableName ADD icount INT; -- 删除一列 ALTER TABLE tableName DROP icount; -- 修改一列 ALTER TABLE tableName MODIFY other CHAR(10); -- 主键约束 CREATE TABLE tableName( id int PRIMARY KEY, other VARCHAR(20) NOT NULL ); -- 添加约束 alter table tableName add primary key (id); -- 删除约束 alter table tableName drop primary key; -- 联合主键id,name CREATE TABLE tableName( id int, name VARCHAR(20), other VARCHAR(20), primary key(id,name) ); -- 自增约束AUTO_INCREMENT -- NOT NULL 非空约束 CREATE TABLE tableName( id int PRIMARY KEY AUTO_INCREMENT, other VARCHAR(20) NOT NULL ); -- 外键约束 CREATE TABLE tableName( id int PRIMARY KEY, other VARCHAR(20) ); CREATE TABLE tableName1( id_foreign int, remark VARCHAR(20), foreign key (id_foreign) references tableName(id) );
第一范式1NF
数据表中的所有字段都是不可分割 原子值
范式设计的越详细,对于某些实际操作更合适
字段值还可以继续拆分的,就不满足第一范式
例如:
地址字段(中国河北省沧州市运河区南陈屯街道)
应该被拆分成:国家(中国)、省份(河北省)、市(沧州市),区县(运河区)、镇等...
第二范式2NF
在满足第一范式的前提下,第二范式要求:除主键外,每一列都必须依赖于主键
-- 若某列不依赖于主键,则应该拆表 create table student{ student_id char(10) primary key, student_name char(10), subject_id char(10), --课程 subject_name char(10), --学科 score int --分数 } -- 应该拆分成如下: -- 学生表 create table student{ student_id char(10) primary key, student_name char(10) } -- 课程表 create table subject{ subject_id char(10) primary key, subject_name char(10) } -- 成绩表 create table score{ student_id char(10), subject_id char(10), score int, --分数 }
第三范式3NF
在满足第二范式的前提下,除主键外,其它列之间不能有传递依赖关系
create table student{ student_id char(10) primary key, student_name char(10), cityid char (10), cityname char(10) } -- 因为cityname依赖于cityid,所以应该拆表 create table student{ student_id char(10) primary key, student_name char(10), cityid char (10) } create table city{ cityid char (10), cityname char(10) }