数据库(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 into 表 select * from 原表;

二.表约束(Constraints)

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

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

SQL CREATE TABLE + CONSTRAINT 语法:

CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
--   列名       数据类型         约束名
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);

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

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

1.NULL约束

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

--创建表时:
CREATE TABLE tb_student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(18) NOT NULL
)AUTO_INCREMENT=1;

--修改表时:
ALTER TABLE tb_student MODIFY NAME VARCHAR(18) NOT NULL;

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

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

2.UNIQUE约束

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

--创建表时:
CREATE TABLE tb_student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(18) UNIQUE NOT NULL
);

--修改表时:
ALTER TABLE tb_student ADD UNIQUE (NAME)

3.PRIMARY KEY约束

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

--创建表时:
CREATE TABLE tb_student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(18)
);

--修改表时:
ALTER TABLE tb_student ADD PRIMARY KEY (id)

4.FOREIGN KEY约束

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

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

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

--创建表时:
CREATE TABLE tb_dept(
    dept_id INT PRIMARY KEY,
    NAME VARCHAR(18),
    description VARCHAR(255)
);

CREATE TABLE tb_employee(
    employee_id INT PRIMARY KEY,
    NAME VARCHAR(18),
    gender VARCHAR(10),
    dept_id INT REFERENCES tb_dept(dept_id),
    address VARCHAR(255)
);

--修改表时:
ALTER TABLE tb_employee
ADD FOREIGN KEY (dept_id)
REFERENCES Persons(dept_id)

5.CHECK约束

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

--创建表时:
create table t3(
    id int, 
    age int check(age > 18),
    gender char(1) check(gender in ('M','F'))
);

--修改表时:
ALTER TABLE t3 ADD CONSTRAINT chk_t3 CHECK (age > 18 AND gender in ('M','F'))

6.DEFAULT约束

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

--创建表时:
CREATE TABLE user(  
  sex TINYINT(1) DEFAULT 1 COMMENT '性别 1男 0女',--默认sex值为1
);

--修改表时:
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 外键名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值