Mysql入门进阶与突破_MySQL基础进阶

MySQL自动编号(主键自增):AUTO_INCREMENT

自动编号,必须与主键组合使用;默认情况,起始值为1,每次的增量为1

1.创建一个主键自增的数据表tb2:CREATE TABLE tb2(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20) NOT NULL);

2.查看表的数据结构:SHOW COLUMNS FROM tb2;

3.为部分字段赋值:INSERT tb2(username) VALUES('Tom');

INSERT tb2(username) VALUES('John');

4.主键自增不用手动赋值

Mysql入门进阶与突破_MySQL基础进阶_第1张图片

MySQL主键约束:PRIMARY KEY

主键保证记录的唯一性

主键自动为NOT NULL

每张数据表只能有一个主键

在不设定主键自增的情况下,主键约束的字段可以赋值,但不可重复

MySQL唯一约束:UNIQUE KEY

唯一约束可以保证记录的唯一性

唯一约束的字段可以为 NULL

每张数据表可以存在多个唯一约束

创建id为主键自增,username为唯一约束的数据表:

CREATE TABLE tb3(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20) NOT NULL UNIQUE KEY,age TINYINT UNSIGNED);

INSERT tb3(username,age) VALUES('Tom',22); --正确

INSERT tb3(username,age) VALUES('Tom',25); --错误

MySQL默认约束:DEFAULT

1.当插入数据时,如果没有明确为字段赋值,则会自动赋予默认值

创建性别为默认约束的数据表:

CREATE TABLE tb4(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20) NOT NULL UNIQUE KEY,sex ENUM('1','2','3') DEFAULT '3');

Mysql入门进阶与突破_MySQL基础进阶_第2张图片

MySQL外键约束:FOREIGN KEY

1. 保持数据的一致性,完整性

2. 实现一对一 或 一对多 关系

3. 外键约束的要求:

3.1 父表(子表参照的表)和子表(具有外键列的表)必须使用相同的存储引擎,并且禁止使用临时表

3.2 数据表的存储引擎只能为InnoDB

3.3 外键列和参照列必须有相似的数据类型,其中数字的长度 或 是否有符号位 必须相同.而字符的长度可以不同.

3.4 外键列和参照列必须创建索引,如果外键列不存在索引,MySQL将自动创建索引.参照列不存在索引,MySQL不会创建索引.

4. 编写数据表默认的存储引擎:

MySQL配置文件:

2feda90a05cf9751bf9a5683537ab85f.png

default-storage-engine=INNODB(默认的存储引擎就是INNODB)

5. 创建两张数据表

5.1 父表:

CREATE TABLE provinces(id SMALLINT UNSIGNEDAUTO_INCREMENT PRIMARY KEY,pname VARCHAR(20) NOT NULL); --省份数据表

5.2 子表:

CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid BIGINT,FOREIGN KEY (pid) REFERENCES provinces (id));

--用户数据表,外键关联省份表(报错,不满足 外键约束的要求:数字的长度必须相同)

CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid SMALLINT,FOREIGN KEY (pid) REFERENCES provinces (id));

--用户数据表,外键关联省份表(报错,不满足 外键约束的要求:是否有符号位必须相同)

CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid SMALLINT UNSIGNED,FOREIGN KEY (pid) REFERENCES provinces (id));

--用户数据表,外键关联省份表(正确,满足外键约束的要求)

5.3 创建表是否存在索引:(主键在创建时,自动创建索引)

SHOW INDEXES FROM provinces; --显示索引

SHOW INDEXES FROM provinces\G; --显示索引,以列表形式呈现

6. 外键约束的参照操作

6-1. CASCADE:从父表删除或更新 且 自动删除或更新子表中匹配的列

CREATE TABLE user1(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid SMALLINT UNSIGNED,FOREIGN KEY (pid) REFERENCES provinces (id)ON UPDATE CASCADE ON DELETE CASCADE);

DELETE FROM provinces WHERE id=2;

Mysql入门进阶与突破_MySQL基础进阶_第3张图片

mysql> SELECT * FROM user1;

+----+----------+------+

| id | username | pid |

+----+----------+------+

| 1 | Tom | 2 |

| 3 | John | 1 |

| 4 | Rose | 2 |

+----+----------+------+

3 rows in set (0.00 sec)

mysql> DELETE FROM provinces WHERE id=2;

Query OK, 1 row affected (0.02 sec)

mysql> SELECT * FROM user1;

+----+----------+------+

| id | username | pid |

+----+----------+------+

| 3 | John | 1 |

+----+----------+------+

1 row in set (0.00 sec)

mysql> SELECT * FROM provinces;

+----+-------+

| id | pname |

+----+-------+

| 1 | A |

| 3 | C |

+----+-------+

2 rows in set (0.00 sec)

mysql>

6-2. SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL.如果使用该选项,必须保证子表列没有指定NOT NULL.

6-3. RESTRICT:拒绝对父表的删除或更新操作

CREATE TABLE user1(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid SMALLINT UNSIGNED,FOREIGN KEY (pid) REFERENCES provinces (id) ON UPDATE RESTRICT ON DELETE RESTRICT);

DELETE FROM provinces WHERE id=2;

#删除父表失败

6-4. NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

MySQL的表级约束和列级约束

1. 对一个数据列建立的约束,称为列级约束

2. 对多个数据列建立的约束,称为表级约束

3. 列级约束既可以在列定义时声明,也可以在列定义后声明;表级约束只能在列定义后声明。

注:NOT NULL,DEFAULT 只有列级约束; PRIMARY KEY,UNIQUE KEY,FOREIGN KEY 都可存在表级 或 列级 约束

你可能感兴趣的:(Mysql入门进阶与突破)