精华内容
下载资源
问答
  • 多余约束的定义
    千次阅读
    2021-01-25 19:41:51

    主键约束

    主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。

    主键分为单字段主键和多字段联合主键,本节将分别讲解这两种主键约束的创建、修改和删除。

    使用主键应注意以下几点:

    每个表只能定义一个主键。

    主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

    一个字段名只能在联合主键字段表中出现一次。

    联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

    1)设置单字段主键

    在 CREATE TABLE 语句中,通过 PRIMARY KEY 关键字来指定主键。

    在定义字段的同时指定主键,语法格式如下:

    PRIMARY KEY [默认值]

    mysql> create table userinfo (

    -> user_id int(10) NOT NULL auto_increment COMMENT'用户ID',

    -> user_name varchar(16) NOT NULL COMMENT '姓名',

    -> user_sex char(2) NOT NULL COMMENT '性别',

    -> user_age tinyint(2) default '0' COMMENT '年龄',

    -> PRIMARY KEY(user_id)

    -> );

    更多相关内容
  • 为了在大爆炸后出现多余的夸克(和重子),必须在电弱(EW)对称击穿之前发生夸克-反夸克对的非平衡结合和类超导体缩合(与轻子类似)。 EW理论中以前未知的与Ginsburg-Landau像势和尺度参数的无量纲耦合随后成为...
  • 即,删除定义可行区域的冗余线性约束。 注意可行域满足A*x <= b,其中A是固定矩阵,b是固定向量,x是你空间中坐标的向量; 即,满足不等式 A*x <= b 的所有 x 值(或等效地,坐标数的所有有序 n 元组)都在...
  • ADAMS约束以及冗余约束的问题

    千次阅读 2021-05-23 13:07:14
    学习ADAMS已经有一段时间了,老师...我以一个长方体为模型,其在空间的自由度为6,构建的模型和参考点如图下图1图中定义了在Groud上的参考Marker_1,用于定位和创建运动副,构建长方体的时候自动生成了一个定位点Marker

    学习ADAMS已经有一段时间了,老师说ADAMS中自由度问题是一个很繁琐的问题,的确如此,现在面对自己课题的时候,老是提示出现冗余约束的问题,问了好几个老师,都没有解决,只好靠自己了,清明花了几天时间,看了好几篇文章,自己仔细琢磨了和推敲,对自由度以及冗余约束的问题有了深入了解,自我感觉挺有用的,希望大家给我指点哈。

    我以一个长方体为模型,其在空间的自由度为6,构建的模型和参考点如下图1所示,其中定义了在Groud上的参考Marker_1,用于定位和创建运动副,构建长方体的时候自动生成了一个定位点Marker_2,两个Marker的坐标轴均和全局坐标一致,如图2

    [转载]ADAMS约束以及冗余约束的问题

    图1

    [转载]ADAMS约束以及冗余约束的问题

    图2

     

    希望通过简单运动副来构建长方体沿轴的转动和移动(即圆柱副)、移动、转动

    (1)添加垂直轴(简单运动副),来限制长方体的一个自由度,比如我们打算限制长方体绕Marker_1的Z轴的转动,在垂直轴选项中选择2_Bodies 2_Location,实体分别选取长方体和大地,位置分别选取长方体上的Marker_2大地上的Marker_1,方向选取Marker_1的X轴和Y轴,那么生成的Marker_3(长方体)和Marker_4(大地)的Z轴应该与Marker_1的X轴和Y轴一致,如图3,此时要保证Marker_3和Marker_4的Z轴垂直,那么长方体绕Marker_1的Z轴的转动将被限制,即长方体只有五个自由度,即绕Marker_1的X、Y轴的转动,和沿Marker_1的X、Y、Z轴的移动

    [转载]ADAMS约束以及冗余约束的问题

    图3

    (2)在步骤(1)的基础上,添加点+线约束,使长方体的自由度再次减少,选择2_Bodies 1_ocation,实体分别选取长方体和大地,位置选取长方体上的Marker_1,方向选择X轴,那么生成的Marker_6长方体)和Marker_7(大地)的Z轴应该与Marker_1的X轴一直,如图4,此时长方体沿Marker_1的Y、Z轴的移动将被限制,加上步骤(1)中垂直约束,长方体只剩下沿Marker_1的X轴的移动,和绕Marker_1的X、Y轴的转动三个自由度。

    [转载]ADAMS约束以及冗余约束的问题
    图4

    (3)在步骤(1)和(2)的基础上再次添加垂直轴(简单运动副)来限制长方体绕Marker_1的Y轴的转动,选择2_Bodies +2_Location,实体分别选取长方体和大地,位置分别选取长方体上的Marker_2大地上的Marker_1方向选取Marker_1的X轴和Z轴,那么生成的Marker_8长方体)和Marker_9大地)的Z轴应该与Marker_1的X轴和Z轴一直,如图5,要保证Marker_8和Marker_9的Z轴垂直,那么长方体绕Marker_1的Y轴的转动将被限制,到现在长方体只剩下了两个自由度,即沿Marker_1的X轴的移动和绕Marker_1的X轴的转动两个自由度,通过在ADAMS中定义Motion仿真验证可得,自由度的个数和方向是正确的,[转载]ADAMS约束以及冗余约束的问题

    图5

    分别按照步骤(1)、(2)、(3)得到长方体自由度如图6-1、6-2、6-3、6-4;定义Motion如图7-1、7-2,位置选择Marker_1,方向选择Z方向,此时运行成功,如果按照图7-3定义绕Y轴转动的话,运行提示仿真错误,如图7-4

    [转载]ADAMS约束以及冗余约束的问题
    图6-1

    [转载]ADAMS约束以及冗余约束的问题
    图6-2

    [转载]ADAMS约束以及冗余约束的问题
    图6-3

    [转载]ADAMS约束以及冗余约束的问题
    图6-4

    [转载]ADAMS约束以及冗余约束的问题 [转载]ADAMS约束以及冗余约束的问题

    图7-1 图7-2

    [转载]ADAMS约束以及冗余约束的问题

    图7-3

    [转载]ADAMS约束以及冗余约束的问题

    图7-4

    (4)在步骤(1)、(2)、(3)的基础上,要使长方体只能绕X轴移动的一个自由度,再添加垂直轴(简单运动副),选择2_Bodies +2_Location,实体分别选取长方体和大地,位置分别选取长方体上的Marker_2和大地上的Marker_1,方向选取Marker_1的Y和Z轴,那么生成的Marker_10(长方体)和Marker_11(Groud)的Z轴与Marker_1的Y轴和Z轴一直,如图8,要保证Marker_10和Marker_11的Z轴垂直,那么长方体绕Marker_1的X轴的转动将被限制,到现在长方体只剩下了一个自由度,即沿Marker_1的X轴的移动,通过在ADAMS中定义Motion仿真验证可得,自由度的个数和方向是正确的

    [转载]ADAMS约束以及冗余约束的问题

    图8
     

    (5)在步骤(1)、(2)、(3)的基础上,要使长方体只能绕X轴转动的一个自由度,再添加点+面(简单运动副),选择2_Bodies +1_Location,实体分别选取长方体和大地,选取大地上的Marker_1,方向选取Marker_1的X轴,那么生成的Marker_10(长方体)和Marker_11(Groud)的Z轴与Marker_1的X轴一致,如图9,那么长方体绕Marker_1的X轴的移动将被限制,现在长方体只剩下了一个自由度,即沿Marker_1的X轴的转动,通过在ADAMS中定义Motion仿真验证可得,自由度的个数和方向是正确的

     

    [转载]ADAMS约束以及冗余约束的问题

    图9

    (6)如果步骤(5)采用添加点+线约束来限制长方体沿Marker_1的X轴移动,使其达到绕Marker_1的X轴转动,选择2_Bodies +1_Location,实体分别选取长方体和大地,选取大地上的Marker_1,方向选取Marker_1的Z轴,,那么长方体沿Marker_1的X、Y轴的移动被限制此时验证模型提示只有一个自由度,但是出现冗余约束情况,

    如下

    .model_1.JPRIM_2 (Inline Primitive_Joint) Translation Along Xj,,

    如图10,也就是说步骤(2)中的点+线约束已经约束过长方体沿Marker_6和Marker_7的X方向的移动,在坐标系Marker_1中就是Y轴方向移动被约束,如果你再用步骤(6)中点+线约束(沿Marker_1的Z轴方向)约束的话,那么长方体沿Marker_1中就是Y轴方向又被约束一次,出现过约束即冗余约束。

    [转载]ADAMS约束以及冗余约束的问题

    图10
    (7) 用简单运动副(点+线、点+曲线、垂直轴等)来构造基本运动副(转动副、移动副等)的基本方法:用简单运动副构建基本运动副的时候,要保证已经约束过的自由度,不再被约束(即自由状态);添加简单运动副时,要在存在的自由度中移除不需要的自由度,同时使已经约束的自由度成自由状态。下面的话表示同时垂直于Z轴与Y轴的X轴的转动自由度不必要,过约束 ,需要移除。

    unnecessarily removes this DOF:

    Revolution Between Zi&Yj

    (8)谢谢大家多多给我找出错误,谢谢

    展开全文
  • 在 MySQL 中,约束是指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。

    约束

    在 MySQL 中,约束是指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。

    例如,在数据表中存放年龄的值时,如果存入 200、300以及一些负数这些无效的值就毫无意义了。因此,使用约束来限定表中的数据范围是很有必要的。

    主键约束

    主键约束是使用最频繁的约束。是MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。

    主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。例如,学生信息表中的学号是唯一的。

    主键分为两种类型:单主键和联合主键。

    这里需要声明一下,每张表只能有一个主键,如果想将多个字段设置为主键,可以将这些字段联合,设置联合主键。不能够将多个字段设置为主键,下面的内容会进行详细的展示说明。联合主键不是多主键!!!

    使用主键应注意以下几点:

    • 每个表只能定义一个主键。
    • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。
    • 一个字段名只能在联合主键字段表中出现一次。
    • 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

    这里的最小化原则是在一张表中,满足主键的要求的情况下,尽量使得联合主键中的字段数最小。

    1. 创建表时设置主键约束
    • 单主键的设置
    CREATE TABLE table_name (
    	id int PRIMARY KEY,
        `name` varchar(32),
        salary float
    );
    

    该语句的功能时在创建数据表的时候,将id字段设置为了主键。直接在字段后使用PRIMARY KEY关键词,即将id字段设置为主键约束,也可以使用下面介绍的联合主键的方法,只在字段中输入一个字段名称即可。

    • 联合主键的设置
    CREATE TABLE table_name (
    	id int,
        `name` varchar(32),
        salary float,
        PRIMARY KEY(id,`name`)
    );
    

    该语句的功能是在创建数据表的时候,将id,name字段设置为了联合主键,在设置完字段后,使用PRIMARY KEY在参数内填写需要设置联合主键的字段名称。即可设置联合主键。

    1. 修改表时添加主键约束
    ALTER TABLE table_name ADD PRIMARY KEY(field_name1,field_name2...);
    

    该语句是在修改数据表的时候添加主键约束,这里如何字段名只有一个,那么就添加的是单主键,多个字段即为联合主键。

    1. 删除主键约束
    ALTER TABLE table_name DROP PRIMARY KEY;
    

    该语句是删除表中的主键约束。

    外键约束

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

    外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

    主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

    定义外键时,需要遵守下列规则:

    • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
    • 必须为主表定义主键。
    • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
    • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
    • 外键中列的数目必须和主表的主键中列的数目相同。
    • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
    1. 创建表时设置外键
    # 创建部门表,即为主表
    CREATE TABLE table_name_dept(
    	id INT(11) PRIMARY KEY AUTO_INCREMENT,	# 部门 ID
        `name` VARCHAR(32),		# 部门 名称
        location VARCHAR(32)	# 部门 位置
    );
    
    # 创建员工表
    CREATE TABLE table_name_emp(
    	id INT(11),
        `name` VARCHAR(32),		# 员工名称
        depId VAECHAR(32),		# 员工部门ID
        salary FLOAT,			# 员工薪资
        CONSTRAINT fk_emp_dept1 # 设置外键名称
        FOREIGN KEY(id) REFERENCES table_name_dept(id)	# 设置外键
    );
    

    该语句的功能是创建了两张表,首先创建员工部门表,并且设置id为主键并且自增长,第二张员工表设置的了名称为fk_emp_dept1的外键,其关联的是两张表,是用两张表中的两个字段,table_name_dept表中的id字段和table_name_emp中的id字段进行联立。需要用来联立的字段的数据类型必须一致,否则会报错Can't create table错误。

    1. 修改表时设置外键

    外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

    ALTER TABLE table_name ADD 
    	CONSTRAINT foreign_key_name 
    	FOREIGN KEY(id) REFERENCES table_name_main(field_name);
    

    该语句的功能是向已经创建好的数据表中增加外键,其数据表名为table_name外键名为foreign_key_name设置的外键字段名为id,联立的字段是field_nameid。在增加外键的时候,表中外键列中的数据必须和主表中的主键列数据一致,或者是没有数据。

    1. 删除外键约束

    当一个表中不需要外键约束时,就需要从表中将其删除。外键一旦删除,就会解除主表和从表间的关联关系。

    ALTER TABLE table_name DROP CONSTRAINT foreign_key_name;
    

    删除外键约束,解除了主表和从表之间的关系。

    唯一约束

    MySQL唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。

    唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。

    1. 创建表时设置唯一约束

    在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法格式如下:

    CREATE TABLE table_name(
    	id INT PRIMARY KEY,
        `username` VARCHAR(32) UNIQUE,
        `password` VARCHAR(32)
    );
    

    该语句是在创建数据表时设置唯一约束,一张表中可以有多个唯一约束,而且允许为空,但只允许一行数据为空。

    1. 在修改表时添加唯一约束
    ALTER TABLE table_name ADD CONSTRAINT (unique_name) UNIQUE (field_name)
    

    该语句的功能时在修改表的时候添加一个名为unique_name的约束,约束字段为field_name;

    1. 删除表中的唯一约束
    ALTER TABLE table_name DROP INDEX (unique_name);
    

    需要注意的是这里使用约束名删除约束的时候使用的关键词不是CONSTRAINT而是INDEX

    检查约束

    检查约束是用来检查数据表中,字段值是否有效的一个手段。

    例如,学生信息表中的年龄字段是没有负数的,并且数值也是有限制的。如果是大学生,年龄一般应该在 18~30 岁之间。在设置字段的检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。

    MySQL检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。

    默认值约束和非空约束也可看作是特殊的检查约束。

    1. 在创建表时设置检查约束
    CREATE TABLE table_name (
    	id INT PRIMARY KEY,
        `name` VARCHAR(32),
        age INT(3),
        CHECK (age >= 0 AND age <= 200)	# 检查约束的设置
    );
    

    该语句的功能时设置检查约束,将age字段的值设置在 [0,200]之间,只有在这个范围内的值才是合法的值。

    1. 在修改表时设置检查约束
    ALTER TABLE table_name ADD CONSTRAINT check_constraint_name CHECK (check_sql);
    
    1. 删除表中的检查约束
    ALTER TABLE table_name DROP CONSTRAINT check_constraint_name;
    

    非空约束

    非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。

    比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约束。

    1. 在创建表时设置非空约束
    CREATE TABLE table_name (
    	id INT PRIMARY KEY,
        `name` VARCHAR(32) NOT NULL,
        age INT(3)
    );
    
    1. 在修改表时添加非空约束
    ALTER TABLE table_name CHANGE COLUMN field_name 
    			field_name data_type NOT NULL;
    
    1. 删除非空约束
    ALTER TABLE <数据表名> CHANGE COLUMN field_name
    			field_name data_type NULL;
    

    默认值约束

    默认值(Default)的完整称呼是”默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。

    例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。

    默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。

    1. 在创建表时设置默认值约束
    CREATE TABLE table_name(
    	id INT PRIMARY KEY,
        `name` VARCHAR(32),
        `local` VARCHAR(32) NOT NULL DEFAULT "北京"
    );
    

    默认值为字符类型时需要用引号引起来。

    1. 在修改表时添加默认值约束
    ALTER TABLE table_name CHANGE COLUMN field_name
    			field_name data_type DEFAULT defult_value;
    
    1. 删除默认值约束
    ALTER TABLE table_name CHANGE COLUMN field_name 
    			field_name data_type DEFAULT NULL;
    

    主键自增长

    在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。

    通过给字段添加 AUTO_INCREMENT属性来实现主键自增长。语法格式如下:

    字段名 数据类型 AUTO_INCREMENT

    • 默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。
    • 一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
    • AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。
    • AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。
    • AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。
    1. 创建表时设置主键自增长
    CREATE TABLE table_name (
    	id int PRIMARY KEY AUTO_INCREMENT,
        `name` varchar(32),
        salary float
    );
    

    该语句的功能为在创建名为table_name的数据表中,设置字段id为主键,并且设置主键自增长。

    1. 指定自增字段初始值
    CREATE TABLE table_name (
    	id int PRIMARY KEY AUTO_INCREMENT,
        `name` varchar(32),
        salary float
        ) AUTO_INCREMENT = 100;
    );
    

    该语句的功能为在创建名为table_name的数据表中,设置字段id为主键,并且设置主键自增长。设置了主键自增长的默认值为100。

    1. 自增字段值不连续

    需要注意的是,设置了主键自增长,虽然主键是按照相同的步长值进行连续增长,但是实际上主键自增长的字段不一定是连续的,这里将这种情况进行解释和说明。

    # 创建数据表,并且设置主键和自增长 和唯一约束
    CREATE TABLE table_name (
    	id int PRIMARY KEY AUTO_INCREMENT,
        `name` varchar(32) UNIQUE KEY,
        salary float
    );
    # 插入一条数据
    INSERT INTO table_name VALUES(1,1,1);
    
    # 插入第二条数据
    INSERT INTO table_name VALUES(null,1,1);
    

    语句解释:第一条语句为创建数据表,并且设置相关的约束。在插入第一条数据时,因为数据表中没有数据,所以会插入成功。到第二条数据插入时,因为由唯一约束的存在,name字段的值不能够重复,这个时候就会插入失败,此时虽然没有将数据插入成功,但是自增主键的id已经进行自增,此时数据表中仍只有一条数据,而其主键id值为1,再进行插入数据时,这个时候的id就已经是3了。这样就出现了主键自增不连续的现象。

    小结

    • 以上 6 种约束中,一个数据表中只能有一个主键约束,其它约束可以有多个。

    • 在外键的创建时,必须先创建主表,再才能创建从表,因为创建从表需要用到主表。

    • 外键的添加需要满足从表中的字段数据全部出现在主表中的字段值。

    • 默认值约束和非空约束可以看做是一种检查约束

    • 自增字段会出现不连续的情况。

    展开全文
  • 主键(PRIMARY KEY)的又叫做“主键约束”,MySQL 主键约束是一个单独的列或者多个列的组合,其值能唯一地标识表中的一行数据。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 例如,通过某个人的...

    主键是数据库中十分重要的概念,必须要掌握。合理的主键设置十分重要,直接决定着我们整个模型设计的合理性,如果前期设计不合理,在项目后期更改主键,将会带来灾难性的影响。

    什么是主键,如何选取主键,主键的特点是什么,如何设置主键,就是我们本文要重点讨论的内容。

    一、什么是主键

    主键(PRIMARY KEY)的又叫做“主键约束”,MySQL 主键约束是一个单独的列或者多个列的组合,其值能唯一地标识表中的一行数据。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

    例如,通过某个人的身份证号码可以唯一确定唯一一个人,那这个身份证号就是主键。如果通过身份证号找到两个人,但是两个人的姓名不一样。则通过”身份证号+姓名”可以确定唯一一个人,则”身份证号+姓名”的组合就是主键。

    二、如何选取主键字段

    单独一个列的主键可以叫做单列主键,或者就叫为主键。由多个列组合的主键称为复合主键,例如”身份证号+姓名”确定唯一一条数据的情况就属于一种复核主键。

    三、主键的特点和要遵守的规则

    每个表只能定义一个主键。

    遵循唯一性原则,主键值必须唯一标识表中的每一行数据,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。

    一个列名只能在复合主键列表中出现一次。例如“身份证+姓名”为主键,而不能是”身份证+身份证+姓名”为主键。

    遵循最小化原则,复合主键不能包含不必要的多余列,当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

    四、重要注意事项

    如果在建表的时候没有主动设置主键,就会选一个不包含NULL的第一个唯一索引列作为主键列,并把它用作一个聚集索引(也叫聚簇索引)。

    如果没有这样的索引就会使用行号生成一个聚集索引(也叫聚簇索引),把它当做主键,这个行号长度为6 bytes,自增。可以用select _rowid from table语句来查询。

    墙裂建议:每一个表都要明确设置主键,不要使用系统自动生成的主键,完全对系统开发没有一点好处,应该把这条规则作为强制开发约束。

    五、设置主键的方法

    1. 第一种方法:在创建表时设置主键约束,在 CREATE TABLE 语句中,通过 PRIMARY KEY 关键字来指定,在定义列的同时指定主键,语法规则如下。

    列名 列类型 PRIMARY KEY [默认值]

    示例1,在 demo_db 数据库中创建 demo_employee 3 数据表,其主键为 id,测试SQL语句和执行结果如下所示。

    mysql> CREATE TABLE demo_employee3
        -> (
        -> id INT(11) PRIMARY KEY,
        -> name VARCHAR(25),
        -> deptid INT(11),
        -> salary FLOAT
        -> );
    Query OK, 0 rows affected (0.37 sec)
    mysql> DESC demo_employee3;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(25) | YES  |     | NULL    |       |
    | deptid | int(11)     | YES  |     | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    4 rows in set (0.14 sec)

    2. 第二种方法:在定义完所有列之后,指定主键,语法格式为:[CONSTRAINT ] PRIMARY KEY [字段名]

    示例2,在 demo_db 数据库中创建 demo_employee 4 数据表,其主键为 id,测试SQL语句和执行结果如下所示。

    mysql> CREATE TABLE demo_employee4
        -> (
        -> id INT(11),
        -> name VARCHAR(25),
        -> deptid INT(11),
        -> salary FLOAT,
        -> PRIMARY KEY(id)
        -> );
    Query OK, 0 rows affected (0.37 sec)
    mysql> DESC demo_employee4;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(25) | YES  |     | NULL    |       |
    | deptid | int(11)     | YES  |     | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    4 rows in set (0.14 sec)

    3. 主键由多个字段联合组成,语法规则如下:PRIMARY KEY [字段1,字段2,…,字段n]

    示例3,创建数据表 demo_employee5,假设表中没有主键 id,为了唯一确定一个员工,可以把 name、deptid 联合起来作为主键,测试SQL语句和执行结果如下所示。

    mysql> CREATE TABLE demo_employee5
        -> (
        -> name VARCHAR(25),
        -> deptid INT(11),
        -> salary FLOAT,
        -> PRIMARY KEY(name,deptid)
        -> );
    Query OK, 0 rows affected (0.37 sec)
    mysql> DESC demo_employee5;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | name   | varchar(25) | NO   | PRI | NULL    |       |
    | deptid | int(11)     | NO   | PRI | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    3 rows in set (0.14 sec)

    4, 在修改表时添加主键约束,语法规则为:ALTER TABLE ADD PRIMARY KEY();

    【示例4】修改数据表 demo_employee2,将字段 id 设置为主键,测试SQL语句和执行结果如下所示。

    首先查看 demo_employee2 数据表的表结构,如下所示,是没有设置任何主键的。

    mysql> DESC demo_employee2;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   |     | NULL    |       |
    | name   | varchar(30) | YES  |     | NULL    |       |
    | deptid | int(11)     | YES  |     | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    4 rows in set (0.14 sec)

    然后使用ALTER语句修改表,同时增加主键

    mysql> ALTER TABLE demo_employee2
        -> ADD PRIMARY KEY(id);
    Query OK, 0 rows affected (0.94 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    mysql> DESC demo_employee2;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | NO   | PRI | NULL    |       |
    | name   | varchar(30) | YES  |     | NULL    |       |
    | deptid | int(11)     | YES  |     | NULL    |       |
    | salary | float       | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    4 rows in set (0.12 sec)

    MySQL是日常工作中使用最对的数据库之一,所以必须要要较为深入和全面的掌握,对于高阶人员还要掌握分布式事务、各种数据库锁、传播机制等

    展开全文
  • 1. 引入 约束 布局 ( 1 ) 约束性布局 作用 和 简介 2. 约束 简介 ( 1 ) 约束个数要求 ( 2 ) 约束设置 与 显示位置 3. ConstraintLayout 引入 ( 1 ) ConstraintLayout 依赖添加 ( 2 ) ConstraintLayout 转换 ...
  • 建立了系统的运动微分方程,在时间和空间的点对称变换下,给出了系统的Lie对称性的定义,得到了由单面完整约束力学系统的Lie对称性直接导致的一类新守恒量——Lutzky守恒量,作为特例,给出了有多余坐标系统、非保守...
  • 外键约束

    千次阅读 2018-09-27 18:09:19
    :为外键约束定义约束名称 constraint_name ,如果省略它,MySQL将自动生成一个名称 FOREIGN KEY :指定子表中关联父表中记录的字段 column_name1 ,可以在 FOREIGN KEY 子句后放置一个外键名称 foreign_key_name ...
  • 必读 | 深入理解 Flutter 的布局约束

    千次阅读 2020-07-07 11:08:59
    所以,在不考虑整棵树的情况下,几乎不可能精确定义任何 widget 的大小和位置。 样例 以下的效果图片和样例代码均可通过下面这个 DartPad 链接查看: dartpad.cn/759e9e061a6d4c247700429ddda09b8b 也可以在这个 ...
  • 定义:主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 在关系数据库,一个表...
  • 2020重新出发,MySql基础,MySql的约束

    千次阅读 2021-02-08 18:25:16
    [TOC]MySQL约束概述MySQL约束是一种限制,它通过限制表中的数据,来确保数据的完整性和唯一性。使用约束来限定表中的数据是很有必要的。在 MySQL 中,约束是指对表中数据的一种约束,能够帮助数据库管理员更好地管理...
  • 每一个实际问题,如果不是显式地至少也是隐式地带有约束约束优化问题可以写成 这个问题包含p+m个约束,其中m个不等式约束,p个等式约束。满足全部约束条件的x的集合被称为可行集。违反一个或多个约束的x的集合...
  • MySQL约束

    2021-01-19 09:20:00
    主键约束(PRIMARY KEY)主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:每个表只能定义一个...
  • 就是用SSMS工具图形化地创建及维护关系表1、创建表:在SSMS中...效果如下图,第二步:在表设计器窗格中定义表的结构,针对每一个字段进行设置,包括‘列名’、‘数据类型’、‘允许为空’第三步:保存表的定义;效果...
  • mysql主键非空约束怎么设置?

    千次阅读 2021-02-02 07:23:20
    mysql中可以通过在“CREATE TABLE”语句中,使用“ PRIMARY KEY [默认值]”语句来设置主键约束,使用“ NOT NULL”语句来设置非空约束。mysql主键约束主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用...
  • MySQL数据完整性约束

    千次阅读 2019-01-09 18:29:22
    数据完整性是指数据的正确性和相容性,是为了防止数据库中存在不符合语义的数据,即防止数据库中存在不正确的数据。...(1)每一个表只能定义一个主键。 (2)唯一性原则。主键的值,也称键值,必须能够唯一...
  • 达梦工具数据迁移 违反唯一约束

    千次阅读 2021-09-28 15:17:20
    oracle数据迁移到达梦数据库,出现违反唯一约束的问题 解决办法: 1.先在达梦数据库上重新编辑建表语句 右键出现问题的表-生成sql脚本-Create to - 当前SQL编辑器 - 删掉多余的部分,删除完先不要执行 2.删掉...
  • Android 约束布局(ConstraintLayout)详解

    万次阅读 多人点赞 2018-01-13 16:28:13
    约束概述 转换布局 开始 创建布局 添加约束 基线约束 Chains Properties 设置宽高比例 Guidelines 自动添加约束 参考 本篇 ConstraintLayout 讲解版本:1.0.2,1.1.x 版本开始新增功能在下篇进行讲解。 ...
  • 候选键(candidate key):不含有多余属性的超键称为候选键 主键(primary key):用户选作元组标识的一个候选键程序主键 比如一个小范围的所有人,没有重名的,考虑以下属性 身份证 姓名 性别 年龄 身份证唯一,所以是一...
  • 规范约束条件

    千次阅读 2020-04-21 22:51:21
    但是有时我们会定义过多或过少的约束条件,过多的约束条件会导致其他开发人员在使用你所编写的方法或类时做很多的工作以满足这些约束,过少的约束又会导致程序在运行的时候必须做很多的检查,并执行更多的强制类型...
  • 数据完整性约束

    千次阅读 2019-02-28 14:36:45
    数据完整性约束定义:是指数据的正确性和相容性,为了防止数据库中存在不符合语义的数据,防止数据库中存在不正确的数据。在关系型模型中提供了三种规则:实体完整性,参照完整性,和用户定义完整性。 实体完整性...
  • t-sql 唯一约束_SQL唯一约束-终极指南

    千次阅读 2020-07-20 10:54:52
    t-sql 唯一约束Hello! Hope you guys are doing well. In this article, we will be unveiling one of the interesting and important topic in SQL — SQL UNIQUE Constraint. 你好! 希望你们一切都好。 在本文中...
  • MySQL之主键约束(PRIMARY KEY语句)

    千次阅读 2019-08-26 16:32:19
    主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则: 每个表只能定义一个主键。 主键值必须唯一...
  • mysql主键非空约束怎么设置mysql中可以通过在“CREATE TABLE”语句中,使用“ PRIMARY KEY [默认值]”语句来设置主键约束,使用“ NOT NULL”语句来设置非空约束。mysql主键约束主键(PRIMARY KEY)的完整称呼是“主键...
  • 数独游戏被设计成通过约束间的推理来求解。但很多CSP只用推理是不能求解的;这时我们必须通过搜索来求解。这里讨论部分赋值的回溯搜索算法;后面会讨论完整赋值的局部搜索算法。 可以应用标准的深度优先搜索。状态...
  • Bug定义标准

    2013-05-08 22:16:23
    详细的Bug定义标准,适合测试工作者使用。
  • MySQL||主键(primary key)及主键约束

    千次阅读 2019-07-24 22:43:02
    主键 主键(PRIMARY KEY)”...主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则: 每个表只能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,292
精华内容 9,716
关键字:

多余约束的定义

友情链接: user-guide-a4.zip