MySQL总结

本文详细介绍了MySQL数据库中的数据约束,包括非空约束、唯一约束、主键约束、外键约束和检查约束。主键用于唯一标识表行,不允许重复且不可为null;非空约束确保字段不能为空;唯一约束保证字段值不重复,允许多个null值;外键建立表间关系,需参照主键或唯一字段;检查约束在MySQL中仅做语法检查,实际无效。此外,还讨论了自增主键的使用和配置。
摘要由CSDN通过智能技术生成

1.约束是对表中的数据进行限定,保证数据的正确性、有效性和完整性。在mysql中,约束包括:not null(非空约束)、unique(唯一性约束)、primary key(主键约束)、foreign key(外键约束)、check(检查约束)。

2.primary key(主键):用于唯一的标示表行的数据,当定义主键约束时,该列不能重复而且不能为null;一张表最多只能有一个主键,但可以是复用主键;直接在字段后制定:字段名 primary key;在表定义最后写 primary key(列名);使用desc表名,可以看到primary key的情况。

CREATE TABLE t17(
    id INT PRIMARY KEY,
    `name` VARCHAR(32));
INSERT INTO t17
    VALUES(1,'jack');
INSERT INTO t17
    VALUES(2,'tom');
INSERT INTO t17
    VALUES(1,'nono'); -- 报错
SELECT * FROM t17;
INSERT INTO t17
    VALUES(NULL,'nono'); -- 报错

3.not null(非空):在列上定义了not null,那么当插入数据时,必须为列提供数据。 字段名 字段类型 not null。

CREATE TABLE t21(
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(32) NOT NULL DEFAULT '',
    `name` VARCHAR(32) NOT NULL DEFAULT '');
DESC t21;

4.unique(唯一):当定义了唯一约束后,该列值是不能重复的。 字段名 字段类型 unique              如果没有指定not null,则unique字段可以有多个null。一张表可以有多个unique字段。

CREATE TABLE t19(
    id INT UNIQUE,
    `name` VARCHAR(32));
INSERT INTO t19
    VALUES(1,'jack');
INSERT INTO t19
    VALUES(1,'tom');
INSERT INTO t19
    VALUES(NULL,'tom');
SELECT * FROM t19;

5.foreign key(外键):用于定义主表和从表之间的关系;外键约束要定义在从表上,主表则必须具有主键约束或是unique约束。FOREIGN KEY(本表字段名) REFERENCES 主表名(主键名或unique字段名)              外键指向的表的字段,要求是primary key或是unique           表的类型是innodb,这样的表才支持外键。外键字段的值,必须在主键字段中出现过,或者为null(前提是外键字段允许为null)。

CREATE TABLE my_class(
    id INT PRIMARY KEY,
    `name` VARCHAR(32) NOT NULL DEFAULT '');
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));
INSERT INTO my_class
    VALUES(100,'java'),(200,'web');
SELECT * FROM my_class;
INSERT INTO my_stu
    VALUES(1,'tom',100);
INSERT INTO my_stu
    VALUES(2,'jack',200);
INSERT INTO my_stu
    VALUES(3,'nono',300);-- 添加失败
SELECT * FROM my_stu;

6.check(检查):是用来检查数据表中字段值。mysql5.7目前不支持chack,只做语法校验,但不会生效。CHECK (表达式)

CREATE TABLE t20(
    id INT PRIMARY KEY,
    `name` VARCHAR(32),
    sex VARCHAR(6) CHECK (sex IN('man','woman')),
    sal DOUBLE CHECK (sal > 1000 AND sal < 2000));
INSERT INTO t20
    VALUES(1,'jack','mid',1);
SELECT * FROM t20;

7.当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。字段名 整型 primary key auto_increment               自增长修饰的字段为整数型(很少使用小数)。自增长默认从1开始,可以通过命令修改:alter table 表名 auto_increment = xxx;

ALTER TABLE t22 AUTO_INCREMENT = 100;
CREATE TABLE t22(
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(32) NOT NULL DEFAULT '',
    `name` VARCHAR(32) NOT NULL DEFAULT '');
INSERT INTO t22
    (email,`name`) VALUES('nono@qq.com','nono');
SELECT * FROM t22;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值