MySQL系列——2020.7.21——更新至“唯一约束”

一天学会My SQL

1 基本操作

1.1 登录与退出数据库

打开 cmd 输入命令

mysql -uroot -p123456

退出 以下三种命令

\q
quit
exit

1.2 三种命令状态

-> 当前命令为等待确认状态
'> 输入的命令缺少单引号
"> 输入的命令缺少双引号

1.3 查询数据库命令

show databases;

2 表的操作

2.1 基本概念

  • 记录 元组 就是一行
  • 字段 一列就是一个字段
    • 每个字段是一个属性
    • 每个字段都有相应的描述信息:字段名/数据类型/数据宽度/数值型数据的小数位

2.2 创建表的语句

创建表的过程就是创建表名和字段的过程

Creat table 表名(

	属性名 数据类型 [约束条件],

	属性名 数据类型 [约束条件],

	属性名 数据类型 [约束条件]

)
  • 约束条件可选
  • 最后一个属性没有逗号
2.2.1 【实例】创建第一张表 student

务必要在某库下创建,否则报错1406

  • 要求字段:姓名、学号、性别、年龄

2.3 查询表

SELECT * FROM student;

3 MySQL数据类型

3.1 数值型

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 byte (-128,127) (0,255) 小整数值
SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值
DOUBLE 8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度 浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

3.2 时间、日期

类型 大小 ( bytes) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

3.3 字符串

类型 大小 用途
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

用法:


4 数据完整性

数据完整性是指存储在数据库中的数据应该保持准确性和可靠性。如果出现学号相同的数据是不准确的。

完整性 实施对象
实体完整性 关系中的记录唯一性、定义表中所有行能唯一的标识、主属性不能为NULL且不能有相同值、一般用主键、唯一索引、unique关键字实现
域完整性
参照完整性
自定义完整性 /////

4.1 实体完整性

4.1.1 主键约束(非NULL)

主关键字(primary key)就是主键,它是表中的一个或多个字段,它是值用于唯一表示某条记录

创建表时指定主键

案例:

创建student表,主键为学号

  • 手动方式:

    • 在navicat的设计表中,右击目标字段,点击主键
  • 代码方式

    • 案例如下

    • CREATE TABLE student
      (
      	id INT(10) PRIMARY KEY, //这里的primary key后缀就是指定该字段为主键
      	sname VARCHAR(5)
      );
      
4.1.1 修改主键约束

通过ALTER语句可以实现对表的主键约束修改

4.1.1.1 增

方式一 ADD

ALTER TABLE t_user ADD	PRIMARY KEY(user_id);

方式二 ADD CONSTRAINT PK_ID

ALTER TABLE t_user
ADD CONSTRAINT PK_ID PRIMARY KEY(user_id);

方式三 MODIFY

ALTER TABLE t_user MODIFY user_id INT(10) PRIMARY_KEY
4.1.1.2 删

DROP关键字

ALTER TABLE t_user DROP PRIMARY KEY;

4.1.2 唯一约束(可NULL)

用来限制不受主键约束,但是仍需要限制唯一性的字段,一个表可以有多个唯一约束

唯一约束的作用对象可以是单一字段,也可以是多个字段组合

唯一约束名称默认和字段名相同

MySQL会给唯一约束的字段默认创建唯一索引

4.1.2.1 创建唯一约束
4.1.2.1.1 自定义约束名

使用constarint关键字

4.1.2.1.2 组合唯一约束

unique(A,B)可对AB进行添加组合唯一约束

constarint uk_name_pwd unique(username,passwrod)

以上代码段是使用constarint关键字对username和password添加名为uk_name_pwd的组合唯一约束

4.1.2.1.3 创建唯一约束实例
  • 给teach的id添加非空约束

  • 给teach的username和password添加名为uk_name_pwd的组合唯一约束

  • 建表完成后给id添加主键约束

CREATE TABLE teach
(
	id INT NOT NULL,
	username VARCHAR(10),
	password VARCHAR(16),
	CONSTARINT uk_name_pwd UNIQUE(username,password)
);
ALTER TABLE teach ADD PRIMARY KEY(id);
4.1.2.1.4 添加唯一约束
alter table temp add unique(name,id);

or

alter table temp modify name varchar(25) unique;

4.1.2.1.4 删除约束
alter table temp drop index name;
posted @ 2020-07-21 21:50  封亚飞  阅读(235)  评论(0)    收藏  举报