数据约束的分类:

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

外键约束的要求解析

//在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. TI IPNC Web网页之GoDB开发环境

    介绍 下面介绍DM8127/DM385 IPNC RDK中网页制作相关的东东. 具体来说,各位获得这个RDK包时有以下文件: IPNC_RDK_DM812x_DM385_Version3.5.0.ta ...

  2. org.apache.jasper.JasperException: #{...} is not allowed in template

    org.apache.jasper.JasperException: #{...} is not allowed in template   针对jsp页面使用JQueryUI元素,出现org.apa ...

  3. IE中iframe兼容性问题

    在使用iframe的时候,有时候想要让调用的iframe框架里面的不显示白背景,让它变得透明,在firefox是透明的,但是在IE浏览器却不透明. 这个其实比较容易解决,只需要增加一个属性即可. 就是 ...

  4. Photoshop脚本指南——Hello World

    作为一个程序猿,每一个东西的学习都是从Hello World开始的,从今天开始,让我们一起进入Photoshop脚本的世界,并以Hello World开始我们的旅程. 1.简介 Photoshop支持 ...

  5. Delphi for Android (aka Delphi XE5 aka RAD Studio XE5) has appeared

    Delphi for Android (aka Delphi XE5 aka RAD Studio XE5) has appeared   Blimey, that took me by surpri ...

  6. C#泛型类的类型约束

    是使用泛型时,T默认情况下是不可以被初始化的,只能通过传值来赋值,这个时候可以使用类型约束来保证T是可以被约束的. .NET支持的类型参数约束有以下五种: where T: struct //T必须是 ...

  7. VC++6.0/MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能

    Ctrl组合键ASCII码 ^Z代表Ctrl+z                     ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符0(00) ...

  8. Android UI之LinearLayout详解

    ※※※摘自http://www.cnblogs.com/salam/archive/2010/10/20/1856793.html LinearLayout是线性布局控件,它包含的子控件将以横向或竖向 ...

  9. HDU - 5289:Assignment(单调队列||二分+RMQ||二分+线段树)

    Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this com ...

  10. SQLmap是一款用来检测与利用SQL漏洞的注入神器。

    sqlmap 重要参考 http://www.kali.org.cn/forum-75-1.html SQLmap是一款用来检测与利用SQL漏洞的注入神器.开源的自动化SQL注入工具,由Python写 ...