首页 > 数据库 >Mysql约束

Mysql约束

时间:2023-04-13 17:34:50浏览次数:29  
标签:VARCHAR -- 32 INTO 约束 Mysql id 主键

MYSQL约束

主键


-- 主键的使用
 CREATE TABLE t18 (
  id INT PRIMARY KEY,-- 表示id列是主键
  `name` VARCHAR (32),
  email VARCHAR (32)
);

INSERT INTO t18 VALUES(1,'jack','www.com.cn')
-- id不能重复,将会报错

INSERT INTO t18 VALUES(1,'tom','wwww.ccdhdh')-- Duplicate entry '1' for key 't18.PRIMARY'


-- 主键使用细节讨论
-- 1.primary key 不能重复而且不能为Null

-- 2.一张表最多只能有一个主键,但可以是复合主键

-- 2.1 只能有一个主键
CREATE TABLE t19 (
  id INT PRIMARY KEY,-- 表示id列是主键
  `name` VARCHAR (32) PRIMARY KEY,
  email VARCHAR (32)
);

-- 2.2 演示复合主键
-- 2个字段不能同时相同

CREATE TABLE t20 (
  id INT ,-- 表示id列是主键
  `name` VARCHAR (32),
  email VARCHAR (32),
  PRIMARY KEY (id,`name`)
);
INSERT INTO t20 VALUES(1,'tom','www.com');

INSERT INTO t20 VALUES(1,'jack','www.com');-- 此时也可以添加成功
INSERT INTO t20 VALUES(1,'jack','hhh.com');-- 此时和主键字段都相同,将不能添加成功

-- 3.主键的指定方式有2种
-- 3.1.直接在字段名后指定:字段名 primary key 
-- 如: `name` varchar(32) primary key 

-- 3.2在表的定义最后写primary key(列名)


CREATE TABLE t20 (
  id INT ,-- 表示id列是主键
  `name` VARCHAR (32),
  email VARCHAR (32),
  PRIMARY KEY (id,`name`)-- 单主键也一个即可
);

-- 4.使用desc 表名,可以看到primary key 情况



复合主键不是就是2个主键,而是2个列组合成一个主键


在实际开发中每个表往往都有一个主键

unique

-- unique的使用
CREATE TABLE t21 (
  id INT UNIQUE,-- 表示id这一列不能重复
  `name` VARCHAR (32),
  email VARCHAR (32)
);

-- 演示功能

INSERT INTO t21 VALUES(1,'java','www.com.c');
INSERT INTO t21 VALUES(1,'python','www.edd');-- 此时将会提示错误

-- unique的使用细节

-- 1.如果没有指定 not null,则unique字段可以有	多个null
-- 因为它认为null是一个具体的值,可以放置多个null
INSERT INTO t21 VALUES(NULL,'tom','www.com.c');-- 成功

INSERT INTO t21 VALUES(NULL,'hheheh','www.com.c')-- 成功
-- 2.一张表可以有多个unique字段





外键


**


reference 参考

  • 主表数据
-- 外键
-- 1.创建主表
CREATE TABLE my_class(
	id INT PRIMARY KEY,-- 班级编号
	`name` VARCHAR(32) NOT NULL DEFAULT'');
-- 2.创建从表
CREATE TABLE my_stu
(	id INT PRIMARY KEY ,-- 学生编号
	`name` VARCHAR(32) NOT NULL DEFAULT '',
	class_id INT ,-- 这就是外键
	-- 下面是外键关系
	FOREIGN KEY (class_id) REFERENCES my_class(id)	
	
-- 3.主表添加数据
INSERT INTO my_class 
VALUES(100,'java'),(200,'web');



-- 4.从表添加数据

INSERT INTO my_stu
VALUES(1,'tom',100);-- 将会成功


INSERT INTO my_stu
VALUES(2,'jack',200);-- 将会成功

-- 下面的将会插入失败,因为主表中关联的没有300
INSERT INTO my_stu
VALUES(3,'hsp',300);-- 将会失败





innodb是指的是储存引擎
外键约束细节


-- 细节:一但建立了主外键关系,数据就不能随意删除了
-- 这个能不能删除,取决于所删除的记录是否已经进行了外键连接

-- 已经和从表中取得联系(所以该条记录不能删除)
DELETE FROM my_class
WHERE id=100;

-- 但是从表可以随意删除
DELETE FROM my_stu
WHERE class_id=100;


**对外键约束的理解:外键约束是主表和从表的相应的字段之间的约束,如果主表的相应的记录和从表的对应记录产生约束,则主表的相应的记录则不能随意的删除,直到从表的相应的记录删除,主表相应的记录才能够删除。而对从表的删除则没有影响。总而言之,外键约束就是是主表的约束
**

check约束

-- 演示check的使用
-- mysql 15.7目前还不支持check,只做语法校验,但不会生效

CREATE TABLE t23(
id INT PRIMARY KEY ,
`name` VARCHAR(32),
sex  VARCHAR(6) CHECK(sex IN('man','woman')),
sal DOUBLE CHECK(sal>1000 AND sal<2000));

-- 添加数据
-- mid不在约束中,将会报错
INSERT INTO t23
VALUES(1,'jack','mid',1003)
-- 在约束中,将会添加成功
INSERT INTO t23
VALUES(2,'tom','man',1003)

SELECT * FROM t23

标签:VARCHAR,--,32,INTO,约束,Mysql,id,主键
From: https://www.cnblogs.com/swtaa/p/17315729.html

相关文章

  • mysql多表查询
    查询加强查询到的表的结构--查询加强--使用where语句--1.如果查找1991.1.1后入职的员工--注意:mysql,日期类型可以直接比较,需要注意和表中的格式一致SELECT*FROMempWHEREhiredate>'1991.1.1';--2.使用like操作符(模糊)--%:表示0到多个任意字符_:表示单个任......
  • MySQL面试题-2023
                          参考链接:https://blog.csdn.net/weixin_41622043/article/details/103426652https://xiaolincoding.com/mysql/base/how_select.html ......
  • 分布式电源优化配置 二阶锥 考虑配电网二阶锥模型,运行主体包括光伏、微燃机以及负荷,创
    分布式电源优化配置二阶锥编程方法:采用matlab+yalmip编程,cplex或gurobi作为求解器。主要内容:考虑配电网二阶锥模型,运行主体包括光伏、微燃机以及负荷,创新性考虑敏感负荷及加权电压支撑能力指标,约束条件考虑潮流约束、电压电流约束、分布式电源容量约束、微燃机出力约束和光伏功......
  • mysql创建百万条虚假数据进行学习
    1.创建基础表CREATETABLE`app_user`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`name`varchar(50)DEFAULT''COMMENT'用户昵称',`email`varchar(50)NOTNULLCOMMENT'用户邮箱',`phone`varchar(20)DEFAULT'......
  • mysql,dorics数据库查询不同类型数据前10条信息
    selectt1.id,t1.namefrom(selectt.id,t.name,row_number()over(partitionbyt.idorderbyt.date)rnfromAt)t1wheret1.rn<=10;结果如下:  ......
  • Docker MySql8 创建、删除、授权用户
    1、登录MySql8#登录数据库dockerexec-itmysql8mysql-uroot-proot123456#切换数据库实例usemysql;2、用户操作2.1、查看用户selecthost,user,authentication_string,pluginfromuser;2.2、创建本地用户#创建一个用户名为admin,密码为admin123456的......
  • Linux安装MySQL
    1、下载MySQLMySQL官网:https://downloads.mysql.com/archives/community/。下载Linux版本的MySQL安装包,这里我选择的是64位、8.0.31版本,下载的压缩包名称:mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz。  2、Linux安装MySQL1、将下载的压缩包,上传到Linux的指定目录并解压......
  • MySQL的锁机制
    锁概述锁是计算机协调多个进程或线程并发访问某一资源的机制。并发控制技术在数据库中,数据可以允许多个用户同时访问,因此在并发场景下需要确保数据的一致性,并发场景有三种:读-读:多用户并发读不会有问题读-写:可能出现脏读、幻读、不可重复读写-写:并发更新同一行会导致丢失更......
  • 对于为何设置mySql连接字符串为生么设置useSSL=false
    不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL5.5.45+、5.6.26+和5.7.6+的要求,如果不设置显式选项,则必须建立默认的SSL连接。需要通过设置useSSL=false来显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储。所以建议设置useSSL为false,有时遇到的问题......
  • Centos上卸载MySQL8.0
    1、查看当前mysql安装状况rpm-qa|grepmysql#或yumlistinstall|grepmysql2、查看mysql的服务是否启动systemctlstatusmysqld2.1、如果启动则关闭mysql服务systemctlstopmysqld.service#service可加可不加#停止MySQL的服务[root@chenstudy~]\#......