数据表操作与主键、外键、唯一键使用

1、修改数据库(比如修改字符集)

mysql> alter database `DB` character set utf8;

2、根据查询结果建立数据表,注意这样复制的数据表是不能将主键也复制过来的,也就是说此时的新表示没有主键的

mysql> create table student_bak select ID,name from student where ID=2;

mysql> create table student_bak2 select * from student;

3、修改数据表名(两种方式都可以)

mysql> rename table student_bak to stu_bak;

mysql> alter table stu_bak rename student_bak;

4、修改列名(字段名)以及类型,注意修改类型的时候不能少于现有字段数据的大小,而且必须得兼容(把Name改为int类型是不允许的)

mysql> alter table student_bak2 change Name Stu_Name varchar(10);

5、增加主键(一个表中只能有一个主键),在初期创建表时没有建立主键的话可以增加

mysql> alter table student_bak2 add constraint stu_id primary key(ID);     //其中stu_id是主键名称,也可以不加

6、删除主键

mysql> alter table student_bak2 drop primary key;

7、复合主键(可以管理两列),比如我吧student_bak2表的Age和Stu_Name两列设置为复合主键

mysql> alter table student_bak2 add constraint stu_id primary key(Age,Stu_Name);      //也就是说姓名或年龄可以相同,但是姓名和年龄同时相同就不可以了

8、增加字段

mysql> alter table student_bak2 add Address varchar(30) not null;    //这样增加的字段在表的最后

mysql> alter table student_bak2 add Address varchar(30) not null first;    //first表示增加到第一列

mysql> alter table student_bak2 add Address varchar(30) not null after Age;   //after表示添加到某列之后

9、删除字段

mysql> alter table student_bak2 drop column Address;

10、建立唯一键

mysql> create table student(

ID int unsigned auto_increment,

Name varchar(10) not null unique,          //unique代表唯一键,表示Name字段也不能出现重复,例如添加两个"张三"是不允许的

Age tinyint unsigned, primary key(ID)

)engine=InnoDB default charset=utf8;

如果创建表时没有建立唯一键,后续可以添加:

mysql> alter table student add constraint UK unique (Name);   //其中UK是唯一键的名称

11、删除唯一键

mysql> alter table student drop index UK;   //UK为唯一键名称

12、创建外键(一般指向另一个表的主键或者唯一键),首先创建两个表,然后创建外键把student表中的T_ID和teacher表中的ID进行关联

mysql> create table student(

ID int unsigned auto_increment,

Name varchar(10) not null,

Age tinyint unsigned,T_ID int unsigned,

primary key(ID)

)engine=InnoDB default charset=utf8;

mysql> create table teacher(

ID int unsigned auto_increment primary key,

Name varchar(20) not null

) engine=InnoDB default charset=utf8;

mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID);   //创建外键,references表示关联

13、删除外键

mysql> alter table student drop foreign key  WJ;  //WJ是创建外键时指定的名称

mysql> alter table student drop index WJ;       //有时删除键后索引还在,所以还要删除索引

添加外键后的作用,小例子:

mysql> insert into teacher values (null,"王老师"),(null,"彭老师");   //在teacher表中添加两个老师,现在的ID分别是1和2

mysql> insert into student (Name,Age,T_ID) values ("张三",20,3);    //此时在student的T_ID字段添加3会报错,因为teacher表中只有1和2

14、删除某一行,注意带有约束的行不能删除

mysql> delete from teacher where ID=3;

mysql> delete from teacher where ID=2;     //此时会报错,因为在student中有外键关联

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`DB`.`student`, CONSTRAINT `WJ` FOREIGN KEY (`T_ID`) REFERENCES `teacher` (`ID`))

如果换一种方式,就是把T_ID换掉,再来删除,例如:

mysql> update student set T_ID=4 where ID in(2,3);   //表示把student表中ID是2和3行的T_ID字段改为4

mysql> delete from teacher where ID=2;

Query OK, 1 row affected (0.00 sec)

还有一种创建外键的方式后可以直接删除被关联的老师,删除老师后学生表的T_ID字段自动成为null

mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete set null;   //on delete set null就是删除后自动变为null

mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete cascade;   //on delete cascade是如果把某一个老师删除,那这个老师关联的学生也跟着删除

mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete set null on update cascade;  //添加多个外键条件,意思是如果老师表的ID改变,那么与之关联的                                                                                       student表中的T_ID也会跟着改变,删除的时候会设置为空

原文地址:http://blog.51cto.com/12730062/2073530

时间: 2024-11-03 12:47:39

数据表操作与主键、外键、唯一键使用的相关文章

SQL Server 触发器例题: --次性删除course表数据,使用触发器替换删除操作,先删除外键表相关数据,再删除course。很难理解

create trigger Course_Delete on course instead of delete as declare @cno varchar(20) --定义变量 select @cno = cno from deleted --临时表里的信息是instead of 替换 delete要删除的信息 delete from score where cno = @cno --instead of 替换操作后执行的代码命令 delete from course where cno=

MySQL创建数据表并建立主外键关系

为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引. 一.SQL语句创建数据表并设置主外键关系 create table demo.ChineseCharInfo ( ID int not null auto_increment, Hanzi varchar(10) not null, primary

python42 1.外键的变种 2.数据表操作

昨日回顾: 一. 数据库的介绍   管理数据的软件 二. 数据库的 分类:   a.关系型数据库    有约束   b.非关系型数据库    没有约束     三. MySQl 的安装:   a. exe msi文件 点击下一步下一步      b. 压缩包     bin      mysqld : 启动mysql服务的     mysql  : 连接mysql    环境变量 四. 数据库(文件夹)   数据表 (文件)    数据行(文件行)  五. 数据库:   增:    create

数据库主从表、关系;主、外键关系和作用

从数据库是主数据库的备份,当主数据库变化时从数据库要更新,这些数据库软件可以设计更新周期.这是提高信息安全的手段.主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存.主外键的关系结构:1,一对一,不用引用主外键,把它们放一个表中即可例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可2,一对多,引用主外键,'一'相当于主键,'多'即是引用主键的外键.例如:一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系:3,多对多关系,需要创建一个表,表中需要两个字段

通过 jdbc 分析数据库中的表结构和主键外键

文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hibernate 是 ORM 框架,他是有能力根据实体生成数据库表的.我们在单元测试的时候用到了 dbUnit ,dbUnit 可以帮助我们在测试前把数据库的测试数据准备好,然后我们就利用现成的数据库环境测试,测试完成后需将数据库中的所有数据清除(为了不影响其他的单元测试),然后接着下一个测试.虽然已经

Sql Server 主键 外键约束

主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如果为表指定了主键约束, 数据库引擎 将通过为主键列自动创建唯一索引来强制数据的唯一性. 当在查询中使用主键时,此索引还允许对数据进行快速访问. 如果对多列定义了主键约束,则一列中的值可能会重复,但来自主键约束定义中所有列的值的任何组合必须唯一. 如下图所示, Purchasing.ProductVend

数据库系统基础笔记(3)--主键/外键 索引

本文转载自:http://www.cnblogs.com/longyi1234/archive/2010/03/24/1693738.html 作者:蔚蓝色的天空 一.什么是主键.外键 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 :  学生表 (学号,姓名,性别,班级)  其中每个学生的学号是唯一的,学号就是一个主键  课程表(课程编号,课程名,学分)  其中课程编号是唯一的,课程编号就是一个主键  成绩表(学号,课

MySQL主键 外键 索引

一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 用户表(用户名.密码.登录级别) 其中用户名是唯一的, 用户名就是一个主键 上机记录表(卡号,学号,姓名.序列号) 上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键 上机记录表中的序列号不是成绩表的

主键外键

主键 外键 唯一键 CHECK约束 主键:是唯一的,不可重复的,它能提高查询效率,但是会减慢新增数据效率 外键:主键是本张表的主键,是唯一且非空的,而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的. 外间的取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除.(4)更新主键记录时,同样有