14天阅读挑战赛
努力是为了不平庸~
目录
数据库中的数据类型
不同的数据库管理系统,数据类型不完全一致
数字类型
整数类型:INT(m)和BIGINT(m)
m表示数字的长度(位数)
INT(5): 该字段保存一个5位整数,此时该字段存的数字为18,实际存储:00018
浮点类型:DOUBLE(m,n)
m表示整体数字的位数
n表示小数的位数
DOUBLE(5,3):该字段可以保存一个5位数,其中3位数是小数。最大可以保存到:99.999
实际上插入数据时如果精度超过了可保存的范围时,会自动进行四舍五入;
xxx表有一个DOUBLE(5,3)的字段
INSERT INTO XXX VALUES(12.3556)
此时该字段实际保存的值为:12.356
字符类型
CHAR(n):定长字符串
n:长度,单位是字符。CHAR(10),该字段可以存放最多10个字符
最大长度:255个字符
表中每条记录该字段在磁盘上占据的空间是固定的,如果实际保存的字符不足指定的长度时,会在后面补充若干个空格来达到长度。
name CHAR(10)
INSERT INTO person(name) VALUES('张三'); 实际该记录中name的值,张三后面还有8个空格
优点:由于长度固定,因此查询速度快
缺点:磁盘占用存在浪费情况
VARCHAR(n):变长字符串
n:长度,单位是字节。VARCHAR(10),该字段保存的字符转换的字节最多10个。
最大长度为:65535个字节
优点:实际字段值占用多少字节就在磁盘上开辟多少字节。
缺点:长度不固定,因此查询性能慢
TEXT(n):可变长字符
n:长度,单位是字符。最大值65535
日期类型
DATE 可以保存年月日
TIME 保存时分秒
DATETIME 保存年月日时分秒
TIMESTAMP 时间截,记录UTC时间,从1970-01-01 00:00:00到其表示的时间之间经过的毫秒
CREATE TABLE userinfo(
id INT,
name VARCHAR(30),
birth DATETIME,
salary DOUBLE(7,2)
)
插入日期时。可以使用字符串格式,格式应当为:'yyyy-MM-dd hh:mm:ss'
MM表示两个数字的月,mm表示两位数字的分
INSERT INTO userinfo VALUES(1,'张三','1998-05-02 22:32:22',5000.56);
如果日期类型使用的是DATETIME,那么在不指定时分秒时,默认为00:00:00
INSERT INTO userinfo VALUES(2, '李四','1989-26-22',9000);
DATETIME不能忽略年月日
INSERT INTO userinfo VALUES(3, '李四','13:12:22',9000); 报错
插入DOUBLE类型数字时,超过精度部分则会四舍五入
INSERT INTO userinfo VALUES(3,'张三','1998-05-02 22:32:22',5000.5655);
整数部分超过会报错
INSERT INTO userinfo VALUES(3,'张三','1998-05-02 22:32:22',50000000); --报错
约束
约束就是为了表中某个字段添加一些限制条件,只有符合条件时才可以对表中记录进行操作
主键约束,外键约束,唯一性约束,非空约束
主键约束
什么是主键约束(PRIMARY KEY)
该字段的值仅表达该表中唯一的一条记录
一张表只能有一个字段添加主键约束,该约束要求该字段:非空且唯一
非空约束(NOT NULL)
添加了非空约束的字段:每条记录该字段的值都不能为NULL
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(30)NOT NULL,
age INT(3));
使用DESC查看student表结构时可以体现出主键以及非空约束
DESC student;
不能将NULL值插入到主键或者具有非空约束的字段上
当不指定id时,数据库会将NULL默认插入到ID字段,这违背主键约束:
INSERT INTO student(name,age)VALUES('张三',22);
不能将NULL值显示的插入到具有非空约束的name字段上;
INSERT INTO student VALUES(1,NULL,22);
不能将重复的值插入到主键字段中
INSERT INTO student(name,age)VALUES(1,'张三',22);
不能再将1作为主键的值插入另一条记录。主键字段的值不可重复
INSERT INTO student(name,age)VALUES(1,'李四',22);
主键的值可以由数据库自行维护
ALTER TABLE student CHANGE id id INT AUTO_INCREMENT;
ALTER TABLE student(name,age)VALUES('李四',22);
当主键字段具有自增效果时,我们可以忽略主键值的插入
ALTER TABLE student(name,age)VALUES('李四',22);
当主键字段具有自增效果时,我们可以显示的向ID字段插入NULL值.此时主键仍然自增(不推荐操作)
此时并不会将NULL值作为主键字段的值,而是使用自增的主键值
ALTER TABLE student(name,age)VALUES(NULL,'李四',22);
DQL语言:数据查询语言
DQL用于检索表中数据的语言。
基本语法
SELECT 子句
FROM 子句
JOIN...ON... 子句
WHERE 子句
GROUP BY 子句
HAVING 子句
ORDER BY 子句
一条DQL语句必须包含的两个子句分别为:SELECT子句和FROM子句
- SELECT 子句用于选定表中的字段,选定的字段会被包含在查询的结果集中
- FROM 子句用于指定查询的表
查看student表中所有记录,每条记录所有字段都要展示在结果中。
SELECT * FROM student;
*在SELECT子句中表达的意思是查看表中所有字段
SELECT子句中可以仅指定个别字段进行查询
查看每个学生的名字,年龄
SELECT name,age FROM student;
WHERE子句
WHERE子句可以添加过滤条件,那么此时仅查询出满足该子句过滤条件的记录
比较运算符:=,>,>=,<,<=,<>
查看所有大队长
SELECT name,job FROM student WHERE job=‘大队长’;
查看处理李四以外的其他老师的名字和年龄;
SELECT name,age FROM teacher WHERE name<>'李四‘;
在WHERE子句中可以使用OR,AND来连接多个过滤条件
- AND:与。都为真时才为真
- OR:或。都为假时才为假
查看学生中7岁的大队长都有谁?
SELECT name ,age ,job FROM student WHERE age =7 AND job=‘大队长’;