烟台网站建设工作,企业网站推广工具,wordpress中文相册插件下载,网站设计 济南一、MySQL的数据类型
1.MySQL的数据类型 2.常见的数据类型的属性 二、整数类型 三、浮点类型 REAL默认就是DOUBLE。如果你把SQL模式设定为启用“REAL_AS_FLOAT”,那么,MySQL就认为REAL是FLOAT。如果要启用“REAL_AS_FLOAT”,可以通过以下SQL语句实现: SET sql_mode REAL_AS_FLOAT; 四、约束
4.1 为什么需要约束 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的而约束就是为了保证数据的完整性 约束就是对表中字段的限制 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女” 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。 约束的分类 1.从约束字段的字段的个数分为 单列约束和多列约束 2.约束的作用范围分为 列级约束和表级约束 列级约束将此约束声明在对应字段的后面 表级约束在表中所有字段 约束的作用 NOT NULL 非空约束 UNIQUE 唯一性约束 PRIMARY KEY 主键约束 FOREIGN KEY 外键约束 CHECK 检查约束 DEFAULT 默认值约束 添加约束的场景 CREATE TABLE 时添加约束 ALTER TABLE 时添加约束 如何查看表中的约束
SELECT *
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name emp1; # 之前的属于固定查询这一句是进行匹配 4.2 非空约束 在创建表时添加约束
CREATE TABLE test1(
id INT NOT NULL,
name VARCHAR(255) NULL,
salary DECIMAL(10,2)
)在 ALTER TABLE时添加约束
ALTER TABLE test1
MODIFY name VARCHAR(255) NOT NULL; 删除非空约束 就相当于修改约束使其没有限制
ALTER TABLE test1
MODIFY name VARCHAR(255) NOT NULL; 4.3 唯一约束性 UNIQUE 约束列中的内容不能重复 在创建时添加约束
CREATE TABLE test2(
id INT UNIQUE, # 列级约束
name VARCHAR(255),
garden TINYINT,
# 表级约束
CONSTRAINT uk_test2_name UNIQUE(name) # 或unique(name)
) # 查看约束
SELECT *
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name test2; 补充 1表级约束NOT NULL 没有表级约束CONSTRAINT 意思是 约束 2在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同 3可以向声明unique的字段上添加NULL值而且可以多次添加 在 ALTER TABLE时添加约束
ALTER TABLE test2
ADD CONSTRAINT new UNIQUE(name) # 对约束条件进行约束并对约束进行命名
# ADD UNIQUE(name) 直接添加
# 或
/*
ALTER TABLE test2
MODIFY name VARCHAR(255) UNIQUE
*/SELECT *
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name test2; 复合的唯一性约束 对于复合的唯一性约束只要这两个不完全相同即可
CREATE TABLE USER(
id INT,
name VARCHAR(255),
password VARCHAR(255),
# 表级约束
UNIQUE(name,password)
)# 例:
INSERT INTO USER
VALUES(1,a,abc),
(2,b,abc) 删除唯一性 (1) 添加唯一性约束的列上也会自动创建唯一索引 (2) 删除唯一约束只能通过删除唯一索引的方式删除 (3) 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。 (4) 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中排在第一个的列名相同也可以自定义唯一约束名
4.4 主键约束 PRIMARY KEY 这就好使主键不能为空必须有值 在 CREATE TABLE 时添加约束
CREATE TABLE test3(
id INT PRIMARY KEY,
name VARCHAR(255),
salary DECIMAL(10,2),
email VARCHAR(255)
);
# 或
CREATE TABLE test5(
id INT,
name VARCHAR(255),
PRIMARY KEY(id)
);SELECT *
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name test5; 在 ALTER TABLE 时添加约束 此时只能是在这个表没有主键约束时才可以
ALTER TABLE test5
ADD PRIMARY KEY (id) 删除主键约束 因为一个表只有一个主键所以删除时不需要指定名称所以删除很好进行
ALTER TABLE test5
DROP PRIMARY KEY
五、自增变量的持久化 自增列 首先我们要引入自增列的概念就比如学号列如果你设置为了自增列那么每增加一个学生它就会自动向后顺延一个学号
CREATE TABLE test7(
id INT auto_increment PRIMARY KEY, # 创建一个自增列
name VARCHAR(255) UNIQUE
)
SELECT *FROM test7;
INSERT INTO test7(name)
VALUES(Tom),(Mike)
SELECT *FROM test7;
INSERT INTO test7
VALUES(NULL,people)
SELECT *FROM test7; 补充 1当我们没有指明字段就进行添加时含有auto_increment的列会自己进行自增 2当我们向含有auto_increment的字段添加0或null时也会自动进行自增 随后我们通过一个主表和从表来展现一下基本操作
外键约束
在create table 时添加
# 主表和从表父表和子表
先创建主表
CREATE TABLE deep(
id INT,
name VARCHAR(155)
);
创建从表
CREATE TABLE dee(
dee_id INT PRIMARY KEY auto_increment,
dee_name VARCHAR(155),
department_id INT,
# 表级约束
FOREIGN KEY(dee_id) REFERENCES deep(id)
);
# 需要注意的是主表中的id也需要有主键约束或唯一性约束才能与从表建立联系
ALTER TABLE deep
ADD PRIMARY KEY (id); 我们再来了解一下约束的等级 cascade方式在父表上更新删除记录同步更新删除子表的匹配记录 Set null模式父表上已经更新或删除记录时将子表上匹配记录的列的位置设为null no action方式如果子表中有匹配记录则不允许对主表进行更新删除操作 restrict方式如果子表中有匹配的记录则不允许对父表对应候选键进行更新删除操作 restrict方式同no action set default方式父表有变更时子表相应的设置成一个默认的值但是lnnodb不能识别 随后我们以ON UPDATE CASCADE ON DELETE SET NULL来进行一次演示
先创建主表
CREATE TABLE dept(
id INT PRIMARY KEY,
name VARCHAR(155)
);
创建从表
CREATE TABLE de(
de_id INT PRIMARY KEY auto_increment,
de_name VARCHAR(155),
department_id INT,
# 表级约束
FOREIGN KEY(department_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE SET NULL
# 把修改操作设置为级联修改等级把删除操作设置为set null等级
# 注意不能将不能为空的列作为修改对象
);INSERT INTO dept
VALUES(1001,教学部),
(1002,学习部),
(1003,公关部)INSERT INTO de
VALUES(1,张三,1001),
(2,李四,1001),
(3,王五,1003),
(4,尔玛,1002) dept de 我们先建立起主表与从表的联系然后对主表进行修改观察从表的变化
UPDATE dept
SET id 1004
WHERE id 1002
SELECT *
FROM de,dept
where de.department_id dept.id dept de 当我们修改主表时从表中与之关联的列也同步发生变化
DELETE FROM dept
WHERE id 1002 此时尔玛的department_id 为null 最后我们还需要注意删除外键约束因为在当初建立约束时就自动产生了约束索引 不过我们还需要注意由于在当初建表的时候没有为这个外键约束起一个名称所以 MySQL 为此自动生成了一个名称这个自动生成的名称不同于受到这个外键约束的列名。而删除外键的时候需要提供的是这个外键约束名而不是列名所以需要先查找出外键的名称然后才能将其删除 为了查看外键的名称我们需要用到 show create TABLE de并将其复制出来 CREATE TABLE de (de_id int NOT NULL AUTO_INCREMENT,de_name varchar(155) DEFAULT NULL,department_id int DEFAULT NULL,PRIMARY KEY (de_id),KEY department_id (department_id),CONSTRAINT de_ibfk_1 FOREIGN KEY (department_id) REFERENCES dept (id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci 我们可以看到外键的名称CONSTRAINT de_ibfk_1 FOREIGN KEY (department_id) REFERENCES dept (id) ON DELETE SET NULL ON UPDATE CASCADE 被命名为了 de_ibfk_1 因此我们删除时也要通过这个进行删除
# 删除外键约束
ALTER TABLE de
DROP FOREIGN KEY de_ibfk_1
# 检查删除的外键约束是否有对应的普通索引
SHOW INDEX FROM de # 通过这一步找到Column_name 中对应的我们所删除的字段名称
# 删除索引
ALTER TABLE de
DROP INDEX department_id # key name即外键的约束名 从而实现对外键及其索引的完整性删除
六、结语 永远相信自己一往无前风雨无阻
须知少日拏云志曾许人间第一流。我们还年轻我们还有无限可能