zoukankan      html  css  js  c++  java
  • 3.约束及修改数据表

    (一) 约束

    1. 约束保证数据的完整性和一致性。

    2. 约束分为表级约束列级约束。

    3. 约束类型包括:

    • NOT NULL(非空约束)

    • PRIMARY KEY(主键约束)

    • UNIQUE KEY(唯一约束)

    • DEFAULT(默认约束)

    • FOREIGN KEY(外键约束)

    FOREIGN KEY

    外键约束的作用:

    • 保证数据一致性,完整性

    • 实现一对一或一对多关系

    1.外键约束的要求

    1. 父表和子表必须使用相同的存储引擎,而且禁止使用临时表。

    2. 数据表的存储引擎只能是InnoDB

    3. 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;字符的长度可以不同

    4. 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL自动创建。

    编辑修改数据表的默认存储引擎

    MySQL配置文件

    default-storage-engine=INNODB

    搞清楚父表和子表

    2.外键约束的参照操作

    1. CASCADE:从父表删除或更新且自动删除或更新子表中的匹配

    2. SET NULL:从父表中删除或更新行,并设置子表中的外键列为NULL。若使用该项,必须保证子表列没有指定为NOT NULL

    3. RESTRICT:拒绝对父表的删除或更新操作

    4. NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

    CASCADE:

    ==实际开发中很少使用物理外键约束,使用逻辑的外键约束==

    3.表级约束与列级约束

    对一个数据列建立的约束,称为列级约束。

    对个数据列建立的约束,称为表级约束。

    列级约束既可以在列定义时声明,也可以在列定义后声明。

    表级约束,只能在列定义后声明。

    ==实际开发中列级约束用的较多,表级约束很少在用。==

    (二)数据表的修改

    数据表的修改无非就是列的删除和添加,约束的删除和添加等等。

    1.添加删除列

    添加单列

    ALTER TABLE tbl_name ADD[COLUMN] col_name column_definition [FIRST | AFTER col_name]

    默认放在所有列后面

    可以指定顺序

     

     

    添加多列

    ALTER TABLE tbl_name ADD [COLUMN](col_name column_name,..)

    无法指定数据字段的顺序

    删除列

    ALTER TABLE tbl_name DROP [COLUMN] col_name

    删除多列

    2.添加约束

    ALTER TABLE tbl_name ADD [CONSTEAINT [symbol]] PRIMARY KEY[index_type](index_col_name,...)

    添加主键约束

    添加唯一约束

    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type](index_col_name,...)

    添加外键约束

    添加/删除默认约束

    ALTER TABLE tbl_name ALTER [COLOUMN] col_name {SET DEFAULT literal |DROP DEFAULT}

    删除默认值

    3.删除约束

    删除主键约束

    ALTER TABLE tbl_name DROP PRIMARY KEY

    删除唯一约束

    ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
    

    执行之前有3个约束

    执行之后有两个约束

    删除外键约束

    ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
    

    删除外键约束必须要知道外键名称

    SHOW CREATE TABLE users2;
    ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;
    

    4.修改列定义和更名数据表

    修改列定义

    ALTER TAble tbl_name MODIFY [COLUMN] col_name column_defination [FIRST|AFTER col_name]
    
    

    ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;
    

    ALTER TABLE users2 MODIFY id TINYINT UNSIGNED NOT NULL;
    

    修改数据类型有时会引起数据表数据的丢失问题要慎用!

    修改列名称

    ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
    

     

     

    ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;
    

    数据表更名

    方法1
    ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
    
    方法2
    RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2] ...
    
    

     

    _

     ALTER TABLE users2 RENAME users3;
    

    RENAME TABLE users3 TO users2;
    

     

     

    不要随意更改数据表和数据列的名字,存储过程禁用

    总结

     

  • 相关阅读:
    centos安装vim
    thrift学习之二----学习资料积累
    thrift学习之一-------介绍
    组合模式
    一致性哈希算法(consistent hashing)
    php配置php-fpm启动参数及配置详解
    error while loading shared libraries的解決方法
    数据结构之二叉树
    768、最多能完成排序的块(贪心算法)
    VS code 配置C++编译环境
  • 原文地址:https://www.cnblogs.com/kosinggit/p/10686435.html
Copyright © 2011-2022 走看看