不同的数据库数据类型不完全一致
m:数字的位数
n:小数部分的位数
m包含n
DOUBLE(5,3):该数字总共5位,其中有3位小数(意味着整数位2位)。
最大个保存的数字为:99.999
当保存的数字精度超过可保存精度时,会进行4舍5入
例如person表中salary字段的类型:DOUBLE(7,4)
INSERT INTO person (salary) VALUES(553.12568)
实际salary保存的数字为:553.1257
n表示长度,单位是字符。
name CHAR(10):name可以保存10个字符
最大值为255个字符
表中该字段保存数据时,实际在磁盘中保存数据一定是指定长度的字符。当实际保存的字符不足时会补充空格来达到长度。
例如:name插入数据时为’张三’。那么实际存储时后面还有8个空格要占够10个字符。
优点:每条记录占用的字节长度是固定的,这对于数据库扫描磁盘查询数据时效率高。
缺点:浪费磁盘空间
n表示长度,单位时字节。
最大值为65535个字节
表中该字段保存数据时,实际在磁盘中保存数据用多少占多少字节。
例如:name VARCHAR(30)
插入数据时name为’张三’,实际存储时磁盘中仅6个字节。
优点:不浪费磁盘空间
缺点:查询速度慢
例
准备一张表测试各种类型
CREATE TABLE userinfo(
id INT,
username VARCHAR(30),
gender CHAR(1),
birth DATETIME,
salary DOUBLE(7,2)
)
INSERT INTO userinfo(id,username,gender,birth,salary)
VALUES (1,'张三','男','2001-02-03 12:22:55',5000.99)
插入日期时,如果类型为DATETIME,插入字符串中可以不指定时分秒
INSERT INTO userinfo(id,username,gender,birth,salary)
VALUES (2,'李四','女','1998-08-24',6000)
此时时分秒都为0
DATETIME类型插入数据时不能忽略年月日
INSERT INTO userinfo(id,username,gender,birth,salary)
VALUES (3,'王五','男','12:15:32',5000)
会报错,DATETIME字段不能只插入时分秒
插入DOUBLE值时精度超过部分会四舍五入,整数部分若超过长度则会报错
INSERT INTO userinfo(id,username,gender,birth,salary)
VALUES (3,'王五','男','1985-06-01 12:15:32',100000)
可以对表添加约束条件,这样一来仅当满足约束条件的操作才可以进行。这样做可以更好的为我们的业务服务,保证数据库的操作是服务业务要求的。
例
CREATE TABLE user1(
id INT PRIMARY KEY,
name VARCHAR(30),
age INT(3)
);
INSERT INTO user1(id,name,age) VALUES (1,'张三',22)
INSERT INTO user1(id,name,age) VALUES (2,'李四',33)
具体主键约束的字段通常会配合自增(AUTO_INCREMENT)使用 —id自增
将字段定义为主键约束时,同时指定:AUTO_INCREMENT
CREATE TABLE user2(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT(3)
);
也可以修改现有的表字段
ALTER TABLE user1 CHANGE id id INT PRIMARY KEY AUTO_INCREMENT
当主键字段具有自增功能时,插入数据则可以忽略主键字段的插入
INSERT INTO user2 (name,age) VALUES('张三',22)
INSERT INTO user2 (name,age) VALUES('李四',33)
INSERT INTO user2 (id,name,age) VALUES(NULL,'王五',36)
例
CREATE TABLE user3(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
age INT(3)
)
非空约束在查看表结构时有所体现
DESC user3
不能将NULL值插入具有非空约束的字段中
INSERT INTO user3 (name,age) VALUES(NULL,22)
插入数据时不能忽略具有非空约束的字段(字段默认插入NULL)
INSERT INTO user3(age) VALUES(33)