1、数据类型
1.1:整型包括:tinyint、smallint、mediumint、int、bigint
整型.png1.2:浮点型:float、double 单精度和双精度
浮点型.png1.3:这个不太常用,一般使用数字类型替代时间戳
日期时间型.png1.4字符型:char varchar 这两个的区别
比如说写了char(5)---> 存的时候寸了“asd”,那么在数据库里边是5位,叫定长。
但是varchar(5)--->寸了“asd”,那么在数据库里边存储的就是“asd”,3位.
这个Enum是一个枚举类型,就是说存进来的必须是这里边的选项,单个的。
这个Set类型呢,也是存进来的必须的里边的选项,但是可以是单项也可以是多项。
2、约束
约束的作用:保证数据的完整性和一致性
2.1、约束类型
- 自增(AUTO_INCREMENT)
- 非空(NOT NULL)
- 无符号(UNSIGNED)
- 主键(PRIMARY KEY) 一张表只能有一个主键
- 唯一约束(UNIQUE) 一张表可以有多个唯一约束
- 默认约束(DEFAULT) : 如果没有赋值,就设置默认值
- 外键约束(FOREIGN KEY)
2.2、外键约束
保持数据的完整性和一致性,实现一对一或者一对多的关系
2.2.1、创建外键约束的要求
- 1、父表(参照的表,上述列子中的球队表)和字表(具有外键列的表,上述列子中的教练表)必须使用相同的存储引擎,禁止使用临时表;
- 2、数据表的存储引擎必须是InnoDB;
- 3、外键列(教练表中的teamId)和参照列(球队表中的teamId)必须具有相类似的数据类型。数字长度和有无符号位必须相同;字符长度可以不同;
- 4、外键列(教练表中的teamId)和参照列(球队表中的teamId)必须创建索引,如果外键列不存在索引,mysql会自动创建。参照列不会自动创建。
2.2.2、创建外键约束的参照操作
- 1、CASCADE :从父表删除或者更新 自动删除或更新子表中的匹配行;
- 2、SET NULL:从父表删除或者更新,设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL;
- 3、RESTRICT:拒绝对父表的删除或者更新操作;
- 4、NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
2.3、表级/列级约束
- 对于一个数据列建立的约束,叫做列级约束(经常用)
- 对于多个数据列建立的约束,叫做表级约束(很少用)
列级约束既可以在列定义时声明,也可以在列并以之后声明。表级约束只能在列定义之后声明。
3、操作数据表
3.1:创建数据库表
#创建球队表
CREATE TABLE team(
#球队编号 整型 无符号 自增 主键
teamId INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
#球队名称 字符串 不能为空 唯一
teamName varchar(20) NOT NULL UNIQUE,
#球队年龄 整型 无符号 可以为空
teamAge TINYINT UNSIGNED NULL ,
#总场次
toalMatch INT NOT NULL,
#胜场 整型 不能为空
victoryNumber INT NOT NULL ,
#冠军数量
championNumber INT NOt NULL,
#球馆名称
ballHall varchar(40)
);
#创建教练表
CREATE TABLE coach(
#教练ID 整型 无符号 自增 主键
coachId INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
#教练名称 字符串 不能为空 唯一
coachName VARCHAR(20) NOT NULL UNIQUE,
#总场次
toalMatch INT NOT NULL DEFAULT 0,
#胜场 整型 不能为空
victoryNumber INT NOT NULL DEFAULT 0,
#冠军数量
championNumber INT NOT NULL DEFAULT 0,
#球队ID
teamId INT UNSIGNED NOT NULL,
FOREIGN KEY(teamId) REFERENCES team (teamId) ON DELETE CASCADE
);
3.2对表结构的修改<一>操作列
#修改表名
ALTER TABLE team RENAME TO teamUpdate;
ALTER TABLE teamUpdate RENAME AS team;
RENAME TABLE team TO teamUpdate,coach TO coachUpdate;
RENAME TABLE teamUpdate TO team,coachUpdate TO coach;
#查看表结构
SHOW COLUMNS FROM team;
#添加列在最开始
ALTER TABLE team ADD testAdd VARCHAR(20) FIRST
#添加列在最后边
ALTER TABLE team ADD testAddLast VARCHAR(20)
#添加列在某一列后边
ALTER TABLE team ADD testAddCenter VARCHAR(20) AFTER teamName
#添加多列(这个不能设置插入的位置,只能插入到最后边)
ALTER TABLE team ADD testAddList1 VARCHAR(20),ADD testAddList2 VARCHAR(20),ADD testAddList3 VARCHAR(20)
#查看表结构
SHOW COLUMNS FROM team;
#删除列
ALTER TABLE team DROP testAdd
#批量删除列
ALTER TABLE team DROP testAddList1, DROP testAddList2, DROP testAddList3
#结合使用
ALTER TABLE team DROP testAddLast, ADD testAddNewLast VARCHAR(20)
#修改数据表
#把某个字段移动到最开始
ALTER TABLE team MODIFY testAddNewLast VARCHAR(20) FIRST
#查看表结构
SHOW COLUMNS FROM team;
#修改字段属性和位置(这里注意,由大类型修改成小类型的时候,可能会造成是数据的丢失)
ALTER TABLE team MODIFY testAddNewLast VARCHAR(10) DEFAULT "小米" FIRST
#查看表结构
SHOW COLUMNS FROM team;
#修改字段属性和位置 移动到哪个字段后边
ALTER TABLE team MODIFY testAddNewLast VARCHAR(20) DEFAULT "小米修改属性" AFTER teamName
#修改列名称
ALTER TABLE team CHANGE testAddNewLast testUpdateLast VARCHAR(20) DEFAULT "小米修改属性和字段名称" AFTER teamAge
#把team表恢复原状
ALTER TABLE team DROP testAddCenter, DROP testUpdateLast
3.3对表结构的修改<二>操作约束
#创建测试表
CREATE TABLE test(
#ID 整型
testId INT ,
#名称 字符串
testName VARCHAR(20) ,
);
#添加约束
#添加主键 CONSTRAINT关键字是给后边的属性添加名字的 可以省略该关键字 写成
#ALTER TABLE test ADD PRIMARY KEY(testId)
ALTER TABLE test ADD CONSTRAINT PK_test_id PRIMARY KEY(testId)
#删除主键约束
ALTER TABLE test DROP PRIMARY KEY
#添加唯一约束
ALTER TABLE test ADD UNIQUE(testName)
#删除唯一约束
#先查询出来 testName字段的唯一约束的名字 查询出来,可以看到key_name是testName
SHOW INDEXES FROM test
#然后用testName 去删除这个唯一约束
ALTER TABLE test DROP KEY testName
#然后用testName 去删除这个唯一约束
ALTER TABLE test DROP INDEX testName
#添加球队ID
ALTER TABLE test ADD teamId INT UNSIGNED NOT NULL
#添加外键约束
ALTER TABLE test ADD FOREIGN KEY(teamId) REFERENCES team (teamId) ON DELETE CASCADE
SHOW COLUMNS FROM test
#删除外键约束要加上外键约束的名称
#先查询出来外键约束的名称
SHOW CREATE TABLE test
#查询出来的结果是 test_ibfk_1
CREATE TABLE `test` (
`testId` INT(11) NOT NULL DEFAULT '0',
`testName` VARCHAR(20),
`teamId` INT(10) UNSIGNED NOT NULL,
KEY `teamId` (`teamId`),
CONSTRAINT `test_ibfk_1` FOREIGN KEY (`teamId`) REFERENCES `team` (`teamId`) ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=utf8
#然后用 test_ibfk_1去删除外键
ALTER TABLE test DROP FOREIGN KEY test_ibfk_1
#添加默认约束
ALTER TABLE test ALTER testName SET DEFAULT "小米"
#删除默认约束
ALTER TABLE test ALTER testName DROP DEFAULT
SHOW COLUMNS FROM test;
网友评论