数据约束的分类:

————————————————————————————————————————————————————

外键约束的要求解析

//在my文件中的这句话代表着搜索引擎,如果不是的就需要技能型更改。然后重启。my文件存在于我的电脑中的mysql文件夹里。
# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
root@127.0.0.1 t2>CREATE TABLE province(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(20) NOT NULL
-> );
Query OK, 0 rows affected (0.13 sec) root@127.0.0.1 t2>SHOW CREATE TABLE province;
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| province | CREATE TABLE `province` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec) root@127.0.0.1 t2>CREATE TABLE aname(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(10) NOT NULL,
-> pid BIGINT ,
-> FOREIGN KEY(pid) REFERENCES province(id)
-> );
ERROR 1005 (HY000): Can't create table 't2.aname' (errno: 150)
root@127.0.0.1 t2>CREATE TABLE aname(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(10) NOT NULL,
-> pid SMALLINT UNSIGNED,
-> FOREIGN KEY(pid) REFERENCES province(id)
-> );
Query OK, 0 rows affected (0.23 sec)
root@127.0.0.1 t2>SHOW INDEXES FROM province\G;
*************************** 1. row ***************************
Table: province
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.10 sec) ERROR:
No query specified root@127.0.0.1 t2>SHOW INDEXES FROM aname\G;
*************************** 1. row ***************************
Table: aname
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row ***************************
Table: aname
Non_unique: 1
Key_name: pid
Seq_in_index: 1
Column_name: pid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
2 rows in set (0.00 sec) ERROR:
No query specified

——————————————————————————————————————————————————————————————————

外键约束的参照操作

root@127.0.0.1 t2>CREATE TABLE aname1(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(10) NOT NULL,
-> pid SMALLINT UNSIGNED,
-> FOREIGN KEY(pid) REFERENCES province(id) ON DELETE CASCADE
-> );
Query OK, 0 rows affected (0.23 sec) root@127.0.0.1 t2>SHOW CREATE TABLE aname1;
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| aname1 | CREATE TABLE `aname1` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(10) NOT NULL,
`pid` smallint(5) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `pid` (`pid`),
CONSTRAINT `aname1_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `province` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
root@127.0.0.1 t2>INSERT province(username) VALUES('A');
Query OK, 1 row affected (0.16 sec) root@127.0.0.1 t2>INSERT province(username) VALUES('B');
Query OK, 1 row affected (0.14 sec) root@127.0.0.1 t2>INSERT province(username) VALUES('C');
Query OK, 1 row affected (0.13 sec) root@127.0.0.1 t2>SELECT * FROM procvince;
ERROR 1146 (42S02): Table 't2.procvince' doesn't exist
root@127.0.0.1 t2>SELECT * FROM province;
+----+----------+
| id | username |
+----+----------+
| 1 | A |
| 2 | B |
| 3 | C |
+----+----------+
3 rows in set (0.00 sec) root@127.0.0.1 t2>INSERT aname1(username,pid) VALUES('D',3);
Query OK, 1 row affected (0.16 sec) root@127.0.0.1 t2>INSERT aname1(username,pid) VALUES('E',1);
Query OK, 1 row affected (0.07 sec) root@127.0.0.1 t2>INSERT aname1(username,pid) VALUES('E',t);
ERROR 1054 (42S22): Unknown column 't' in 'field list'
root@127.0.0.1 t2>INSERT aname1(username,pid) VALUES('F',7);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`t2`.`aname1`, CONSTRAINT `aname1_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `province` (`id`) ON DELETE CASCADE)
root@127.0.0.1 t2>INSERT aname1(username,pid) VALUES('F',2);
Query OK, 1 row affected (0.05 sec) root@127.0.0.1 t2>SELECT * FROM province;
+----+----------+
| id | username |
+----+----------+
| 1 | A |
| 2 | B |
| 3 | C |
+----+----------+
3 rows in set (0.00 sec) root@127.0.0.1 t2>SELECT * FROM aname1;
+----+----------+------+
| id | username | pid |
+----+----------+------+
| 1 | D | 3 |
| 2 | E | 1 |
| 4 | F | 2 |
+----+----------+------+
3 rows in set (0.00 sec) root@127.0.0.1 t2>DELETE FROM province where id = 3;
Query OK, 1 row affected (0.20 sec) root@127.0.0.1 t2>SELECT * FROM province;
+----+----------+
| id | username |
+----+----------+
| 1 | A |
| 2 | B |
+----+----------+
2 rows in set (0.00 sec) root@127.0.0.1 t2>SELECT * FROM aname1;
+----+----------+------+
| id | username | pid |
+----+----------+------+
| 2 | E | 1 |
| 4 | F | 2 |
+----+----------+------+
2 rows in set (0.00 sec)

——————————————————————————————————————————————————————————————————

表级约束以及列级约束

在实际开发的时候我们使用列级约束的较多,表级约束较少。default和not null只存在列级约束,其他的都存在表级约束

————————————————————————————————————————————————————————————

修改数据表增加和删除列

添加(删除)列 alter table +表明drop+列名
添加(删除)多列 alter table +表明 【drop+列名,drop+列名】;(在添加单列的时候所有的列不需要指明小括号,在指明多列的时候,我们不能指定位子)

添加单列alert table tbl_name add +列名字+column_definition [firstafter col_name]

root@127.0.0.1 t2>ALTER TABLE aname1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;
Query OK, 2 rows affected (0.34 sec)
Records: 2 Duplicates: 0 Warnings: 0 root@127.0.0.1 t2>SHOW COLUMNS FROM aname1;
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(10) | NO | | NULL | |
| pid | smallint(5) unsigned | YES | MUL | NULL | |
| age | tinyint(3) unsigned | NO | | 10 | |
+----------+----------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
root@127.0.0.1 t2>ALTER TABLE aname1 ADD ab TINYINT UNSIGNED NOT NULL AFTER username;
Query OK, 2 rows affected (0.30 sec)
Records: 2 Duplicates: 0 Warnings: 0 root@127.0.0.1 t2>SHOW COLUMNS FROM aname1;
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(10) | NO | | NULL | |
| ab | tinyint(3) unsigned | NO | | NULL | |
| pid | smallint(5) unsigned | YES | MUL | NULL | |
| age | tinyint(3) unsigned | NO | | 10 | |
+----------+----------------------+------+-----+---------+----------------+
5 rows in set (0.02 sec)

在我们进行操作的时候我们可以同时的进行删除和增加的操作,我们只需要在两个操作之间用‘,’进行分隔就好了。

——————————————————————————————————————————————————————————

修改数据表添加约束

添加外键约束:ALTER TABLE name ADD FOREIGN KEY(pid) REFERENCES provinces (id);

添加默认约束:ALTER TABLE name ALTER age SET DEFAULT 15;

删除默认约束:ALTER TABLE name ALTER age DROP DEFAULT;

数据表的修改操作:无非就是添加列,删除列,添加约束,删除约束。用的是ALTER,而INSERT是对数据表添加插入记录用的

1、添加主键约束:
ALTER TABLE table_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_column_name,...);
2、添加单个唯一约束:
ALTER TABLE table_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEXKEY] [index_name] [index_type] (index_column_name,...);
3、添加多个唯一约束:
ALTER TABLE table_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEXKEY] [index_name] [index_type] (index_column_name,...),ADD [CONSTRAINT [symbol]] UNIQUE [INDEXKEY] [index_name] [index_type] (index_column_name,...);

Ps1:CONSTRAINT 可加可不加,加该关键字后还可以选择添加主键别名;
Ps2:唯一约束可以有多个,但主键约束有且只能有一个。

root@127.0.0.1 t2>ALTER TABLE user2 ADD CONSTRAINT id PRIMARY KEY (id);
Query OK, 0 rows affected (0.34 sec)
Records: 0 Duplicates: 0 Warnings: 0 root@127.0.0.1 t2>SHOW COLUMNS from user2;
+----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id | smallint(5) unsigned | NO | PRI | 0 | |
| username | varchar(20) | NO | | NULL | |
| pid | smallint(5) unsigned | NO | | NULL | |
+----------+----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

————————————————————————————————————————

修改数据表—删除约束

1、删除主键约束:
ALTER TABLE table_name DROP PRIMARY KEY;
2、删除唯一约束:
ALTER TABLE table_name DROP {INDEX} key_name;
3、删除外键约束:
ALTER TABLE table_name DROP FOREIGN KEY fk_symbol;

Ps1:唯一约束的 index_name 可通过 SHOW INDEX FROM table_name\G; 查询。
Ps2:外键约束的名字 fk_symbol 可通过 SHOW CREATE TABLE table_name; 查询。
Ps3:INDEX:index是索引标识,和create table name 中的table是相同的标识。
Ps4:当字段id smallint unsigned auto_increment primary key时,不可以删除主键约束;必须先修改为 id smallint unsigned,再删除主键约束。

————————————————————————————————————————

修改列定义以及更名数据表

修改列定义和更名数据表

1、修改列定义(列类型/列位置)
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST AFTER col_name];
2、修改列名称
ALTER TABLE tbl_name CHANGE [COLUMN] col_name new_col_name column_definition [FIRSTAFTER col_name];
3、数据表更名
方法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] ...(这种方法可以给多个数据表更名) Ps1:修改数据类型(特别是大类型转到小类型),需注意数据丢失的问题。
Ps2:尽量不要修改数据表名和列名,以免影响后台等问题。
root@127.0.0.1 t2>SHOW COLUMNS from tb3;
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(30) | NO | | NULL | |
+----------+----------------------+------+-----+---------+----------------+
2 rows in set (0.02 sec) root@127.0.0.1 t2>ALTER TABLE tb3 MODIFY id SMALLINT UNSIGNED NOT NULL;
Query OK, 0 rows affected (0.34 sec)
Records: 0 Duplicates: 0 Warnings: 0 root@127.0.0.1 t2>SHOW COLUMNS from tb3;
+----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id | smallint(5) unsigned | NO | PRI | NULL | |
| username | varchar(30) | NO | | NULL | |
+----------+----------------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

我们在修改定义的时候我们不需要带上主键的名称。

mysql之约束以及修改数据表的更多相关文章

  1. MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNI ...

  2. MySQL(三) —— 约束以及修改数据表

    约束: 1. 约束保证数据的完整性和一致性: 2. 约束分为表级约束和列级约束: 3. 约束类型包括:NOT NULL, PRIMARY KEY, UNIQUE KEY, DEFAULT, FOREI ...

  3. MySQL数据库基础(二)(约束以及修改数据表)

    一,约束以及修改数据表 约束的作用?1.约束保证数据的完整性.一致性:2.约束分为表级约束.列级约束:3.约束类型包括:NOT NULL(非空约束).PRIMARY KEY(主键约束).UNIQUE ...

  4. MySQL基础(二)(约束以及修改数据表)

    一,约束以及修改数据表 约束的作用?1.约束保证数据的完整性.一致性:2.约束分为表级约束.列级约束:3.约束类型包括:NOT NULL(非空约束).PRIMARY KEY(主键约束).UNIQUE ...

  5. MySQL约束和修改数据表知识集结

    一.约束 划分标准:功能.数据列的数目 功能: (1)NOT NULL(非空约束) (2)PRIMARY KEY(主键约束) (3)UNIQUE(唯一约束) (4)DEFAULT(默认约束) (5)F ...

  6. mysql开启远程登陆(修改数据表和授权两种方法)

    一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 ...

  7. MySQL--3约束和修改数据表总结

  8. 数据库之mysql篇(3)—— mysql创建/修改数据表/操作表数据

    创建数据表:create table 数据表名 1.创建表规范 create table 表名( 列名   数据类型    是否为空   自动排序/默认值  主键/外键/唯一键, 列名   数据类型 ...

  9. MySQL修改数据表存储引擎的3种方法介绍

    这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下   MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...

随机推荐

  1. Report: Disappearing Wetlands Put Planet Life at Risk

    A new report warns that wetlands are disappearing three times faster than the world’s forests, with ...

  2. Android 系统信息的获取

    Android 系统信息的获取 一.内存(ram): 1.android 的内存大小信息存放在系统的 /proc/meminfo 文件里面,通过adb shell 进入 手机目录后,使用 cat /p ...

  3. GIS的核心价值——服务

    注:本观点仅代表个人观点,与任何人员或者组织无任何关系,如有雷同或者相似之处,只能说明我们对GIS的理解相同,无抄袭之嫌.     写这个题目,源于前两天接到的一个电话面试时候问道的一个面试题.当时, ...

  4. Android开发技巧——写一个StepView

    在我们的应用开发中,有些业务流程会涉及到多个步骤,或者是多个状态的转化,因此,会需要有相关的设计来展示该业务流程.比如<停车王>应用里的添加车牌的步骤. 通常,我们会把这类控件称为&quo ...

  5. 用java网络编程中的TCP方式上传文本文件及出现的小问题

    自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...

  6. [转载] PHP升级导致系统负载过高问题分析

    原文:http://chuansongme.com/n/797172 背景 据XX部门兄弟反应, 其在将PHP从5.3.8 升级到5.5.13 时, 开始运行正常, 运行一段时间后, 系统负载变高,达 ...

  7. 运行python代码

    IPython IPython 'magic' function documentation

  8. 怎么用HD Tune检测硬盘坏道

    HD Tune软件不仅小巧而且很易使用,是一款检测电脑硬盘的优良工具.不仅是电脑硬盘,包括移动硬盘在内一样可以检测.那么,如何使用HD Tune呢?如何使用HD Tune检测磁盘坏道呢? 工具/原料 ...

  9. (转)用Eclipse 统计代码行数小技巧

    今天公司SQA问我目前项目代码行数有多少,我当时就是想,以前好像写过类似的统计工具但是一时又找不到 公司网络又不能下载,所以想想eclipse是不是又类似功能,找了下没有,但突然一想有一个转弯方法:统 ...

  10. JMS可靠性机制

    1. 消息接收确认 JMS消息只有在被确认之后,才认为已经被成功的消费了,消息的成功消费通常包含三个阶段:客户接收消息,客户处理消息和消息被确认 在事务性会话中,当一个事务被提交的时候,确认自动发生. ...