MySQL数据管理(一)

发布时间:2024年01月07日

注:本文出现的代码片段源于文章末尾的总代码

一、创建数据表

CREATE TABLE IF NOT EXISTS STUDENT() DEFAULT CHARSET=utf8mb4 COMMENT '学生表';

二、列类型

  • 列类型:规定数据库中该列存放的数据类型

列类型分为:

  • 数值类型
  • 字符串类型
  • 日期和时间型数值类型

1.数值类型

STUDENTNO INT(4) UNSIGNED NOT NULL COMMENT '学号',

?类型

说明

取值范围

存储需求

TINYINT[(M)]

非常小的数据

有符值: -27 ~ 27-1?

无符号值:0 ~ 28-1???????????????????????????????

1字节

SMALLINT[(M)]

较小的数据

有符值:? -215 ~ 215-1?

无符号值:? 0 ~ 216-1??????

2字节

MEDIUMINT[(M)]

中等大小的数据

有符值:? -223 ~ 223-1?

无符号值:? 0 ~ 224-1??????

3字节

INT[(M)]

标准整数

有符值: -231 ~ 231-1?

无符号值:0 ~ 232-1??????

4字节

BIGINT[(M)]

较大的整数

有符值: -263 ~263-1

无符号值:0 ~264-1??????

8字节

FLOAT[(M)]

单精度浮点数

±1.1754351e -38

4字节

DOUBLE[(M)]

双精度浮点数

±2.2250738585072014e -308

8字节

DECIMAL

字符串形式的浮点数

decimal(m, d)

m个字节

?2.字符串类型

?类型

说明

最大长度

CHAR[(M)]

固定长字符串,检索快但费空间, 0 <=? M? <=?? 255

M个字符

VARCHAR[(M)]

可变字符串?? 0 <=? M <= 65535

可变长度

TINYTEXT

微型文本串

0-255个字符

TEXT

文本串

0-65535个字符

3.日期和时间类型

?类型

说明

取值范围

DATE

YYYY-MM-DD,日期格式

1000-01-01~ 9999-12-31

TIME

Hh:mm:ss ,时间格式

-838:59:59~838:59:59

DATETIME

YY-MM-DD hh:mm:ss

1000-01-01 00:00:00?

9999-12-31 23:59:59

TIMESTAMP

YYYYMMDDhhmmss格式表示的时间戳

197010101000000 ~2038年的某个时刻

YEAR

YYYY格式的年份值

1901~2155

MySQL允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符,如”16-06-16” ”16.06.16” ”16/06/16”都可以写入数据表

三、字段属性

STUDENTNO INT(4) UNSIGNED NOT NULL COMMENT '学号',

?字段属性

说明

UNSIGNED

无符号的,声明该数据列不允许负数。

ZEROFILL

1. 0 填充的,不足位数的用 0 来填充,如 int(3),5 则为 005
2. 使用 zerofill 会默认加 unsigned

AUTO_INCREMENT

1. 自动增长的,每添加一条数据,自动在上一个记录数上加 1
2. 通常用于设置主键,且为整数类型;
3. 可定义起始值和步长

NULL NOT NULL

1. 默认为 NULL, 即没有插入该列的数值;
2. 如果设置为 NOT NULL ,则该列必须有值;

DEFAULT

1. 默认的,用于设置默认值;
2. 例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为“男”的值

四、字段注释

STUDENTNO INT(4) UNSIGNED NOT NULL COMMENT '学号',

创建表之后,如果需要查看一下该表是否存在,可以使用查看表的SQL命令

SHOW TABLES;

创建表之后,如果需要查看一下该表的定义,可以使用如下的SQL命令

DESCRIBE? 表名或DESC 表名

五、删除表

六、表类型

  • MySQL属于关系型数据库管理系统,其他包括数据库以及用于数据库访问管理的接口系统。数据库负责存储数据,接口系统负责管理数据库
  • 由于不同用户对数据的容量、访问速度、数据安全性有不同的要求,为了满足不同用户的业务需求,MySQL数据库采用多种存储引擎进行数据存储
  • 表的存储引擎也称为表类型
  • MySQL5.5支持的存储引擎有MyISAMInnoDB HEAPBOBCSV

1.常用的存储引擎:MyISAM 和 InnoDB

MySQL5.5以上版本默认的存储引擎是InnoDB

MyISAM 和 InnoDB的区别:

名称

MyISAM

InnoDB

事务处理

不支持

支持

数据行锁定

不支持

支持

外键约束

不支持

支持

全文索引

支持

不支持

表空间大小

较小

较大,2

适用场合:

? ? 使用 MyISAM :?? 节约空间及相应速度,适合以访问为主的应用。
? ? 使用 InnoDB :???? 安全性,事务处理及多用户操作数据表。

七、修改表

  • 修改表名

?ALTER TABLE 旧表名? RENAME AS? 新表名

#把result表改名为studentresult
ALTER TABLE RESULT RENAME AS STUDENTRESULT;
ALTER TABLE STUDENTRESULT RENAME AS RESULT;

  • 添加字段

?ALTER TABLE 表名?? ADD 字段名?? 列类型 [ 属性 ]

#给result表添加一个id字段
ALTER TABLE RESULT ADD ID INT(4) UNSIGNED NOT NULL COMMENT'成绩编号';

  • 修改字段

?ALTER TABLE 表名?? MODIFY 字段名?? 列类型 [ 属性 ]? #修改列的数据类型

#修改result表中的id字段,改为字符串类型,允许有符号,允许为空,注释改为成绩编码
ALTER TABLE RESULT MODIFY ID VARCHAR(16) COMMENT '成绩编码';

?ALTER TABLE 表名? CHANGE 旧字段名 新字段名? 列类型 [ 属性 ]#修改列的数据类型及名称

#修改result表中的ID字段,ID名称改为rid,类型为int(4),零填充,默认值1
ALTER TABLE RESULT CHANGE ID RID INT(4) ZEROFILL DEFAULT 1;

  • 删除字段

?ALTER TABLE 表名?? DROP? 字段名

#删除result表中的id字段
ALTER TABLE RESULT DROP RID;

八、数据完整性

  • 数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题
  • 它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的
  • 数据完整性主要分为三类:实体完整性、域完整性、引用完整性

  1. 实体完整性:保证表中所有的的唯一
  2. 域完整性:指数据库中的必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定
  3. 引用完整性:指保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。它设计两个或两个以上表数据的一致性维护

1.使用约束实现数据完整性

数据库采用约束、规则、触发器等来保证数据完整性

?约束类型

关键字

说明

非空约束

NOT NULL

如果字段不允许为空,则需要设置NOT NULL约束。

默认约束

DEFAULT

赋予某字段默认值,如果该字段没有赋值,则其值为默认值。

唯一约束

UNIQUE KEY

设置该字段的值唯一的,允许为空。

主键约束

PRIMARY KEY

设置该字段为表的主键,可以作为该表记录的唯一标识,不能为空。

外键约束

FOREIGN KEY

用于在两表之间建立关系,需要引用主表的哪一字段。

2.在数据表上添加约束

ALTER TABLE 表名? ADD CONSTRAINT 约束名? 约束关键字? 具体的约束说明

#给学生表的联系电话字段设置为唯一约束
ALTER TABLE STUDENT ADD CONSTRAINT UQ_PHONE UNIQUE(PHONE);

3.设置唯一约束

该字段的值是唯一的

ALTER TABLE 表名? ADD CONSTRAINT 约束名? UNIQUE(列名)

#给学生表的联系电话字段设置为唯一约束
ALTER TABLE STUDENT ADD CONSTRAINT UQ_PHONE UNIQUE(PHONE);

九、主键

1.主键选择规则

  1. 最少性是指列数最少的键,从单个主键和复合主键中优先选择单个主键,如果两个整数类型的列的组合比一个很大的字符类型的列操作要快,选符合主键
  2. 稳定性是指列中数据的特征。主键通常用来在两个表之间建立联系,所以主键的数据不能经常更新,理想情况下应该永远不变

注:如果两列或多列组合起来唯一地标识表中的每个行,则该主键叫做“复合主键”

2.设置主键约束

如果一个字段即要求唯一又不能为null,可使用主键约束

ALTER TABLE 表名? ADD CONSTRAINT 约束名? PRIMARY KEY(列名1,列名2,…列名n)

ALTER TABLE student? ADD CONSTRAINT pk_studentno? PRIMARY KEY (studentno)

3.删除约束

#15.删除主键索引,不需要指定名称,因为一个表中只能有一个主键
ALTER TABLE `SUBJECT` DROP PRIMARY KEY;

#16.删除唯一索引,必须指定唯一索引的名称,因为一个表中可以有多个字段的唯一索引
ALTER TABLE `STUDENT` DROP KEY UQ_STUDENTNAME;

CREATE DATABASE IF NOT EXISTS MYSCHOOL;
USE MYSCHOOL;
SHOW TABLES;

#1.创建学生表
CREATE TABLE IF NOT EXISTS STUDENT(
	STUDENTNO INT(4) UNSIGNED NOT NULL COMMENT '学号',
	LOGINPWD VARCHAR(20) NOT NULL COMMENT '密码',
	STUDENTNAME VARCHAR(50) NOT NULL COMMENT '学生姓名',
	SEX CHAR(1) NOT NULL DEFAULT '男' COMMENT '性别',
	GRADEID INT(4) UNSIGNED COMMENT '年级编号',
	PHONE VARCHAR(50) COMMENT '联系电话',
	ADDRESS VARCHAR(255) DEFAULT '地址不详' COMMENT '家庭住址',
	BORNDATE DATETIME COMMENT '出生年月',
	EMAIL VARCHAR(50) COMMENT '邮箱账号',
	IDENTITYCARD VARCHAR(18) COMMENT '身份证号'
)DEFAULT CHARSET=utf8mb4 COMMENT '学生表';

#2.创建年级表
CREATE TABLE IF NOT EXISTS GRADE(
	GRADEID INT(4) UNSIGNED NOT NULL COMMENT '年级编号',
	GRADENAME VARCHAR(50) NOT NULL COMMENT '年级名称'
) DEFAULT CHARSET=UTF8MB4 COMMENT '年级表';

#3.创建课程表
CREATE TABLE IF NOT EXISTS `SUBJECT`(
	SUBJECTNO INT(4) UNSIGNED NOT NULL COMMENT '课程编号',
	SUBJECTNAME VARCHAR(50) NOT NULL COMMENT '课程名称',
	CLASSHOUR INT(4) UNSIGNED COMMENT '学时',
	GRADEID INT(4) UNSIGNED COMMENT '年级编号'
) DEFAULT CHARSET=UTF8MB4 COMMENT '课程表';

#4.创建成绩表
CREATE TABLE IF NOT EXISTS `RESULT`(
	STUDENTNO INT(4) UNSIGNED NOT NULL COMMENT '学号',
	SUBJECTNO INT(4) UNSIGNED NOT NULL COMMENT '课程编号',
	EXAMDATE DATETIME NOT NULL DEFAULT NOW() COMMENT '考试日期',
	STUDENTRESULT INT(4) UNSIGNED NOT NULL COMMENT '考试成绩'
) DEFAULT CHARSET=UTF8MB4 COMMENT '成绩表';

#5.创建课程表,设置表类型为MyIsam
CREATE TABLE IF NOT EXISTS `SUBJECT`(
	SUBJECTNO INT(4) UNSIGNED NOT NULL COMMENT '课程编号',
	SUBJECTNAME VARCHAR(50) NOT NULL COMMENT '课程名称',
	CLASSHOUR INT(4) UNSIGNED COMMENT '学时',
	GRADEID INT(4) UNSIGNED COMMENT '年级编号'
)ENGINE=myisam DEFAULT CHARSET=UTF8MB4 COMMENT '课程表';

#6.删除课程表
DROP TABLE IF EXISTS `SUBJECT`;

#7.把result表改名为studentresult
ALTER TABLE RESULT RENAME AS STUDENTRESULT;
ALTER TABLE STUDENTRESULT RENAME AS RESULT;

#8.给result表添加一个id字段 
ALTER TABLE RESULT ADD ID INT(4) UNSIGNED NOT NULL COMMENT'成绩编号';

#9.修改result表中的id字段,改为字符串类型,允许有符号,允许为空,注释改为成绩编码
ALTER TABLE RESULT MODIFY ID VARCHAR(16) COMMENT '成绩编码';

#10.修改result表中的ID字段,ID名称改为rid,类型为int(4),零填充,默认值1
ALTER TABLE RESULT CHANGE ID RID INT(4) ZEROFILL DEFAULT 1;

#11.删除result表中的id字段
ALTER TABLE RESULT DROP RID;

# 12.给学生表的联系电话字段设置为唯一约束
ALTER TABLE STUDENT ADD CONSTRAINT UQ_PHONE UNIQUE(PHONE);
ALTER TABLE STUDENT ADD CONSTRAINT UQ_STUDENTNAME UNIQUE(STUDENTNAME);

#13.给学生表设置主键,主键列为studentno
ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENTNO PRIMARY KEY(STUDENTNO);

#14.设置组合主键案例:设置课程表中的课程编号和年级编号为组合主键
ALTER TABLE `SUBJECT` ADD CONSTRAINT PK_SUBJECTNO_GRADEID PRIMARY KEY(SUBJECTNO,GRADEID);

#15.删除主键索引,不需要指定名称,因为一个表中只能有一个主键
ALTER TABLE `SUBJECT` DROP PRIMARY KEY;

#16.删除唯一索引,必须指定唯一索引的名称,因为一个表中可以有多个字段的唯一索引
ALTER TABLE `STUDENT` DROP KEY UQ_STUDENTNAME;
文章来源:https://blog.csdn.net/wisbhxnhsj/article/details/135360143
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。