约束和修改数据表

来源:互联网 发布:两位数相乘最快算法 编辑:程序博客网 时间:2024/04/27 19:26

约束

  • 保证数据的完整性和一致性
  • 约束分为表级约束和列级约束
  • 约束类型包括:
    NOT NULL
    PAIMARY KEY
    UNIQUE KEY
    DEFAULT
    FOREIGN KEY

外键约束(FOREIGN KEY):
作用:保证数据的一致性、完整性,实现一对一或一对多关系
要求:
1.父表和字表必须使用相同的存储引擎,禁止使用临时表
2.数据表的存储引擎只能是InnoDB
3.外键列和参照列必须有相似的数据类型,其中数字的长度和符号位必须相同,字符的长度可以不同
4.外键列和参照列必须创建索引,参照列没有索引,MySQL会自动创建索引

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

# my.ini(配置文件)default-storage-engine=INNODB

外键约束的参照操作

1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL,如果使用该选项,必须保证子表列没有指定NOT NULL
3.RESTRICT:拒绝对父表的删除和更新操作
4.NO ACTION:标准的SQL关键字,在MySQL中和RESTRICT相同

表级和列级约束:

一个数据列建立的约束,称为列级约束(常用)
多个数据列建立的约束,称为表级约束

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

NOT NULL和DEFAULT只存在列级约束

修改数据表

添加单列:

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

添加多列:

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

区别
1.添加单列的时候列不需要添加小括号
2.添加单列的时候可以指定位置关系,多列只能在原数据表的下方

删除列

单列:

ALTER TABLE tbl_name DROP [COLUMN] col_name

多列:

ALTER TABLE tbl_name DROP [COLUMN], DROP [COLUMN],....

也可以同时删除一列并增加另一列,之间用逗号连接

添加约束

添加主键约束:

ALTER TABLE tbl_name ADD [CONSTRAINT [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 ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name]

添加或删除默认约束

ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal}

删除主键约束:

ALTER TABLE tbl_name DROP PRIMARY KEY

因为每个数据表有且只有一个主键所以不用指定名称

删除唯一约束:

ALTER TABLE tbl_name DROP {INDEX|KEY} index_name

显示表中索引:

SHOW INDEXES FROM tbl_name

删除外键约束:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

修改列

修改列定义:

ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FITST|AFTER col_name]

注:由大类型改到小类型有可能会导致数据的丢失

修改列名称(和定义):

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

修改数据表名称:

方法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]...
0 0