数据约束的分类:

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

外键约束的要求解析:

//在my文件中的这句话代表着搜索引擎,如果不是的就需要技能型更改。然后重启。my文件存在于我的电脑中的mysql文件夹里。

# Thedefault storage engine that will be used when create new tables when

default-storage-engine=INNODB

root@127.0.0.1 t2>CREATE TABLEprovince(-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,-> username VARCHAR(20) NOT NULL

->);

Query OK,0 rows affected (0.13sec)

root@127.0.0.1 t2>SHOW CREATE TABLEprovince;+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| province | CREATE TABLE`province` (

`id`smallint(5) unsigned NOT NULLAUTO_INCREMENT,

`username`varchar(20) NOT NULL,PRIMARY KEY(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00sec)

root@127.0.0.1 t2>CREATE TABLEaname(-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,-> username VARCHAR(10) NOT NULL,-> pid BIGINT,-> FOREIGN KEY(pid) REFERENCESprovince(id)->);

ERROR1005 (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 FROMprovince\G;*************************** 1. row ***************************

Table: province

Non_unique:0Key_name:PRIMARYSeq_in_index:1Column_name: id

Collation: A

Cardinality:0Sub_part:NULLPacked:NULL

Null:

Index_type: BTREE

Comment:

Index_comment:1 row in set (0.10sec)

ERROR:

No query specified

root@127.0.0.1 t2>SHOW INDEXES FROManame\G;*************************** 1. row ***************************

Table: aname

Non_unique:0Key_name:PRIMARYSeq_in_index:1Column_name: id

Collation: A

Cardinality:0Sub_part:NULLPacked:NULL

Null:

Index_type: BTREE

Comment:

Index_comment:*************************** 2. row ***************************

Table: aname

Non_unique:1Key_name: pid

Seq_in_index:1Column_name: pid

Collation: A

Cardinality:0Sub_part:NULLPacked:NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:2 rows in set (0.00sec)

ERROR:

No query specified

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

外键约束的参照操作:

root@127.0.0.1 t2>CREATE TABLEaname1(-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,-> username VARCHAR(10) NOT NULL,-> pid SMALLINTUNSIGNED,-> FOREIGN KEY(pid) REFERENCES province(id) ON DELETE CASCADE

->);

Query OK,0 rows affected (0.23sec)

root@127.0.0.1 t2>SHOW CREATE TABLEaname1;+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| aname1 | CREATE TABLE`aname1` (

`id`smallint(5) unsigned NOT NULLAUTO_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.16sec)

root@127.0.0.1 t2>INSERT province(username) VALUES('B');

Query OK,1 row affected (0.14sec)

root@127.0.0.1 t2>INSERT province(username) VALUES('C');

Query OK,1 row affected (0.13sec)

root@127.0.0.1 t2>SELECT * FROMprocvince;

ERROR1146 (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.34sec)

Records:2 Duplicates: 0 Warnings: 0root@127.0.0.1 t2>SHOW COLUMNS FROManame1;+----------+----------------------+------+-----+---------+----------------+

| 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 NULLAFTER username;

Query OK,2 rows affected (0.30sec)

Records:2 Duplicates: 0 Warnings: 0root@127.0.0.1 t2>SHOW COLUMNS FROManame1;+----------+----------------------+------+-----+---------+----------------+

| 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.34sec)

Records:0 Duplicates: 0 Warnings: 0root@127.0.0.1 t2>SHOW COLUMNS fromuser2;+----------+----------------------+------+-----+---------+-------+

| 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:

RENAMETABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2]...(这种方法可以给多个数据表更名)

Ps1:修改数据类型(特别是大类型转到小类型),需注意数据丢失的问题。

Ps2:尽量不要修改数据表名和列名,以免影响后台等问题。

root@127.0.0.1 t2>SHOW COLUMNS fromtb3;+----------+----------------------+------+-----+---------+----------------+

| 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.02sec)

root@127.0.0.1 t2>ALTER TABLE tb3 MODIFY id SMALLINT UNSIGNED NOT NULL;

Query OK,0 rows affected (0.34sec)

Records:0 Duplicates: 0 Warnings: 0root@127.0.0.1 t2>SHOW COLUMNS fromtb3;+----------+----------------------+------+-----+---------+-------+

| 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后台修改表_mysql之约束以及修改数据表相关推荐

  1. 创建mysql数据库 表_MySQL:创建数据库和数据表操作

    1.使用SQL创建数据库,数据库名:studentDB,如果数据库studentDB已存在,那么,先删除再创建. DROP DATABASE IF EXISTS StudentDB ;-----如果存 ...

  2. mysql for mac中文_mysql for Mac 下创建数据表中文显示为?的解决方法

    在我的绝版Mac mini下安装了mysql 5.7版本,实例中,在通过load data 导入数据时发现表中的中文显示为  ? 通过百度,发现多个版本的解决方法,将其中一个成功解决的方法贴上来: 大 ...

  3. mysql建用户无密码_mysql建用户和修改密码和忘记密码的解决办法

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 1.1 登录MYSQL: @>mysql -u root -p @&g ...

  4. mysql导入sql脚本、增删改数据库、数据表,超详细图解

    为方便查看,建议使用右侧目录 一.导入sql脚本 source 二.数据库操作 create 增 use 使用 三.数据表操作 表结构(DDL) create 新建 drop 删 alter 增.改 ...

  5. (转)【mysql元数据库】使用information_schema.tables查询数据库和数据表信息 ---数据记录大小统计...

    转:https://www.cnblogs.com/ssslinppp/p/6178636.html https://segmentfault.com/q/1010000007268994?_ea=1 ...

  6. PHP数据表记录自己信息,PHP对数据表记录的操作

    •       插入数据 •       修改记录 •       删除记录 •       提取记录 •       指定记录提取 •       提取记录个数 插入数据 向数据表中增加记录,可以使 ...

  7. 虚拟机mysql创建一个表_MySQL:创建、修改和删除表

    其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语 ...

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

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

  9. mysql 查看索引 命令_MySQL命令篇之库、表、索引、用户、视图及SELECT查询

    大纲 一.库管理 二.表管理 三.索引管理 四.用户管理 五.视图管理 六.SELECT查询 一.库管理 (1).创建数据库CREATE DATABASE db_name [CHARACTER SET ...

最新文章

  1. ISE中使用Notepad++的关联设置以及Notepad++的护眼设置(设置背景色)
  2. 概率和统计的matlab指令
  3. linux环境下获取真实的ip地址
  4. box-sizing:border-box
  5. Android插件化原理解析——Hook机制之动态代理
  6. 遍历矩阵每一行穷举_LeetCode:二维数组—旋转矩阵
  7. 服务器做文件共享服务特点,服务器主机做共享文件
  8. vue 组件根元素显示优化
  9. 利用SCCM 2012 SP1为客户端进行软件批量自动安装
  10. Devexpress VCL Build v2014 vol 14.2.6 发布
  11. Dedecms修改TAG、title、keywords及栏目名称长度限制
  12. office高级应用与python综合案例教程_使用Python操作Office——EXCEL
  13. 用matlab编模糊pid程序,实例:MATLAB/Simulink实现模糊PID控制
  14. Allegro gerber文件路径设定
  15. Linux文件---文件锁
  16. 使用PDF24 将mathmatica 的.nb文件转化为PDF文档
  17. gulp+webpack工具整合简介
  18. 查询onedrive空间大小
  19. 程序员找不到合适工作的原因总结
  20. 无爬虫团队,企业如何实现1000万级数据采集?

热门文章

  1. Lombok 子类如何使用 @Builder
  2. 基于 SpringBoot,来实现MySQL读写分离技术
  3. 有关算法方面的经典书籍推荐
  4. 转:让 ThinkPad 的中键加小红帽模拟鼠标滚轮
  5. 《Java设计模式与实践》——工厂模式
  6. return view前端怎么获取_前端判断上传图片格式
  7. python里的关键字有哪些_Python中的yield关键字做了什么?
  8. 谈谈InnoDB下的记录锁,间隙锁,next-key锁
  9. php dlt645,DLMS - DLT645规约转换模块
  10. java length()函数_小猿圈介绍java函数式编码结构及优势