当前位置:   article > 正文

数据库(MySQL)中复制表结构及表约束(Constraints)

复制表结构

目录

一.复制表的结构

二.表约束(Constraints)

1.NULL约束

2.UNIQUE约束

3.PRIMARY KEY约束

4.FOREIGN KEY约束

5.CHECK约束

6.DEFAULT约束

三.删除表的约束


一.复制表的结构

方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。

create table 新表名 like 源表

方法二:在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。

create table 新表名 select * from 源表

方法三:如果已经存在一张机构一致的表,复制数据

insert intoselect * from 原表;

二.表约束(Constraints)

约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

SQL CREATE TABLE + CONSTRAINT 语法:

  1. CREATE TABLE table_name
  2. (
  3. column_name1 data_type(size) constraint_name,
  4. -- 列名 数据类型 约束名
  5. column_name2 data_type(size) constraint_name,
  6. column_name3 data_type(size) constraint_name,
  7. ....
  8. );

大部分数据库支持下面约束: :

  • NOT NULL(非空):指示某列不能存储 NULL 值。
  • UNIQUE(唯一键):保证某列的每行必须有唯一的值。
  • PRIMARY KEY(主键):NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY(外键):保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK(检查):保证列中的值符合指定的条件。
  • DEFAULT(默认值):规定没有给列赋值时的默认值。

1.NULL约束

列级约束,只能使用列级约束语法定义。确保字段值不允许为空,只能在字段级定义

  1. --创建表时:
  2. CREATE TABLE tb_student(
  3.     id INT PRIMARY KEY AUTO_INCREMENT,
  4.     NAME VARCHAR(18) NOT NULL
  5. )AUTO_INCREMENT=1;
  6. --修改表时:
  7. ALTER TABLE tb_student MODIFY NAME VARCHAR18NOT NULL;

注:所有数据类型的值都可以是NULL;空字符串不等于NULL;0也不等于NULL。

auto_increment :自动增长,为新的行产生唯一的标识, 一个表只能有一个auto_increment,且该属性必须为主键的一部分。auto_increment的属性可以是任何整数类型

2.UNIQUE约束

唯一性约束条件确保所在的字段或者字段组合不出现重复值;唯一性约束条件的字段允许出现多个NULL同一张表内可建多个唯一约束;唯一约束可由多列组合而成;建唯一约束时MySQL会为之建立对应的索引。如果不给唯一约束起名,该唯一约束默认与列名相同。

  1. --创建表时:
  2. CREATE TABLE tb_student(
  3.     id INT PRIMARY KEY AUTO_INCREMENT,
  4.     NAME VARCHAR(18) UNIQUE NOT NULL
  5. );
  6. --修改表时:
  7. ALTER TABLE tb_student ADD UNIQUE (NAME)

3.PRIMARY KEY约束

不能有NULL值;主键从功能上看相当于非空且唯一;一个表中只允许一个主键;主键是表中唯一确定一行数据的字段;删除表的约束;自动增长和默认值;存储引擎;主键字段可以是单字段或者是多字段的组合;当建立主键约束时,MySQL为主键创建对应的索引;主键约束名总为PRIMARY。

  1. --创建表时:
  2. CREATE TABLE tb_student(
  3.     id INT PRIMARY KEY AUTO_INCREMENT,
  4.     NAME VARCHAR(18)
  5. );
  6. --修改表时:
  7. ALTER TABLE tb_student ADD PRIMARY KEY (id)

4.FOREIGN KEY约束

外键是构建于一个表的两个字段或者两个表的两个字段之间的关系;

外键确保了相关的两个字段的两个关系:1.子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。2.当主表的记录被子表参照时,主表记录不允许被删除。

外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录。
    
格式FOREIGN KEY (外键列名)REFERENCES 主表(参照列)

  1. --创建表时:
  2. CREATE TABLE tb_dept(
  3.     dept_id INT PRIMARY KEY,
  4.     NAME VARCHAR(18),
  5.     description VARCHAR(255)
  6. );
  7. CREATE TABLE tb_employee(
  8.     employee_id INT PRIMARY KEY,
  9.     NAME VARCHAR(18),
  10.     gender VARCHAR(10),
  11.     dept_id INT REFERENCES tb_dept(dept_id),
  12.     address VARCHAR(255)
  13. );
  14. --修改表时:
  15. ALTER TABLE tb_employee
  16. ADD FOREIGN KEY (dept_id)
  17. REFERENCES Persons(dept_id)

5.CHECK约束

注意检查约束在8.0之前,MySQL默认但不会强制的遵循check约束(写不报错,但是不生效,需要通触发器完成),8之后就开始正式支持这个约束了。

  1. --创建表时:
  2. create table t3(
  3.     id int
  4.     age int check(age > 18),
  5.     gender char(1) check(gender in ('M','F'))
  6. );
  7. --修改表时:
  8. ALTER TABLE t3 ADD CONSTRAINT chk_t3 CHECK (age > 18 AND gender in ('M','F'))

6.DEFAULT约束

可以使用default关键字设置每一个字段的默认值。

  1. --创建表时:
  2. CREATE TABLE user(  
  3.   sex TINYINT(1) DEFAULT 1 COMMENT '性别 1男 0女',--默认sex值为1
  4. );
  5. --修改表时:
  6. ALTER TABLE user ALTER sex SET DEFAULT '1'

三.删除表的约束

删除NOT NULL约束:
 alter table 表名 modify 列名 类型;
删除UNIQUE约束:
 alter table 表名 drop index 惟一约束名;
删除PRIMARY KEY约束:
alter table 表名 drop primary key;
删除FOREIGN KEY约束:
alter table 表名 drop foreign key 外键名;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/485714
推荐阅读
相关标签
  

闽ICP备14008679号