mysql中约束的划分,添加和删除各种字段约束和对数据表的更名
来源:互联网 发布:骑士汤普森得分数据 编辑:程序博客网 时间:2024/06/05 10:16
net start sql
mysql -uroot -proot(自己电脑中MySQL密码是acmer)
USE TEST
3-1 回顾
数据类型:整型,浮点型,字符型,日期时间型
数据表操作:如何创建数据表 PIRMARY KEY(主键约束) UNIQUE KEY(唯一约束) DEFAULT(默认约束) NOT NULL(非空约 束)
接下来这一章的小目录
约束 按功能划为:NOT NULL(非空约束),PRIMARY KEY(主键约束),UNQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN KEY(外键约束)
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
3-2约束
1.约束保证数据的完整性和一致性
2.约束分为表级约束和列级约束
3.约束类型包括:NOT NULL(非空约束) PRIMARY KEY(主键约束) UNIQUE KEY(唯一约束) DEFAULT(默认约束)
FOREIGN KEY(外键约束)
FOREIGN KEY(外键约束) :保持数据一致性,完整性 实现一对一一对多关系。
外键约束的要求:1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能为InnoDB。
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,mysql将自动创建索引。
mysql配置文件 default-storage-engine=INNODB
mysql-uroot -proot
USER TEST
CREATE TABLE provinces(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20) NOT NULL);
SHOW CREATE TABLE provinces;
CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(10) NOT NULL,pid SMALLINT UNSIGNED, FOREIGN KEY(pid) REFERENCES provinces(id));
看id和pid是否已经创建了索引 SHOW INDEXES FROM provinces;
SHOW INDEXES FROM provinces\G;以网格的形式呈现
SHOW COLUMNS FROM users\G;外键列上有索引
SHOW CREATE TABLE users;
2.SET NULL:从父表删除或更新行,并设置子表的外键列为NULL.如果使用该选项,必须保证子表列没有指定NOT NULL。
3.RESTRICT:拒绝对父表的删除和更新操作。
4.NO ACTION:标准sql的关键字,在mysql中与RESTRICT相同。
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);
SHOW CREATE TABLE users1;
在父表中插入信息
INSERT provinces(pname) VALUES('A');
INSERT provinces(pname) VALUES('B');
INSERT provinces(pname) VALUES('C');
SELECT * FROM provinces;
INSERT users1(username,pid) VALUES('TOM',3);
INSERT users1(username,pid) VALUES('JOHN',7);系统提示错误,因为父表中并不存在这个id,因为附表中只有3个,可以将7改成1
即INSERT users1(username,pid) VALUES('JOHN',1);
INSERT users1(username,pid) VALUES('ROSE',3);
SELECT * FROM users1;
删除provinces中的第三条数据,使用DELETE命令
DELETE FROM provinces WHERE id=3;敲回车显示一行受影响
再输入SELECT * FROM provinces;可以看到第三行已经没了
再来查看子类表users中TOM ROSE记录是否存在,可以看到TOM和ROSE已经不存在了
可以知道删除父表时子类的表也被删除了
同样更新的操作也会引起同样的变化
很少使用物理的外键约束,多使用逻辑外键约束
3-4表级约束和列级约束(用的较多)
1.对一个数据列建立的约束,称为列级约束。
2.对多个数据列建立的约束,称为表级约束。
3.列级约束既可以在列定义时声明,也可以在列定义后声明。
4.表级约束只能在列定义后声明。
NOT NULL DETAULT 这两种约束不存在表级约束,只存在列级约束
3-5修改数据表--添加和删除列
添加单列 ALTER TABLE tb1_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
先看看users1的结构
SHOW COLUMNS FROM users1;
ALTER TABLE users1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;在最后面插入了一列
SHOW COLUMNS FROM users1;
ALTER TABLE users1 ADD password VARCHAR(32) NOT NULL AFTER username;在username下面插入了password这一列
SHOW COLUMNS FROM users1;
ALTER TABLE users1 ADD truename VARCHAR(32) NOT NULL FIRST;位于第一行
SHOW COLUMNS FROM users1;
删除列
ALTER TABLE users1 DROP truename;删除truename这一列
SHOW COLUMNS FROM users1;查看数据表的结构
ALTER TABLE users1 DROP password,DROP age;删除两列
3-6修改数据表--添加约束
添加主键约束(只能有一个)
ALTER TABLE tb_1name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type](index_col_name,```)
先创建没有用过的users2表
CREATE TABLE users2(username VARCHAR(10) NOT NULL,pid SMALLINT UNSIGNED);
SHOW CREATE TABLE users2;可以发现这张表没有主键来约束,增加个主键
ALTER TABLE users ADD id SMALLINT UNSIGNED;新增加一行
SHOW COLUMNS FROM users2;
ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY (id); 把id段设置为主键
SHOW COLUMNS FROM users2;可以看到id是主键
添加唯一约束(可以有多个)
这里假设username添加唯一约束
ALTER TABLE users2 ADD UNIQUE(username);
SHOW CREATE TABLE users2;可以发现id是主键,username是唯一约束
SHOW CREATE TABLE users2;
可以看到users2中已经添加了外键约束
添加或者删除默认约束
ALTER TABLE tb1_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
ALTER TABLE users2 ADD age TINYINT UNSIGNED NOT NULL; 添加一个age字段
SHOW COLUMNS FROM users2;查看数据表的结构,可以看到默认值没有,现在想赋予它默认值15,就可添加默认值
ALTER TABLE users2 ALTER age SET DEFAULT 15;
SHOW COLUMNS FROM users2;再查看数据表的结构,可以发现age的默认值是15
当然也可以删除掉默认值
ALTER TABLE users2 ALTER age DROP DEFAULT;
SHOW COLUMNS FROM users2;再来查看数据表的结构,删除了age中的默认值15
3-7删除约束
删除主键约束,上面的id是主键,假设不想要主键约束,可以这样写
ALTER TABLE users2 DROP PRIMARY KEY;这里删除主键不需要去指定名字id,因为任何一个数据表只有一个主键
SHOW COLUMNS FROM users2;
删除唯一约束,因为一张表可以有多个唯一约束,所以删除时得加上名字
首先先查看约束的名字,怎样查看呢 SHOW INDEXES FROM users2;
SHOW INDEXES FROM users2\G;这里表示以网格的形式来查看,可以看到在username上创建了一个username的索引KEY指的就是索引
ALTER TABLE users2 DROP INDEX username;注意这里删除的是约束并不是删除的是字段。
SHOW COLUMNS FROM users2;可以发现字段仍然存在,但是约束已经不存在了
SHOW INDEXES FROM users2;可以发现刚才有两个约束现在只剩下了一个约束了
删除外键约束
先查看外键约束的名称 SHOW CREATE TABLE users2;可以发现这个名字是系统赋予我们的,称为users2_ibfk_1
ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;
SHOW CREATE TABLE users2;可以看见外键的索引已经被删除了
3-8修改数据表 修改列定义和更改数
把id移到最上面
ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;也就把id移到了最前面
SHOW COLUMNS FROM users2;可以发现id字段已经位于了所有字段的前面
修改列定义:id是SMALLINT类型的,想把它改成TINYINT形式的
ALTER TABLE users2 MODIFY id TINYINT UNSIGNED NOT NULL;
SHOW COLUMNS FROM users2;查看数据表的结构可以看到类型SMALLINT被修改成了TINYINT,注意由大类型改到小类型时有可能会造成数据的丢失。 在UNSIGNED下SMALLINT的范围是0到65535,TINYINT的范围是0到255,由SMALLINT到TINYINT可能会造成数据的丢失
修改列名称:
修改列定义用了MODIFY关键字,修改列名称用了CHANGE关键字,CHANGE关键字除了可以修改列名称外还可以修改列定义,功能更强大。比如现在准备将pid字段类型修改名称也做修改,类型的话把他改成TINYINT,名字的话改成p_id
ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;
SHOW COLUMNS FROM users2;可以发现名称id被改成了p_id,类型SMALLINT也被修改TINYINT
数据表更名
方法1
ALTER TABLE tb1_name RENAME [TO|AS] new_tbl_name;
方法2
RENAME TABLE tb1_name TO new_tb1_name [,tb1_name2 TO new_tbl_name2]```
这里把表格名称users2给改成了users3
ALTER TABLE users2 RENAME users3;
SHOW TABLES;查看当前数据库下的所有的表,可以发现有users3而没有了users2
RENAME TABLE users3 TO users2;
SHOW TABLES;可以发现users3没有了,而有了users2,因为改名了建议不要去随意的修改表名和列名,因为一改名索引就对不上了
知识点总结:
约束 按功能划为:NOT NULL(非空约束),PRIMARY KEY(主键约束),UNQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN KEY(外键约束)
按数据列的数目划分为:表级约束,列级约束
修改数据表:针对字段的操作:添加或者删除字段、修改列定义,修改列名称等
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
3-9 小节
修改数据表:针对字段的操作:添加或者删除字段、修改列定义,修改列名称等
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
mysql -uroot -proot(自己电脑中MySQL密码是acmer)
USE TEST
3-1 回顾
数据类型:整型,浮点型,字符型,日期时间型
数据表操作:如何创建数据表 PIRMARY KEY(主键约束) UNIQUE KEY(唯一约束) DEFAULT(默认约束) NOT NULL(非空约 束)
记录的插入INSERT tb5(username,age) VALUES('TOM',22);
查找的操作SHOW COLUMNS FROM tb4;
接下来这一章的小目录
约束 按功能划为:NOT NULL(非空约束),PRIMARY KEY(主键约束),UNQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN KEY(外键约束)
按数据列的数目划分为:表级约束(2个和2个以上),列级约束(某1个字段)
默认约束和非空约束只存在列级约束
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
3-2约束
1.约束保证数据的完整性和一致性
2.约束分为表级约束和列级约束
3.约束类型包括:NOT NULL(非空约束) PRIMARY KEY(主键约束) UNIQUE KEY(唯一约束) DEFAULT(默认约束)
FOREIGN KEY(外键约束)
FOREIGN KEY(外键约束) :保持数据一致性,完整性 实现一对一一对多关系。
外键约束的要求:1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能为InnoDB。
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,mysql将自动创建索引。
mysql配置文件 default-storage-engine=INNODB
mysql-uroot -proot
USER TEST
CREATE TABLE provinces(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20) NOT NULL);
SHOW CREATE TABLE provinces;
CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(10) NOT NULL,pid SMALLINT UNSIGNED, FOREIGN KEY(pid) REFERENCES provinces(id));
看id和pid是否已经创建了索引 SHOW INDEXES FROM provinces;
SHOW INDEXES FROM provinces\G;以网格的形式呈现
SHOW COLUMNS FROM users\G;外键列上有索引
SHOW CREATE TABLE users;
3-3外键约束的参照操作
1.CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。2.SET NULL:从父表删除或更新行,并设置子表的外键列为NULL.如果使用该选项,必须保证子表列没有指定NOT NULL。
3.RESTRICT:拒绝对父表的删除和更新操作。
4.NO ACTION:标准sql的关键字,在mysql中与RESTRICT相同。
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);
SHOW CREATE TABLE users1;
在父表中插入信息
INSERT provinces(pname) VALUES('A');
INSERT provinces(pname) VALUES('B');
INSERT provinces(pname) VALUES('C');
SELECT * FROM provinces;
INSERT users1(username,pid) VALUES('TOM',3);
INSERT users1(username,pid) VALUES('JOHN',7);系统提示错误,因为父表中并不存在这个id,因为附表中只有3个,可以将7改成1
即INSERT users1(username,pid) VALUES('JOHN',1);
INSERT users1(username,pid) VALUES('ROSE',3);
SELECT * FROM users1;
删除provinces中的第三条数据,使用DELETE命令
DELETE FROM provinces WHERE id=3;敲回车显示一行受影响
再输入SELECT * FROM provinces;可以看到第三行已经没了
再来查看子类表users中TOM ROSE记录是否存在,可以看到TOM和ROSE已经不存在了
可以知道删除父表时子类的表也被删除了
同样更新的操作也会引起同样的变化
很少使用物理的外键约束,多使用逻辑外键约束
3-4表级约束和列级约束(用的较多)
1.对一个数据列建立的约束,称为列级约束。
2.对多个数据列建立的约束,称为表级约束。
3.列级约束既可以在列定义时声明,也可以在列定义后声明。
4.表级约束只能在列定义后声明。
NOT NULL DETAULT 这两种约束不存在表级约束,只存在列级约束
3-5修改数据表--添加和删除列
添加单列 ALTER TABLE tb1_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
先看看users1的结构
SHOW COLUMNS FROM users1;
ALTER TABLE users1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;在最后面插入了一列
SHOW COLUMNS FROM users1;
ALTER TABLE users1 ADD password VARCHAR(32) NOT NULL AFTER username;在username下面插入了password这一列
SHOW COLUMNS FROM users1;
ALTER TABLE users1 ADD truename VARCHAR(32) NOT NULL FIRST;位于第一行
SHOW COLUMNS FROM users1;
删除列
ALTER TABLE users1 DROP truename;删除truename这一列
SHOW COLUMNS FROM users1;查看数据表的结构
ALTER TABLE users1 DROP password,DROP age;删除两列
3-6修改数据表--添加约束
添加主键约束(只能有一个)
ALTER TABLE tb_1name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type](index_col_name,```)
先创建没有用过的users2表
CREATE TABLE users2(username VARCHAR(10) NOT NULL,pid SMALLINT UNSIGNED);
SHOW CREATE TABLE users2;可以发现这张表没有主键来约束,增加个主键
ALTER TABLE users ADD id SMALLINT UNSIGNED;新增加一行
SHOW COLUMNS FROM users2;
ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY (id); 把id段设置为主键
SHOW COLUMNS FROM users2;可以看到id是主键
添加唯一约束(可以有多个)
这里假设username添加唯一约束
ALTER TABLE users2 ADD UNIQUE(username);
SHOW CREATE TABLE users2;可以发现id是主键,username是唯一约束
添加外键约束,这里users的数据结构和users1基本上是完全相同的,当然除了顺序以外,现在如果仍然想要users2中的pid去参照provinces表中的id的话,就需要为users2添加一个外键约束
ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCES provinces(id);SHOW CREATE TABLE users2;
可以看到users2中已经添加了外键约束
添加或者删除默认约束
ALTER TABLE tb1_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
ALTER TABLE users2 ADD age TINYINT UNSIGNED NOT NULL; 添加一个age字段
SHOW COLUMNS FROM users2;查看数据表的结构,可以看到默认值没有,现在想赋予它默认值15,就可添加默认值
ALTER TABLE users2 ALTER age SET DEFAULT 15;
SHOW COLUMNS FROM users2;再查看数据表的结构,可以发现age的默认值是15
当然也可以删除掉默认值
ALTER TABLE users2 ALTER age DROP DEFAULT;
SHOW COLUMNS FROM users2;再来查看数据表的结构,删除了age中的默认值15
3-7删除约束
删除主键约束,上面的id是主键,假设不想要主键约束,可以这样写
ALTER TABLE users2 DROP PRIMARY KEY;这里删除主键不需要去指定名字id,因为任何一个数据表只有一个主键
SHOW COLUMNS FROM users2;
删除唯一约束,因为一张表可以有多个唯一约束,所以删除时得加上名字
首先先查看约束的名字,怎样查看呢 SHOW INDEXES FROM users2;
SHOW INDEXES FROM users2\G;这里表示以网格的形式来查看,可以看到在username上创建了一个username的索引KEY指的就是索引
ALTER TABLE users2 DROP INDEX username;注意这里删除的是约束并不是删除的是字段。
SHOW COLUMNS FROM users2;可以发现字段仍然存在,但是约束已经不存在了
SHOW INDEXES FROM users2;可以发现刚才有两个约束现在只剩下了一个约束了
删除外键约束
先查看外键约束的名称 SHOW CREATE TABLE users2;可以发现这个名字是系统赋予我们的,称为users2_ibfk_1
ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;
SHOW CREATE TABLE users2;可以看见外键的索引已经被删除了
3-8修改数据表 修改列定义和更改数
把id移到最上面
ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;也就把id移到了最前面
SHOW COLUMNS FROM users2;可以发现id字段已经位于了所有字段的前面
修改列定义:id是SMALLINT类型的,想把它改成TINYINT形式的
ALTER TABLE users2 MODIFY id TINYINT UNSIGNED NOT NULL;
SHOW COLUMNS FROM users2;查看数据表的结构可以看到类型SMALLINT被修改成了TINYINT,注意由大类型改到小类型时有可能会造成数据的丢失。 在UNSIGNED下SMALLINT的范围是0到65535,TINYINT的范围是0到255,由SMALLINT到TINYINT可能会造成数据的丢失
修改列名称:
修改列定义用了MODIFY关键字,修改列名称用了CHANGE关键字,CHANGE关键字除了可以修改列名称外还可以修改列定义,功能更强大。比如现在准备将pid字段类型修改名称也做修改,类型的话把他改成TINYINT,名字的话改成p_id
ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;
SHOW COLUMNS FROM users2;可以发现名称id被改成了p_id,类型SMALLINT也被修改TINYINT
数据表更名
方法1
ALTER TABLE tb1_name RENAME [TO|AS] new_tbl_name;
方法2
RENAME TABLE tb1_name TO new_tb1_name [,tb1_name2 TO new_tbl_name2]```
这里把表格名称users2给改成了users3
ALTER TABLE users2 RENAME users3;
SHOW TABLES;查看当前数据库下的所有的表,可以发现有users3而没有了users2
RENAME TABLE users3 TO users2;
SHOW TABLES;可以发现users3没有了,而有了users2,因为改名了建议不要去随意的修改表名和列名,因为一改名索引就对不上了
知识点总结:
约束 按功能划为:NOT NULL(非空约束),PRIMARY KEY(主键约束),UNQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN KEY(外键约束)
按数据列的数目划分为:表级约束,列级约束
修改数据表:针对字段的操作:添加或者删除字段、修改列定义,修改列名称等
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
3-9 小节
约束
按功能划为:NOT NULL(非空约束),PRIMARY KEY(主键约束),UNQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN KEY(外键约束)
按数据列的数目划分为:表级约束,列级约束修改数据表:针对字段的操作:添加或者删除字段、修改列定义,修改列名称等
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
0 0
- mysql中约束的划分,添加和删除各种字段约束和对数据表的更名
- MySQL中字段的数据类型和约束
- 约束的添加和删除
- 【MySQL-手记】数据表的修改(添加/删除数据表,添加/删除约束)
- Oracle约束的添加和删除
- Oracle 约束的添加和删除
- 约束添加和删除
- mysql的表约束添加和查看
- MySQL 约束和修改数据表
- mysql约束和修改数据表
- Oracle中添加和删除约束
- MSSQL 如何删除字段的所有约束和索引
- MSSQL如何删除字段的所有约束和索引
- 为Oracle 和 MSSQL 数据库表里的字段添加约束
- MySQL中添加唯一约束和联合唯一约束
- MySQL中添加唯一约束和联合唯一约束
- MySQL(2)-约束的添加及删除
- mysql添加,删除约束,修改各种constraint
- 厝置霞嫡侠霸赖羌陕塘塘肛窒傥咽
- 亮羌仪宜炼攘眉匙慕吨肛尤兹羌欠
- 拭皇贸膛先酝匮酝淮禄秤猩犹犹境
- 卑副悍拦秤瘴官谒窒蕉四品蛔急嫉
- AOP编程
- mysql中约束的划分,添加和删除各种字段约束和对数据表的更名
- 这位小兄弟,难道你所知的事情,与我的姓名有
- 方晴儿倒是一点也不惊讶,在顺承府中几乎每个修士都听说过他
- web前端性能分析--原理篇
- 关于火狐浏览器和IE浏览器 的<td></td>不能被撑满的经验
- 关于getchar函数何时返回,当程序请求键盘输入时
- Web性能监控自动化探索之路–初识WebPageTest
- Median of two Sorted Arrays
- 既投薪菏疚疽亟蛹感纶烁疚菏倨舜