精华内容
下载资源
问答
  • 数据库约束

    2020-09-02 19:48:36
    NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT 为该字段设置默认值 UNSIGNED 无符号 ZEROFILL 使用0填充 ​ ...

    数据库约束

    PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
    FOREIGN KEY (FK)    标识该字段为该表的外键
    NOT NULL    标识该字段不能为空
    UNIQUE KEY (UK)    标识该字段的值是唯一的
    AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
    DEFAULT    为该字段设置默认值
    
    UNSIGNED 无符号
    ZEROFILL 使用0填充
    

    ​ unique有一种联合的方式,使用方法是(字段名)将两个字段看成是一体的,保证两个字段只要有一个是唯一即可

    联合唯一
    #使用方法
    create table t1(
    id int primary key auto_increment,
    ip char(10),
    port int,
    unique(ip,port)
    );
    
    primary key

    ​ innodb会以主键所约束的值会帮助我们生成表结构,用于提高查询速度。

    ​ 若是不指定主键,innodb会自动寻找第一个not null 且unique的字段为主键,都没有则会随机设置一个隐藏的主键

    详细的会在索引部分细讲。

    ​ primary key也有这么一种联合的方式,使用方法与unique一致。

    foreign key

    foreign key简单的说就是将两张表通过语法角度连接在一起。且使用foreign key有一定的条件

    1.双方都必须是innodb存储引擎,且被关联的字段必须保证唯一性

    2.建表时,必须先建立被关联的表,才能建立关联表

    3.插入记录时,先往被关联的表插入记录,才能往关联表中插入数据

    使用方法

    #语法
    foreign key(关联的表) references(被关联的表)
    #同步更新,同步删除
    #在原关联语句后面添加 
    on update cascade
    on delete cascade
    

    ​ 但是不建议使用外键的方式进行约束,因为影响过大,对后续的更新,扩展有极其不利的影响

    表与表之间的关系

    多对多:

    多对一:

    一对一:

    展开全文
  • 约束条件与数据类型的宽度一样,都是可选参数作用:用于保证数据的完整性和一致性主要分为:PRIMARY KEY (PK) 标识该字段该表的主键,可以唯一的标识记录FOREIGN KEY (FK) 标识该字段该表的外键NOT NULL 标识该...

    约束条件与数据类型的宽度一样,都是可选参数

    作用:用于保证数据的完整性和一致性

    主要分为:

    PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录

    FOREIGN KEY (FK) 标识该字段为该表的外键

    NOT NULL 标识该字段不能为空

    UNIQUE KEY (UK) 标识该字段的值是唯一的

    AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)

    DEFAULT 为该字段设置默认值

    UNSIGNED 无符号

    ZEROFILL 使用0填充

    1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值

    2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值

    sex enum('male','female') not null default 'male'

    age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20

    3. 是否是key

    主键 primary key

    外键 foreign key

    索引 (index,unique...)

    not null与default

    是否可空,null表示空,非字符串

    not null - 不可空

    null - 可空

    default默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值(注意,varchar类型default要加""双引号)

    语法:

    create table 表名(

    字段名 字段类型 defalut 默认值,

    字段名 字段类型

    );

    代码示例:

    ==================not null====================

    mysql> create table t1(id int);

    Query OK, 0 rows affected (0.01 sec)

    mysql> desc t1;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | YES | | NULL | |

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

    1 row in set (0.01 sec)

    mysql> insert into t1 values(); #可以插入空

    Query OK, 1 row affected (0.00 sec)

    mysql> select * from t1;

    +------+

    | id |

    +------+

    | NULL |

    +------+

    1 row in set (0.00 sec)

    mysql>

    mysql> create table t2(id int not null); #设置字段id不为空

    Query OK, 0 rows affected (0.01 sec)

    mysql> desc t2;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | | NULL | |

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

    1 row in set (0.01 sec)

    mysql> insert into t2 values(); #不能插入空

    ERROR 1364 (HY000): Field 'id' doesn't have a default value

    mysql>

    ==================default====================

    #设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值

    mysql> create table t3(id int default 1);

    Query OK, 0 rows affected (0.01 sec)

    mysql> create table t4(id int not null default 3);

    Query OK, 0 rows affected (0.01 sec)

    mysql> desc t3;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | YES | | 1 | |

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

    1 row in set (0.01 sec)

    mysql> desc t4;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | | 3 | |

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

    1 row in set (0.01 sec)

    mysql> insert into t3 values();

    Query OK, 1 row affected (0.01 sec)

    mysql> insert into t4 values();

    Query OK, 1 row affected (0.00 sec)

    mysql> select * from t3;

    +------+

    | id |

    +------+

    | 1 |

    +------+

    1 row in set (0.00 sec)

    mysql> select * from t4;

    +----+

    | id |

    +----+

    | 3 |

    +----+

    1 row in set (0.00 sec)

    mysql>

    ==================综合练习====================

    mysql> create table student(

    -> id int not null,

    -> name varchar(20) not null,

    -> age int unsigned not null default 18,

    -> sex enum("male","female") default "male",

    -> hobby set("play","study","read","music") default "play,music"

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> desc student;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | | NULL | |

    | name | varchar(20) | NO | | NULL | |

    | age | int(10) unsigned | NO | | 18 | |

    | sex | enum('male','female') | YES | | male | |

    | hobby | set('play','study','read','music') | YES | | play,music | |

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

    5 rows in set (0.01 sec)

    mysql> insert into student(id,name) values(1,"egon");

    Query OK, 1 row affected (0.01 sec)

    mysql> select * from student;

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

    | id | name | age | sex | hobby |

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

    | 1 | egon | 18 | male | play,music |

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

    1 row in set (0.00 sec)

    mysql>

    三、unique

    #============设置唯一约束 UNIQUE===============

    #单列唯一

    方法一:

    create table department1(

    id int,

    name varchar(20) unique,

    comment varchar(100)

    );

    方法二:

    使用关键字constraint:

    #语法:

    constraint 约束名 unique(字段名)

    create table department2(

    id int,

    name varchar(20),

    comment varchar(100),

    constraint uk_name unique(name)

    );

    mysql> insert into department1 values(1,'IT','技术');

    Query OK, 1 row affected (0.00 sec)

    mysql> insert into department1 values(1,'IT','技术');

    ERROR 1062 (23000): Duplicate entry 'IT' for key 'name'

    #联合唯一

    例如:socket传输的ip和port

    """

    ip和port

    单个都可以重复 但是加在一起必须是唯一的

    """

    create table t4(

    id int,

    ip char(16),

    port int,

    unique(ip,port)

    );

    insert into t4 values(1,'127.0.0.1',8080);

    insert into t4 values(2,'127.0.0.1',8081);

    insert into t4 values(3,'127.0.0.2',8080);

    insert into t4 values(4,'127.0.0.1',8080); #报错

    #not null+unique的化学反应==>primary key主键的效果

    mysql> create table t1(id int not null unique);

    Query OK, 0 rows affected (0.02 sec)

    mysql> desc t1;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | |

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

    row in set (0.00 sec)

    四、primary key主键

    单列主键

    设置方法:

    ============单列做主键===============

    #方法一:创建表时在某一个字段类型后用not null+unique

    create table department1(

    id int not null unique, #主键

    name varchar(20) not null unique,

    comment varchar(100)

    );

    mysql> desc department1;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(20) | NO | UNI | NULL | |

    | comment | varchar(100) | YES | | NULL | |

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

    rows in set (0.01 sec)

    #方法二:创建表时在某一个字段类型后用primary key

    create table department2(

    id int primary key, #主键

    name varchar(20),

    comment varchar(100)

    );

    mysql> desc department2;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(20) | YES | | NULL | |

    | comment | varchar(100) | YES | | NULL | |

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

    rows in set (0.00 sec)

    #方法三:创建表时在所有字段后单独使用constraint约束关键字定义primary key

    create table department3(

    id int,

    name varchar(20),

    comment varchar(100),

    constraint pk_name primary key(id); #创建主键并为其命名pk_name

    mysql> desc department3;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(20) | YES | | NULL | |

    | comment | varchar(100) | YES | | NULL | |

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

    rows in set (0.01 sec)

    1.单单从约束效果上来看primary key等价于not null + unique (非空且唯一)

    2.主键primary key是innodb存储引擎组织数据的依据,innodb称之为索引组织表(类似于书的目录),一张表中必须有且只有一个主键primary key。

    一张表中有且只有一个主键 如果你没有设置主键 那么会从上往下搜索直到遇到一个非空且唯一的字段将它自动升级为主键

    示例:

    mysql> create table t1(

    -> id int,

    -> name varchar(10),

    -> age int not null unique, #升级为主键

    -> addr varchar(32) not null unique #不会升级为主键,被标识为单列唯一

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> desc t1;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | YES | | NULL | |

    | name | varchar(10) | YES | | NULL | |

    | age | int(11) | NO | PRI | NULL | |

    | addr | varchar(32) | NO | UNI | NULL | |

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

    4 rows in set (0.01 sec)

    mysql>

    如果表中没有主键也没有其他任何的非空且唯一字段 那么Innodb会采用自己内部提供的一个隐藏字段作为主键,隐藏意味着你无法使用到它 就无法提升查询速度

    一张表中通常都应该有一个主键字段 并且通常将id/uid/sid字段作为主键

    联合主键

    #==================多列做主键================

    create table service(

    ip varchar(15),

    port char(5),

    service_name varchar(10) not null,

    primary key(ip,port)

    );

    mysql> desc service;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | ip | varchar(15) | NO | PRI | NULL | |

    | port | char(5) | NO | PRI | NULL | |

    | service_name | varchar(10) | NO | | NULL | |

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

    3 rows in set (0.00 sec)

    mysql> insert into service values

    -> ('172.16.45.10','3306','mysqld'),

    -> ('172.16.45.11','3306','mariadb')

    -> ;

    Query OK, 2 rows affected (0.00 sec)

    Records: 2 Duplicates: 0 Warnings: 0

    mysql> insert into service values ('172.16.45.10','3306','nginx');

    ERROR 1062 (23000): Duplicate entry '172.16.45.10-3306' for key 'PRIMARY'

    总结:

    以后在创建表的时候id字段一定要加primary key

    五、auto_increment自增

    约束字段为自动增长,被约束的字段必须同时被key约束(通常用在主键id上进行自增)

    # 注意auto_increment通常都是加在主键上的 不能给普通字段加

    create table t9(

    id int primary key auto_increment,

    name char(16),

    cid int auto_increment

    );

    ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

    #不指定id,则自动增长

    create table student(

    id int primary key auto_increment,

    name varchar(20),

    sex enum('male','female') default 'male'

    );

    mysql> desc student;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | auto_increment |

    | name | varchar(20) | YES | | NULL | |

    | sex | enum('male','female') | YES | | male | |

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

    mysql> insert into student(name) values

    -> ('egon'),

    -> ('alex')

    -> ;

    mysql> select * from student;

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

    | id | name | sex |

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

    | 1 | egon | male |

    | 2 | alex | male |

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

    #也可以指定id

    mysql> insert into student values(4,'asb','female');

    Query OK, 1 row affected (0.00 sec)

    mysql> insert into student values(7,'wsb','female');

    Query OK, 1 row affected (0.00 sec)

    mysql> select * from student;

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

    | id | name | sex |

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

    | 1 | egon | male |

    | 2 | alex | male |

    | 4 | asb | female |

    | 7 | wsb | female |

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

    #对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长

    mysql> delete from student;

    Query OK, 4 rows affected (0.00 sec)

    mysql> select * from student;

    Empty set (0.00 sec)

    mysql> insert into student(name) values('ysb');

    mysql> select * from student;

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

    | id | name | sex |

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

    | 8 | ysb | male |

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

    #应该用truncate清空表,比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它

    mysql> truncate student;

    Query OK, 0 rows affected (0.01 sec)

    mysql> insert into student(name) values('egon');

    Query OK, 1 row affected (0.01 sec)

    mysql> select * from student;

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

    | id | name | sex |

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

    | 1 | egon | male |

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

    1 row in set (0.00 sec)

    """

    以后在创建表的id(数据的唯一标识id、uid、sid)字段的时候

    id int primary key auto_increment

    """

    六、表与表之间建立关系:foreign key(外键)以及级联更新和级联删除

    """

    表与表之间最多只有四种关系

    一对多关系

    在MySQL的关系中没有多对一一说

    一对多 多对一 都叫一对多!!!

    多对多关系

    一对一关系

    没有关系

    """

    一对多关系

    foreign key

    1 一对多表关系 外键字段建在多的一方

    2 在创建表的时候 一定要先建被关联表

    3 在录入数据的时候 也必须先录入被关联表

    以员工表与部门表为例:

    '''

    先站在员工表

    思考一个员工能否对应多个部门(一条员工数据能否对应多条部门数据)

    不能!!!

    (不能直接得出结论 一定要两张表都考虑完全)

    再站在部门表

    思考一个部门能否对应多个员工(一个部门数据能否对应多条员工数据)

    能!!!

    得出结论

    员工表与部门表示单向的一对多

    所以表关系就是一对多

    '''

    一对多关系示例:

    # SQL语句建立表关系

    mysql> create table dep(

    -> id int primary key auto_increment,

    -> dep_name varchar(16),

    -> dep_desc varchar(32)

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> create table emp(

    -> id int primary key auto_increment,

    -> name varchar(16),

    -> gender enum('male','female','others') default 'male',

    -> dep_id int,

    -> foreign key(dep_id) references dep(id)

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> insert into dep(dep_name,dep_desc) values('sb教学部','教书育人'),('外交部','多人外交'),('nb技术部','技术能力有限 部门');

    Query OK, 3 rows affected (0.00 sec)

    Records: 3 Duplicates: 0 Warnings: 0

    mysql> insert into emp(name,dep_id) values('jason',2),('egon',1),('tank',1),('kevin',3);

    Query OK, 4 rows affected (0.01 sec)

    Records: 4 Duplicates: 0 Warnings: 0

    mysql> select * from dep;

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

    | id | dep_name | dep_desc |

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

    | 1 | sb教学部 | 教书育人 |

    | 2 | 外交部 | 多人外交 |

    | 3 | nb技术部 | 技术能力有限部门 |

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

    3 rows in set (0.00 sec)

    mysql> select * from emp;

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

    | id | name | gender | dep_id |

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

    | 1 | jason | male | 2 |

    | 2 | egon | male | 1 |

    | 3 | tank | male | 1 |

    | 4 | kevin | male | 3 |

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

    4 rows in set (0.00 sec)

    mysql>

    依据上面一对多关系示例:修改操作

    # 修改dep表里面的id字段(发现报错,因为加了外键)

    mysql> update dep set id=200 where id=2;

    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`userinfo_db`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`))

    # 删除dep表里面的数据(发现报错,因为加了外键)

    mysql> delete from dep;

    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`userinfo_db`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`))

    mysql>

    #如果想要修改的话部门dep某一个id,要先讲emp员工表中有属于这个部门id的先删掉,或改到其他部门,再去修改dep中的id,例如想要修改部门dep中的id3改为300。

    mysql> select * from emp;

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

    | id | name | gender | dep_id |

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

    | 2 | egon | male | 1 |

    | 4 | kevin | male | 3 |

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

    2 rows in set (0.00 sec)

    mysql> select * from dep;

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

    | id | dep_name | dep_desc |

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

    | 1 | sb教学部 | 教书育人 |

    | 3 | nb技术部 | 技术能力有限部门 |

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

    2 rows in set (0.00 sec)

    mysql> update dep set id=300 where id=3;

    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`userinfo_db`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`))

    mysql> delete from emp where id=4;

    Query OK, 1 row affected (0.01 sec)

    mysql> select * from emp;

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

    | id | name | gender | dep_id |

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

    | 2 | egon | male | 1 |

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

    1 row in set (0.00 sec)

    mysql> update dep set id=300 where id=3;

    Query OK, 1 row affected (0.01 sec)

    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> select * from dep;

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

    | id | dep_name | dep_desc |

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

    | 1 | sb教学部 | 教书育人 |

    | 300 | nb技术部 | 技术能力有限部门 |

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

    2 rows in set (0.00 sec)

    mysql>

    总结:上面修改操作太过繁琐

    真正做到数据之间有关系,级联更新和级联删除

    更新就同步更新

    删除就同步删除

    mysql> create table dep(

    -> id int primary key auto_increment,

    -> dep_name char(16),

    -> dep_desc char(32)

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> create table emp(

    -> id int primary key auto_increment,

    ->name char(16),

    ->gender enum('male','female','others') default 'male',

    ->dep_id int,

    ->foreign key(dep_id) references dep(id)

    -> on update cascade

    -> on delete cascade

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> insert into dep(dep_name,dep_desc) values('sb教学部','教书育人'),('外交部','多人外交'),('nb技术部','技术能力有限 部门');

    Query OK, 3 rows affected (0.01 sec)

    Records: 3 Duplicates: 0 Warnings: 0

    mysql> insert into emp(name,dep_id) values('jason',2),('egon',1),('tank',1),('kevin',3);

    Query OK, 4 rows affected (0.01 sec)

    Records: 4 Duplicates: 0 Warnings: 0

    mysql> select * from dep;

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

    | id | dep_name | dep_desc |

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

    | 1 | sb教学部 | 教书育人 |

    | 2 | 外交部 | 多人外交 |

    | 3 | nb技术部 | 技术能力有限部门 |

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

    3 rows in set (0.00 sec)

    mysql> select * from emp;

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

    | id | name | gender | dep_id |

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

    | 1 | jason | male | 2 |

    | 2 | egon | male | 1 |

    | 3 | tank | male | 1 |

    | 4 | kevin | male | 3 |

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

    4 rows in set (0.00 sec)

    mysql> update dep set id=300 where id=3; #修改dep部门表中的id,emp中会同步更新

    Query OK, 1 row affected (0.00 sec)

    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> select * from dep;

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

    | id | dep_name | dep_desc |

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

    | 1 | sb教学部 | 教书育人 |

    | 2 | 外交部 | 多人外交 |

    | 300 | nb技术部 | 技术能力有限部门 |

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

    3 rows in set (0.00 sec)

    mysql> select * from emp;

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

    | id | name | gender | dep_id |

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

    | 1 | jason | male | 2 |

    | 2 | egon | male | 1 |

    | 3 | tank | male | 1 |

    | 4 | kevin | male | 300 |

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

    4 rows in set (0.00 sec)

    mysql>

    多对多关系(通过建立中间表存放两张表数据之间的关系)

    多对多关系举例:

    如果还是通过一对多的方式建立这两张表(互相一对多想法):

    create table book(

    id int primary key auto_increment,

    title varchar(32),

    price int,

    author_id int,

    foreign key(author_id) references author(id)

    on update cascade # 同步更新

    on delete cascade # 同步删除

    );

    create table author(

    id int primary key auto_increment,

    name varchar(32),

    age int,

    book_id int,

    foreign key(book_id) references book(id)

    on update cascade # 同步更新

    on delete cascade # 同步删除

    );

    """

    #按照上述的方式创建 一个都别想成功!!!

    #因为建立book表时,要先建立被关联表author,建立author表要先建立被关联表book,so,两个表一个也建不成。

    多对多关系,我们通过建立中间表用来存储两张表数据之间的关系

    注意:两个表本身并无关联,两个表和中间表有关联

    mysql> create table book(

    -> id int primary key auto_increment,

    -> title varchar(32),

    -> price int

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> create table author(

    -> id int primary key auto_increment,

    -> name varchar(32),

    -> age int

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> create table book2author(

    -> id int primary key auto_increment,

    -> author_id int,

    -> book_id int,

    -> foreign key(author_id) references author(id)

    -> on update cascade # 同步更新

    -> on delete cascade, # 同步删除,注意这里有两个外键,中间用逗号隔开

    -> foreign key(book_id) references book(id)

    -> on update cascade # 同步更新

    -> on delete cascade # 同步删除

    -> );

    Query OK, 0 rows affected (0.01 sec)

    mysql> insert into book(title,price) values("降龙十八掌",999),("九阴真经",888),("九阳神功",666);

    Query OK, 3 rows affected (0.01 sec)

    Records: 3 Duplicates: 0 Warnings: 0

    mysql> insert into author(name,age) values("egon",23),("tank",19),("jason",18);

    Query OK, 3 rows affected (0.01 sec)

    Records: 3 Duplicates: 0 Warnings: 0

    mysql> insert into book2author(author_id,book_id) values(1,1),(1,2),(2,2),(2,3),(3,3),(3,1);

    Query OK, 6 rows affected (0.01 sec)

    Records: 6 Duplicates: 0 Warnings: 0

    mysql> select * from book;

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

    | id | title | price |

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

    | 1 | 降龙十八掌 | 999 |

    | 2 | 九阴真经 | 888 |

    | 3 | 九阳神功 | 666 |

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

    3 rows in set (0.00 sec)

    mysql> select * from author;

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

    | id | name | age |

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

    | 1 | egon | 23 |

    | 2 | tank | 19 |

    | 3 | jason | 18 |

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

    3 rows in set (0.00 sec)

    mysql> select * from book2author;

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

    | id | author_id | book_id |

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

    | 1 | 1 | 1 |

    | 2 | 1 | 2 |

    | 3 | 2 | 2 |

    | 4 | 2 | 3 |

    | 5 | 3 | 3 |

    | 6 | 3 | 1 |

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

    6 rows in set (0.00 sec)

    mysql> update book set id=100 where id=1; #修改book表中id

    Query OK, 1 row affected (0.01 sec)

    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> select * from book;

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

    | id | title | price |

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

    | 2 | 九阴真经 | 888 |

    | 3 | 九阳神功 | 666 |

    | 100 | 降龙十八掌 | 999 |

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

    3 rows in set (0.00 sec)

    mysql> select * from author;

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

    | id | name | age |

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

    | 1 | egon | 23 |

    | 2 | tank | 19 |

    | 3 | jason | 18 |

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

    3 rows in set (0.00 sec)

    mysql> select * from book2author;

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

    | id | author_id | book_id |

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

    | 1 | 1 | 100 |

    | 2 | 1 | 2 |

    | 3 | 2 | 2 |

    | 4 | 2 | 3 |

    | 5 | 3 | 3 |

    | 6 | 3 | 100 |

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

    6 rows in set (0.00 sec)

    mysql>

    一对一关系

    """

    id name age addr phone hobby email........

    如果一个表的字段特别多 每次查询又不是所有的字段都能用得到

    将表一分为二

    用户表

    用户表

    id name age

    用户详情表

    id addr phone hobby email........

    站在用户表

    一个用户能否对应多个用户详情 不能!!!

    站在详情表

    一个详情能否属于多个用户 不能!!!

    结论:单向的一对多都不成立 那么这个时候两者之间的表关系

    就是一对一

    或者没有关系(好判断)

    客户表和学生表

    在你们报名之前你们是客户端

    报名之后是学生(期间有一些客户不会报名)

    """

    一对一 外键字段建在任意一方都可以 但是推荐你建在查询频率比较高的表中

    #作者详情表

    create table authordetail(

    id int primary key auto_increment,

    phone int,

    addr varchar(64)

    );

    #作者信息表

    create table author(

    id int primary key auto_increment,

    name varchar(32),

    age int,

    authordetail_id int unique, #作者详情id字段为什么要唯一,因为,如果不唯一,那么随便insert一个作者,作者详情都可以互串,不合理。每个作者只能对应一个详情

    foreign key(authordetail_id) references authordetail(id)

    on update cascade # 同步更新

    on delete cascade # 同步删除

    )

    """

    表关系的建立需要用到foreign key

    一对多

    外键字段建在多的一方

    多对多

    自己开设第三张存储

    一对一

    建在任意一方都可以 但是推荐你建在查询频率较高的表中

    判断表之间关系的方式

    换位思考!!!

    员工与部门

    图书与作者

    作者与作者详情

    """

    展开全文
  • 数据库约束六大约束语句

    千次阅读 2020-03-21 20:03:15
    数据库约束六大约束语句 1、非空约束 ① 就是给列赋值的时候值不允许为空 name VARCHAR(20) NOT NULL,--创建...③主键列不能为空 ④每个表都应该有个主键,但只能有一个主键 StudentID int not null primary ke...

    数据库约束六大约束语句

    1、非空约束
    ① 就是给列赋值的时候值不允许为空

    
    name VARCHAR(20) NOT NULL,--创建name列为非空--
    

    2、主键约束

    2.primary key约束 :
    ①约束唯一标识数据库表中的每条记录
    ②主键必须包含唯一的值
    ③主键列不能为空
    ④每个表都应该有个主键,但只能有一个主键

    StudentID int not null primary key        --创建学生编号为主键--
    primary key(Students)                     --创建学生编号为主键--
    primary key(StudentID,Email)              --创建学生ID和Email为联合主键--
    	--为已存在的列创建主键--
    alter table table_name add primary key(column_name)
    	--删除主键约束--
    alter table table_name drop primary key
    	--删除主键约束--
    alter table table_name drop constraint --主键约束名 主键约束名可以使用sp_help查询--
    

    3、唯一值约束

    3.unique 唯一性约束:
    ①约束唯一标识数据库表中的每条记录
    ②unique和primary key都为数据提供了唯一性约束
    ③primary key 拥有自动定义的Unique约束
    ④注意:每个表中只能有一个primary key约束,但是可以有多个Unique约束

    name int unique
    unique(column_name)
    CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)    --添加多个约束--
    alter table table_name add unique(column_name)   --增加表中的约束--
    ALTER TABLE table_name DROP CONSTRAINT 主键名    --删除约束-- 
    

    4、外键约束

    4.foreign key约束:
    ①一个表中的foreign key 指向另一个表的primary key
    ②foreign key约束用于预防破坏表之间连接的动作
    ③foreign key约束也能防止非法数据插入外键列,因为它必须是指向的那个表的值之一

    foreign key (column_name) references 主表名(主键列名)     --创建column_name为主表名的外键--
    column_name int foreign key references 主表名(主键列名)   --创建column_name为主表名的外键--
    alter table table_name 
    	add foreign key (列名) references 主表名(主键列名)         --为已存在的列创建外键--
    alter table table_name drop constraint 外键约束名          --删除外键约束(SQL Server oracle--
    

    5、检查约束
    5.CHECK 约束:
    ①.检查||限制列中输入的值

    sex char(2) CHECK(Ssex='男' or Ssex='女'),					--非男即女--
    StudentID int not null check (StudentID>0) 					--大于0约束--
    Email varchar(50) CHECK(Email LIKE'%@%'),					--必须含有@--
    PID nvarchar(18)  check (len(PID) =15 or len(PID) =18 ),	--身份证号 检查约束 check(len(id)=15 or len(id)=18)--
    alter table table_name 
    	add check(列名>0)         							    --向已有的列加入check约束--
    alter table table_name drop constraint check约束名  			--删除约束--
    

    6、默认值约束
    6.default约束:
    ①.在没有输入值得单元格里插入默认值

    Address varchar(100) default '不详',		-- 地址默认值为不详--
    outtime date default getdate() 				--默认值为当前时间--
    alter table table_name 						--向已有列名中插入默认值-- 
    	add 列名 set default '数值'    
    alter table table_name drop constraint 约束名          --删除默认约束--
    
    展开全文
  • MySQL数据库的五大约束NOT NULL :非空约束,指定某列不能为空;#建表时指定create table t2(id int(10) not null,name varchar(5));#已存在的表增加约束alter table t2 modify name varchar(5) not null;#可以设置...

    MySQL数据库的五大约束

    NOT NULL :非空约束,指定某列不能为空;

    #建表时指定

    create table t2(id int(10) not null,name varchar(5));

    #已存在的表增加约束

    alter table t2 modify name varchar(5) not null;

    #可以设置默认值,即为非空

    alter table t2 constraint test_id default (‘xxx’) for stuname;

    #取消

    alter table t2 modify name varchar(5);

    UNIQUE : 唯一约束,指定某列或者几列组合不能重复

    #创建的时候制定

    create table t3(userid int(10) unique,name varchar(10));

    #已存在的表增加

    alter table t3 add constraint t3_id unique(id)

    #关键字增加唯一约束

    alter table test4 add unique(id,name,age)

    PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录

    #建表时添加

    create table test1(user_id int(10) primary key,name varchar(10));

    #删除约束

    alter table test1 drop primary key;

    #以多列组合创立主键

    create table t4 (id int,name varchar(255),primary key(id,name));

    #已存在的表增加主键

    alter table stu add constraint id primary key (id)

    FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性

    #创建表的时候

    CREATE TABLE `students` (

    `StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,

    `Name` varchar(50) NOT NULL,

    PRIMARY KEY (`StuID`),

    KEY `hello_fk` (`Name`),

    CONSTRAINT `hello_fk` FOREIGN KEY (`Name`) REFERENCES `classes` (`Name`)

    ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8

    #已存在的表增加

    alter table students add constraint mage_stu_class_fk foreign key(classid) references classes(classid);

    CHECK :检查,指定一个布尔表达式,用于指定对应的值必须满足该表达式(mysql不支持check约束)

    MySQL数据库的函数

    内置函数

    字符串型

    #upper转换为大写输出

    MariaDB [hellodb]> select upper(name) from teachers;

    #lower转换为小写输出

    MariaDB [hellodb]> select lower(name) from teachers;

    #insert替换函数(列名,从第几位开始,替换几位,替换的内容)

    MariaDB [hellodb]> select name,insert(phone,4,4,'****') phone from students;

    #substr从第5位开始取,往后一共取3位

    MariaDB [hellodb]> select substr(name,5,3) phone from students;

    #length显示字段的长度

    MariaDB [hellodb]> select length(name) phone from students;

    #CONCAT(s1,s2...sn) 字符串 s1,s2 等多个字符串合并为一个字符串

    MariaDB [hellodb]> SELECT CONCAT("hello ", "mariadb ", "mysql ", "orcale") AS ConcatenatedString;

    #FIELD(s,s1,s2...) 返回第一个字符串 s 在字符串列表(s1,s2...)中的位置

    MariaDB [hellodb]> SELECT FIELD("c", "a", "b", "c", "d", "e");

    #LEFT(s,n) 返回字符串 s 的前 n 个字符

    MariaDB [hellodb]> SELECT LEFT('abcde',2);

    #REPEAT(s,n) 将字符串 s 重复 n 次

    MariaDB [hellodb]> SELECT REPEAT('mariadb ',3);

    #SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串

    MariaDB [hellodb]> SELECT SUBSTRING("mariadb", 2, 3) AS ExtractString;

    日期函数

    #显示当前的时间

    MariaDB [hellodb]> select now();

    #DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数

    MariaDB [hellodb]> SELECT DATEDIFF('2001-03-01','2001-02-02');

    #DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d

    MariaDB [hellodb]> SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r');

    #DAY(d) 返回日期值 d 的日期部分

    MariaDB [hellodb]> SELECT DAY("2017-06-15");

    #DAYNAME(d) 返回日期 d 是星期几

    MariaDB [hellodb]> SELECT DAYNAME('2011-11-11 11:11:11');

    #DAYOFMONTH(d) 计算日期 d 是本月的第几天

    MariaDB [hellodb]> SELECT DAYOFMONTH('2011-11-11 11:11:11');

    #WEEK(d) 计算日期 d 是本年的第几个星期

    MariaDB [hellodb]> SELECT WEEK('2011-11-11 11:11:11');

    数字函数

    #取绝对值

    MariaDB [hellodb]> select abs(-20);

    #取模

    MariaDB [hellodb]> select mod(11,3);

    #取不小于X的最小整数

    MariaDB [hellodb]> select ceil(9.2);

    #取不大于X的最大整数

    MariaDB [hellodb]> select floor(3.6);

    #n DIV m 整除,n 为被除数,m 为除数

    MariaDB [hellodb]> SELECT 10 DIV 5;

    #GREATEST(expr1, expr2, expr3, ...) 返回列表中的最大值

    MariaDB [hellodb]> SELECT GREATEST(3, 12, 34, 8, 25);

    MariaDB [hellodb]> SELECT GREATEST("mysql", "mariadb", "linux");

    自定义函数

    #查看所有的函数数列

    MariaDB [hellodb]> show function status\G;

    #创建无参的函数(在centos7支持,6不支持)

    MariaDB [test]> CREATE FUNCTION simple() RETURNS VARCHAR(20) RETURN "Hello World!";

    #调用函数

    MariaDB [test]> select simple();

    #查看指定自定义函数的定义

    MariaDB [mysql]> show create function simple\G;

    #创建带参的函数

    MariaDB [test]> delimiter // #为了方便书写把结束符重新定义

    MariaDB [test]> create function addtwo(x int unsigned,y int unsigned) returns int begin declare a,b int unsigned; set a=x,b=y; return a+b; end//

    #删除自定义函数

    MariaDB [test]> drop function simpleFun;

    MySQL数据库的视图

    #创建视图

    MariaDB [hellodb]> create view viewname as select * from teachers;

    #查询指定视图

    MariaDB [hellodb]> select * from viewname;

    #查看所有的视图信息

    select * from information_schema.views\G;

    #查看视图的结构

    desc viewname

    #删除视图

    MariaDB [hellodb]> drop view viewname;

    不支持做视图的语句

    select 子句中的distninct

    select 子句中的包含函数

    select 子句中包含group by

    select 子句中包含union

    使用视图的好处

    使用视图,可以定制用户数据,聚焦特定的数据。

    例如:有张表里面有好多个属性:编号、学号、姓名、性别,生日、手机。。。等等,而且这张表会被经常被使用,但是你只想使用表里的两三个属性,这个时候你可以把你需要的属性建立成视图,从视图里查询即可。

    使用视图,可以简化数据操作。

    例如:你要经常性的写多表连接,嵌套查询,这些语句很长,每次书写很费时间,这个时候你就可以把这些长句子写进视图,下次直接在这个试图查询即可

    使用视图,基表中的数据就有了一定的安全性。

    例如:视图实际上是虚拟的,真实不存在的,假如银行的数据表,不可能给员工把真正表给他们,而是做一个原表的视图,这样既保证了员工的误操作带来的损失,又可以防止对数据表恶意修改

    可以合并分离的数据,创建分区视图。

    例如:可以把多条数据用union合成一个视图

    MySQL数据库的索引

    使用索引的优点:

    所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引

    大大加快数据的查询速度

    使用索引的缺点:

    创索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加

    索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

    当对表中的数据进行增、删除、修改时,索引也需要动态的维护,降低了数据的维护速度

    索引的使用原则:

    对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引

    数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果

    在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引

    #创建索引

    MariaDB [m33student]> create index age_index on student(phone);

    #查看索引

    MariaDB [m33student]> show indexes from student\G;

    #创建唯一索引

    create table ti(

    id int not null,

    name char(30) not null,

    unique index uniqidx(id)

    );#对id字段使用了索引,并且索引名字为UniqIdx

    #创建普通索引

    create table book(

    bookid int not null,

    bookname varchar(255) not null,

    authors varchar(255) not null,

    info varchar(255) null ,

    comment varchar(255) null,

    year YEAR not null,

    index(year) #对属性年创建索引

    );

    #修改表结构(添加索引)

    MariaDB [hellodb]> alter table teachers add index index_name(name);

    #删除索引

    MariaDB [hellodb]> drop index [indexn_ame] on teachers;

    #显示索引信息

    MariaDB [hellodb]> show index from teachers\G;

    MySQL数据库的触发器

    触发器是一个特殊的存储过程,不同的是存储过程要用来调用,而触发器不需要调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。

    简单格式:

    create trigger trigger_name

    trigger_time

    trigger_event on table_name

    trigger_stmt

    for each row(行级监视,mysql固定写法,oracle不同)

    begin

    sql语句集........(触发器执行动作,分号结尾)

    end;

    trigger_name:触发器的名称

    trigger_time:{ BEFORE | AFTER },表示在事件之前或之后触发

    trigger event::{ INSERT |UPDATE | DELETE },触发的具体事件

    trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。

    实验:创建一个触发器,制定一张表,对表增加记录的时候count加1,则反之

    #创建student_info表

    MariaDB [hellodb]> create table student_info(stu_id int(11) primary key auto_increment,stu_name varchar(255) default null);

    #创建一张计数表

    MariaDB [hellodb]> create table student_count( student_count int(11) default 0);

    #使计数表置为0

    MariaDB [hellodb]> insert into student_count values (0);

    #创建触发器,给student_info表增加记录,计数表加一

    MariaDB [hellodb]> create trigger trigger_student_count_insert after insert on student_info for each row update student_count set student_count=student_count+1;

    #创建触发器,给student_info表删除记录,计数表减一

    MariaDB [hellodb]> create trigger trigger_student_count_delete after delete on student_info for each row update student_count set student_count=student_count-1;

    #开始测试,添加记录

    MariaDB [hellodb]> insert into student_info (stu_id,stu_name) values (123,'abc');

    #会看到计数表为1

    MariaDB [hellodb]> select * from student_count;

    #开始测试,删除记录

    MariaDB [hellodb]> delete from student_info where stu_id=123;

    #会看到计数表为0

    MariaDB [hellodb]> select * from student_count;

    MySQL数据库的用户管理

    创建用户

    MariaDB [hellodb]> create user name@host identified by 'passwd';

    #创建全部权限的用户

    MariaDB [hellodb]> grant all on *.* to name@host identified by 'passwd';

    修改密码

    #第一种直接利用password函数修改

    MariaDB [hellodb]>set password for name@'host'=password("newpasswd");

    #第二种更新用户表

    MariaDB [hellodb]> update mysql.user password=password("passwd") where host ='localhost'

    #第三种关闭MySQL密码验证功能,然后第一种第二种

    /etc/my.cnf 关闭密码认证 skip_grant_tables

    用户授权

    #给用户授权使用库,表,视图

    MariaDB [hellodb]> grant all on database.(database|table|view) to name@host ;

    #给用户授权使用命令select,insert

    MariaDB [hellodb]> grant select,insert on database.(database|table|view) to name@host;

    #给用户授权使用表或视图里的属性

    MariaDB [hellodb]> grant select(属性) on database.(database|table|view) to name@host;

    查看授权内容

    MariaDB [hellodb]>show grant for name@host;

    回收授权

    MariaDB [hellodb]>revoke commod|all on database.(database|table|view) from name@host;

    展开全文
  • MYSQL--数据库约束

    千次阅读 2021-04-05 19:14:50
    文章目录1.数据库约束1.1约束类型1.2 null约束1.3 unique:唯一...创建表的时候,我们可以指定某些列不能为空。 create table student( id int not null, sno int, name varchar(20) ); 此时插入数据时,若在not nul
  • 主键约束(primary key)主键约束要求主键列的数据唯一,并且不能为空。主键分为两种类型:单字段主键和多字段联合主键。1.单字段主键写法创建列表数据时create table a(​ name char(9) primary key,​ age int);创建...
  • NOT NULL 指示某列不能储存NULL值,即某列不为空; 使用: 如果在增加数据时,第一列为NULL,就会报错 UNIQUE :保证某列的每行必须有唯一的值; 这时表中已经有一个name为李数据信息,倘若此时再添加一个name为...
  • MYSQL数据库约束类型

    2019-12-23 16:57:58
    主键约束要求主键列的数据唯一,并且不能为空。主键分为两种类型:单字段主键和多字段联合主键。 1.单字段主键 写法 创建列表数据时 create table a( ​ name char(9) primary key, ​ age int ); 创建列表数据...
  • 为了防止不符合规范的数据进入...#数据约束#五种完整性约束:#NOT NULL :非空约束,指定某列不能为空;#UNIQUE : 唯一约束,指定某列或者几列组合不能重复#PRIMARY KEY :主键,指定该列的值可以唯一地标识该列...
  • 主键约束(primary key)主键约束要求主键列的数据唯一,并且不能为空。主键分为两种类型:单字段主键和多字段联合主键。1.单字段主键写法创建列表数据时create table a(​ name char(9) primary key,​ age int);创建...
  • 2.数据库约束

    2016-01-23 15:32:00
    约束: 在表上强制执行的数据校验规则,保证数据库里数据的完整性。当表中数据相互依赖时,保证相关数据不被删除...NOT NULL:非空约束,指定某列不能为空; UNIQUE:唯一约束,指定某列或几列组合的数据不能重复;...
  • 数据库约束

    2019-11-01 23:19:05
    数据库约束 约束类型: NOT NULL:不为空 UNIQUE:唯一,不能重复 DEFAULT:默认值 PRIMARY KEY:主键,既要满足:NOT NULL和...创建表时,可以制定某列不能为空: create table student( -> sn int not null, ...
  • 非空约束:not null,字段值不能为空 自增长约束:increment,自增字段的数据类型一般是整数型的,通常配合主键来使用,自动增加。 唯一约束:nuique ,字段值不能重复,但是这个约束对于字段值为null,没有约束,也就是...
  • SQLite数据库约束详解

    2016-05-23 13:04:58
    一、约束 Constraints 在SQLite数据库中存储数据的时候,有一些数据有明显的约束条件。 比如一所学校关于教师的数据表,其中的字段列可能有如下约束: ...姓名 - 不能为空。每个人都有名字嘛. 员工号 -...
  • mysql数据库约束条件

    2020-07-08 08:34:22
    主键列数据唯一,且数据不能为空。 主键的作用;能够唯一标识表中的一条记录列,并且可以结合外键来定义不同数据表之间的关系,还可以查询速度 主键语法分两种 1字段名 数据类型 primary key, 2定义好字段名后,...
  • 约束是保证用户对数据库所做的修改不会破坏数据的一致性,是保护数据正确性和相容性的一种手段,例如数据长度最大100,不能为空等,如果不满足条件,则数据插不进表中。 mysql约束如下: 1、非空约束(NK): ...
  • 数据库约束

    2020-03-30 16:53:59
    约束就是指对插入数据的各种限制,例如:人员的姓名不能为空,人的年龄只能在0~150岁之间。约束可以对数据库中的数据进行保护。 约束可以在建表的时候直接声明,也可以为已建好的表添加约束。 (2、数据完整性 存储早...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 790
精华内容 316
关键字:

数据库约束不能为空