MySQL基础(一)数据类型及数据表操作

1、数据类型

1.1:整型包括:tinyint、smallint、mediumint、int、bigint

MySQL基础(一)数据类型及数据表操作_第1张图片
整型.png

1.2:浮点型:float、double 单精度和双精度

MySQL基础(一)数据类型及数据表操作_第2张图片
浮点型.png

1.3:这个不太常用,一般使用数字类型替代时间戳

MySQL基础(一)数据类型及数据表操作_第3张图片
日期时间型.png

1.4字符型:char varchar 这两个的区别

比如说写了char(5)---> 存的时候寸了“asd”,那么在数据库里边是5位,叫定长。
但是varchar(5)--->寸了“asd”,那么在数据库里边存储的就是“asd”,3位.

这个Enum是一个枚举类型,就是说存进来的必须是这里边的选项,单个的。
这个Set类型呢,也是存进来的必须的里边的选项,但是可以是单项也可以是多项。

MySQL基础(一)数据类型及数据表操作_第4张图片
字符型.png

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; 

点击下载本节sql文件
下一篇 MySQL基础—操作表记录

你可能感兴趣的:(MySQL基础(一)数据类型及数据表操作)