mysql学习笔记(二)


此学习笔记根据慕课网课程“与MYSQL的零距离接触”学习总结

3.约束以及修改数据表

3-1 外键约束的要求解析

外键约束:保证数据一致性、完整性,实现一对一或一对多关系。

FOREIGN KEY (外键列名称) REFERENCES 父表(参照列名称);

外键约束的要求:

  1. 父表和子表必须使用相同的存储引擎,而且禁止使用临时表
  2. 数据表的存储引擎只能为InnoDB。
  3. 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
  4. 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
显示索引:SHOW INDEXES FROM 表名;
    或者:SHOW INDEXES FROM 表名\G;(以网格的形式来呈现)
删除索引:ALEER TABLE tbl_name DROP INDEX 索引名称;

3-2 外键约束的参照操作

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

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

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

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

语法结构:FOREIGN KEY (外键列名称) REFERENCES 父表(参照列名称) ON DELETE CASCADE;

mysql> CREATE TABLE users1(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(10) NOT NULL,
-> pid SMALLINT UNSIGNED,
-> FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
-> );
Query OK, 0 rows affected (0.53 sec)

3-3 表级约束与列级约束

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

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

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

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

3-4 添加/删除列

添加单列:

ALTER TABLE tbl_name ADD col_name column_definition FIRST | AFTER col_name;
ALTER TABLE 表名称 ADD 列名称 列定义 FIRST | AFTER 列名称;

FIRST将新添加的这一列置于所有列最前面

AFTER col_name 将新添加的列置于你指定列的后方

如果省略FIRST | AFTER col_name,则置于所有列之后

添加多列:

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

添加多列时不能指定位置关系,只能在原来数据列的下方。


删除单列:

ALTER TABLE tbl_name DROP col_name;

删除多列:

ALTER TABLE tbl_name DROP col_name1,DROP col_name2;

3-5 添加/删除约束 (注:col_name:列名称)

添加/删除主键约束:

ALTER TABLE tbl_name ADD PRIMARY KEY (col_name);
ALTER TABLE tbl_name DROP PRIMARY KEY;

添加/删除唯一约束:

ALTER TABLE tbl_name ADD UNIQUE (col_name);
ALEER TABLE tbl_name DROP INDEX 索引名称;  (也可以用于删除其他索引)

添加/删除外键约束:

ALTER TABLE tbl_name ADD FOREIGN KEY (外键列名称) REFERENCES 父表(参照列名称);
ALTER TABLE tbl_name DROP FOREIGN KEY 约束名称; (外键约束名称通过SHOW CREATE TABLE tbl_name 查看)

例如:| users2 | CREATE TABLE `users2` (
  `username` varchar(10) NOT NULL,
  `pid` smallint(5) unsigned DEFAULT NULL,
  `id` smallint(5) unsigned NOT NULL,
  `age` tinyint(3) unsigned NOT NULL,
  KEY `pid` (`pid`),
  CONSTRAINT `users2_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `provinces` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
mysql> ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;

添加/删除默认约束:

ALTER TABLE tbl_name ALTER col_name SET DEFAULT 默认值;
ALTER TABLE tbl_name ALTER col_name DROP DEFAULT;

3-6 修改列定义和更名数据表

修改列定义:

ALTER TABLE tbl_name MODIFY col_name column_definition FIEST | AFTER col_name;
ALTER TABLE 表名称 MODIFY列名称 列定义 FIRST | AFTER 列名称;

修改列名称:(除了修改列定义还可以修改列名称)

ALTER TABLE tbl_name CHANGE old_col_name new_col_name column_definition FIRST | AFTER col_name;
ALTER TABLE tbl_name CHANGE 旧的列名称 新的类名称 列定义 FIRST | AFTER col_name;

数据表更名:

方法1:

ALTER TABLE tbl_name RENAME new_tbl_name;

方法2:

RENAME TABLE tbl_name TO new_tbl_name;

总结

约束:

按功能划为NOT NULL(非空约束)
PRIMARY KEY(主键约束)
UNIQUE KEY(唯一约束)
DEFAULT(默认约束)
FOREIGN KEY(外键约束)
按数据列的数目划为表级约束
列级约束

修改数据表:

针对字段的操作:添加/删除字段、修改列定义、修改列名称等

针对约束的操作:添加/删除各种约束

针对数据表的操作:数据表更名(两种方式)


未完待续。。。


  转载请注明: My blog mysql学习笔记(二)

  目录