文章目录
数据库和数据表的创建和信息更改
后续小实验做准备
-
创建数据库
语句:
create database experiment;
通过:show databases;
查看创建结果

-
创建基本表
创建表的代码如下:
-
student表
create table student (sno char(9) primary key, sname char(20) unique, ssex char(2), sage smallint, sdept char(20));
-
course表
create table course (sno char(4) primary key, cname char(40) not null, cpno char(4), ccredit smallint, foreign key(cpno) references course(cno));
-
SC表
create table SC (Sno char(9), Cno char(4), Grade smallint, primary key(Sno,Cno), foreign key(Sno) references Student(Sno), foreign key(Cno) references Course(Cno));
查看创建表的就结果
上面创建SC的时候属性是大写开头,二student表和cource表中的全是小写,创建成功,说明win10下mysql不区分大小写
-
-
向基本表中加入数据
student表数据随便输,course表中有坑,因为course表的参照表是自身,所以要先输入需要的先行课程,CS表依赖student表和course表。最后输入。
-
student
-
course表
向输入cpno为null的元组,再选择cpno为已经输入元组cno值相同的元组输入。不然会出现参照不完整的报错。
-
CS表
这个表的数据是查看cource表和student表中的数据
-
一. 关于数据库和数据表的其它操作
1)数据库
①创建数据库
create database 数据库名;

②显示目前所有的数据库
show databases
③数据库重命名
rename database olddbname to newdbname
大于这个版本修改数据库名字基本上是不行的,采用新建数据库,然后进行数据迁移。
上面的方法是通过重命名表的方式实现数据迁移。
也可以使用dump工具导出数据库的sql文件,更改数据库sql文件中创建数据库的名字。再用source指令引入sql文件实现数据库的数据迁移。
④更改当前使用的数据库
use 数据库名字
2)数据表
①数据表的创建
create table <表名> (<列名><数据类型>[列级约束条件],<列名><数据类型>[列级约束条件], [表级约束条件])
列级约束:只能应用于一列上。
表级约束 :可以应用于一列上,也可以应用在一个表中的多个列上。
字段设置
这里不说那些上面约束条件,太抽象,只说怎么设置列的属性。
-
列值不能为空
<列名><属性值> not null
-
设置列为主键
主键不能为空,被设置为主键的列值不能重复
-
只有一个主键是可以直接
<列名><属性值> primary key
标识主键
course中的sno为主键 -
多个主键时需要在创建表的末尾添加主键信息
这里SC表中Sno和Cno为主键
-
创建表后追加主键
alter TABLE <表名> MODIFY <列名> <列的数据类型> PRIMARY KEY
-
-
设置为外键
外键必须是参照表的某个key,可以说主键(primary key)也可以是唯一键(unique key)
有外键时创建数据表,必须要先创建出被参考的表,不然会报错
-
在创建时设置
FOREIGN KEY (<外键>) REFERENCES <被参考的数据表>(<被参考的列>)
多个外键 :
-
在创建表后追加
-- 已存在表增加外键 ALTER TABLE Products ADD FOREIGN KEY products_vendors_fk_1 (vend_id) REFERENCES Vendors (vend_id);
-
外键的约束模式
-
RESTRICT
严格模式(默认的),**父表不能删除或者更新一个已经被子表引用的记录数据(**外键对应的父表被引用的字段,其他字段可以更改)。即,当父表字段数据已经被子表引用时,不能再删除或者更新父表被引用的字段数据。
-
Cascade
级联模式;针对父表的操作,对应子表关联的数据也跟着被操作。
- 更新父表被引用的字段,如果该数据被子表外键使用,则子表外键随之更新;
- 删除父表被引用的字段记录,如果该数据被子表外键使用,子表对应外键所属记录随之删除。
-
Set null
置空模式,父表字段操作之后,如果该数据被子表外键使用,子表对应的外键字段被置空。
外键置空的前提是对应字段允许为空,否则外键创建不成功。
删除的时候子表置空,更新的时候子表级联:
-
-
-
自动增长
自增列只能有一个,并且必须设置为key如果没有指定就取当前id最大值+1,如果指定了就直接插入或者更新数据子
自增值在数据库操作失败后也会发生改变,从而影响后续自增列的值
<列名><属性值> auto_increment
- 如果有多个自增列会报错
Incorrect table definition; there can be only one auto column and it must be defined as a key 表定义不正确;只能有一个自动列,必须将其定义为键
在IDEA可视化工具中创建多个自增列出现报错
-
自增键自增详解
-
设置自增键的初始值
-
自增列的自增步长是可以改变的, 不常用所以不赘述了。
-
列中的值唯一
使用
unique key
标识
②数据表信息修改
a. 修改表名
alter table 表名 rename 新表名

b. 增加或删除或修改列
-
增加
ALTER TABLE table ADD [COLUMN] column_name_1 column_1_definition [FIRST|AFTER existing_column], ADD [COLUMN] column_name_2 column_2_definition [FIRST|AFTER existing_column], ···;

-
删除
ALTER TABLE <表名> DROP COLUMN column_1, DROP COLUMN column_2,

-
修改列
- 修改列名
ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 约束条件
- 还可以设置列的默认值,是否是主键,唯一键,外码等
d. 获取表的基本信息
show columns from <表名>
