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