当前位置: 首页> 游戏> 网游 > 深圳有名的室内设计公司_外包网络推广公司_推广网站源码_上往建站

深圳有名的室内设计公司_外包网络推广公司_推广网站源码_上往建站

时间:2025/7/14 22:41:41来源:https://blog.csdn.net/qq_73797346/article/details/144163828 浏览次数:0次
深圳有名的室内设计公司_外包网络推广公司_推广网站源码_上往建站
自增主键

自增主键是数据库设计中常用的一种主键生成策略,它指的是在插入新记录时,主键列的值会自动递增。

优点:

  • 唯一标识每条记录:确保每条记录在表中都是唯一的
  • 确保数据完整性:通过主键的唯一性,避免数据的重复和混乱
  • 便于mysql主键索引的维护,如果类型为用户任意输入,可能会导致 B+tree 分裂

1.例如设置主键自增

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,                   # 非空email VARCHAR(100) NOT NULL UNIQUE,              # 唯一邮箱 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  # 当前时间is_active BOOLEAN DEFAULT TRUE                   # 布尔类型
);

2.插入数据,id列 不用插入可以实现自增

在这里插入图片描述

主键约束

主键约束通过在表中定义一个或多个列(即复合主键)来确保每条记录在这些列的组合上具有唯一性。主键列的值不能为NULL,也不能重复

1.学生id使用主键约束,确保 id 唯一

CREATE TABLE Students (StudentID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50)
);
非空约束

与非空对应的就是default了。在不插入数据的情况下设置默认值

1.字段的记录值名字非空且唯一(not null)

CREATE TABLE `test1` (`name` varchar(255) NOT NULL,PRIMARY KEY (`name`)
)

2.设置(字段1 字段2 字段3)属性1 属性2 属性3

CREATE TABLE xxs (id INT AUTO_INCREMENT PRIMARY KEY,  # 自增主键,用于唯一标识每一条记录student_id VARCHAR(20) NOT NULL,    # 学号,全局唯一exam_id VARCHAR(20),                # 考号student_name VARCHAR(50),           # 学生姓名exam_name VARCHAR(50),              # 考试名称UNIQUE KEY (student_id)             # 定义学号的唯一约束
);

default 设置

1.举例,给学生爱好设置为非空,如果空则默认是 “read_book”

CREATE TABLE student (student_id INT PRIMARY KEY,name VARCHAR(100),hobby VARCHAR(100) NOT NULL DEFAULT 'read_book'
);

2.插入数据分别为默认hobby和手动设置hobby

mysql> INSERT INTO student (student_id, name) VALUES (433, 'wzy');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO student (student_id, name, hobby) VALUES (434, 'wzy', 'swimming');
Query OK, 1 row affected (0.00 sec)

3.查验数据OK

mysql> select * from student;
+------------+------+-----------+
| student_id | name | hobby     |
+------------+------+-----------+
|        433 | wzy  | read_book |
|        434 | wzy  | swimming  |
+------------+------+-----------+
唯一约束

确保输入的列在当字段唯一,例如输入手机号

CREATE TABLE phone_number (number int not null unique
);
外键约束
  • 外面的键,一张表的一个字段(非主键)指向另外一个表的主键,那么该字段就称之为外键

  • 外键所在的表称之为子表(附表); 外键所指向的主键所在的表称之为父表(主表)

  • 外键约束

    • 插入约束:外键(也叫子表)插入数据时,该数据必须在父表存在,注意父表插入新的值,子表也不会继承

    • 删除约束:子表使用了外键,不能删除父表;而是先删子表,再删父表

1.创建教室表作为父表,然后写入内容(如下图)

create table class(id int primary key auto_increment,name varchar(10) not null comment "班级名字,不能为空",room varchar(10) comment '教室:允许为空'
);

在这里插入图片描述

2.创建学生表使用外键,查看候选 class_id 只能从父表id取值

create table student(id int primary key auto_increment,number char(10) not null unique comment "学号:不能重复",name varchar(10) not null comment "姓名",class_id int,foreign key(class_id) references class(id) 
);

在这里插入图片描述

3.尝试删除父表 class,提示有外键不能直接删除

mysql> drop table class;
ERROR 3730 (HY000): Cannot drop table 'class' referenced by a foreign key constraint 'student_ibfk_1' on table 'student'.

4.先删除字表,然后就可以删除父表了

mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)mysql> drop table class;
Query OK, 0 rows affected (0.01 sec)
非负约束

关键词:INT UNSIGNED

CHANGE COLUMNageageINT UNSIGNED NULL DEFAULT NULL ;
sql_mode

sql_mode 是 MySQL 中的一个系统变量,用于控制 SQL 语句的执行模式。sql_mode 可以包含多个模式,每个模式都定义了 MySQL 应该如何处理 SQL 语句的某些方面。例如,它可以控制 MySQL 如何处理无效或遗漏的数据,以及如何执行数据类型的隐式转换。

==提示:==如果主库关闭了sqo_mode,而从库开启了严格的sql_mode会导致主从建立失败

1.查看当前的sql_mode

mysql> select @@sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
  • ONLY_FULL_GROUP_BY: 要求在使用 GROUP BY 子句时,SELECT 列表中的所有非聚合列都必须出现在 GROUP BY 子句中,有助于避免在分组查询中出现不确定的结果
  • STRICT_TRANS_TABLES: 在无法将一个值插入到一个事务表中时产生错误,而不是警告,并且不允许无效或遗漏的值,有助于确保数据的完整性
  • NO_ZERO_IN_DATE: 不允许日期部分为零的值(例如 ‘2010-00-00’),有助于避免日期值的歧义
  • NO_ZERO_DATE: 不允许日期完全为零的值(例如 ‘0000-00-00’),同样有助于避免日期值的歧义
  • ERROR_FOR_DIVISION_BY_ZERO: 在除以零时产生错误,而不是返回 NULLInfinity,有助于避免在计算中出现未定义的结果
  • NO_ENGINE_SUBSTITUTION: 如果指定的存储引擎不可用,则产生错误,而不是使用默认的存储引擎,有助于确保应用程序使用的存储引擎是可用的

2.假设现在有一个字段为 date 类型,因为sql_mode 的存在,所以不能随意插入数据。这样一顿操作后,数据就可以随意插入了

mysql> set global sql_mode='';
Query OK, 0 rows affected (0.00 sec)mysql> quit
[root@db51~]# mysqlmysql> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
|            |
+------------+
1 row in set (0.00 sec)

更多的sql_mode

  • ANSI: 使 MySQL 的行为更接近 ANSI SQL 标准。
  • STRICT_TRANS_TABLES: 在无法将一个值插入到一个事务表中时产生错误,而不是警告,并且不允许无效或遗漏的值。
  • STRICT_ALL_TABLES: 类似于 STRICT_TRANS_TABLES,但是对所有存储引擎都有效,不仅仅是事务表。
  • NO_ZERO_IN_DATE: 不允许日期部分为零的值(例如 ‘2010-00-00’)。
  • NO_ZERO_DATE: 不允许日期完全为零的值(例如 ‘0000-00-00’)。
  • ERROR_FOR_DIVISION_BY_ZERO: 在除以零时产生错误。
  • NO_ENGINE_SUBSTITUTION: 如果指定的存储引擎不可用,则产生错误,而不是使用默认的存储引擎。
  • PIPES_AS_CONCAT: 将 || 视为字符串连接操作符,而不是逻辑 OR。
  • ANSI_QUOTES: 允许使用双引号来引用标识符。
  • IGNORE_SPACE: 忽略函数名后面的空格。
  • NO_AUTO_CREATE_USER: 禁止使用 GRANT 语句自动创建新用户。
  • NO_AUTO_VALUE_ON_ZERO: 当插入的值为零时,禁止自动增加字段的值。
  • NO_BACKSLASH_ESCAPES: 禁止使用反斜杠作为转义字符。
  • NO_DIR_IN_CREATE: 在 CREATE TABLE 语句中禁止使用 TYPE=MyISAM
  • NO_ENGINE_SUBSTITUTION: 如果指定的存储引擎不可用,则产生错误。
  • NO_FIELD_OPTIONS: 禁止在 SHOW CREATE TABLE 中显示字段选项。
  • NO_KEY_OPTIONS: 禁止在 SHOW CREATE TABLE 中显示索引选项。
  • NO_TABLE_OPTIONS: 禁止在 SHOW CREATE TABLE 中显示表选项。
  • NO_UNSIGNED_SUBTRACTION: 禁止无符号整数之间的减法操作。
  • NO_FIELD_ADD: 禁止动态添加字段。
  • NO_USER_TABLES: 禁止使用 --skip-grant-tables 选项时访问用户表。
  • NO_FIELD_MODIFY: 禁止动态修改字段。
  • NO_AUTO_CREATE_USER: 禁止使用 GRANT 语句自动创建新用户。
  • NO_AUTO_VALUE_ON_ZERO: 当插入的值为零时,禁止自动增加字段的值。
  • NO_BACKSLASH_ESCAPES: 禁止使用反斜杠作为转义字符。
  • NO_DIR_IN_CREATE: 在 CREATE TABLE 语句中禁止使用 TYPE=MyISAM
  • NO_ENGINE_SUBSTITUTION: 如果指定的存储引擎不可用,则产生错误。
  • NO_FIELD_OPTIONS: 禁止在 SHOW CREATE TABLE 中显示字段选项。
  • NO_KEY_OPTIONS: 禁止在 SHOW CREATE OR REPLACE TABLE 中显示索引选项。
  • NO_TABLE_OPTIONS: 禁止在 SHOW CREATE TABLE 中显示表选项。
  • NO_UNSIGNED_SUBTRACTION: 禁止无符号整数之间的减法操作。
  • NO_FIELD_ADD: 禁止动态添加字段。
  • NO_USER_TABLES: 禁止使用 --skip-grant-tables 选项时访问用户表。
    CREATE TABLE` 中显示字段选项。
  • NO_KEY_OPTIONS: 禁止在 SHOW CREATE OR REPLACE TABLE 中显示索引选项。
  • NO_TABLE_OPTIONS: 禁止在 SHOW CREATE TABLE 中显示表选项。
  • NO_UNSIGNED_SUBTRACTION: 禁止无符号整数之间的减法操作。
  • NO_FIELD_ADD: 禁止动态添加字段。
  • NO_USER_TABLES: 禁止使用 --skip-grant-tables 选项时访问用户表。
  • NO_FIELD_MODIFY: 禁止动态修改字段。
关键字:深圳有名的室内设计公司_外包网络推广公司_推广网站源码_上往建站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: