SQL - 数据定义语句

SQL - 数据定义语句

文章目录

  • SQL - 数据定义语句
    • 数据定义语句 - DDL
      • 1 创建数据表
      • 2 修改数据表
      • 3 删除表
    • 约束
      • 1 实体完整性约束
        • 1.1 主键约束
        • 1.2 唯一约束
        • 1.3 自动增长列
      • 2 域完整性约束
      • 3 引用完整性约束

数据定义语句 - DDL

概念:

  • DDL(Data Definition Language), 即数据定义语句。定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象,比如表、聚簇、索引、视图、函数、存储过程和触发器等等。
  • 数据定义语言是由SQL语言集中负责数据结构定义与数据库对象定义的语言,并且由CREATE、ALTER、DROP和TRUNCATE四个语法组成。

1 创建数据表

语法:

CREATE TABLE 表名(

  列名 数据类型 [约束],

  列名 数据类型 [约束],

  列名 数据类型 [约束]

)charset=utf8mb4

代码演示:

# 1 创建表
# 学生表
create table if not exists student(
	stu_id int,
	stu_name varchar(20),
	stu_age int,
	stu_gender char(2),
	stu_address varchar(100),
	stu_born date
)charset=utf8mb4;

# 科目表
create table if not exists course(
	course_id int,
	course_name varchar(20),
	course_hour int
);

# 成绩表
create table if not exists score(
	stu_id int,
	course_id int,
	result double(5,2),
	exam_time datetime
);

注意:

  • 最后一列的末尾不加逗号。
  • 在最外面可以指定表的字符编码集,不指定默认编码。

2 修改数据表

语法: ALTER TABLE 表名 操作;

代码演示:

# 2.1 向现有表中添加列
alter table student add stu_email varchar(50);
# 2.2 修改列名和类型
alter table student change stu_email email varchar(60);
# 2.3 删除一列
alter table student drop stu_born;
# 2.4 修改表名
alter table student rename t_student;
alter table score rename t_score;
alter table course rename t_course;

3 删除表

**语法: **DROP TABLE 表名;

# 3 删除表
# if exists 判断是否存在
drop table if exists student; 

约束

思考:

  • 向表中新增数据时,可不可以新增两行相同列值的数据?
  • 如果可行,会有什么弊端?

概念: 用于限制加入表的数据的类型和规范。

1 实体完整性约束

1.1 主键约束

**语法:**PRIMARY KEY。

**作用:**唯一,标识表中的一行数据,此列的值不可重复,且不能为 NULL。

代码演示:

# 为适用于主键的列添加主键约束
# 1.1 主键约束: 唯一表示一行数据, 此列的值不能重复, 也不能为空
create table if not exists student(
	stu_id int primary key,
	stu_name varchar(20),
	stu_age int,
	stu_gender char(2),
	stu_address varchar(100)
)charset=utf8mb4;

insert into student values(101,'张三',20,'男','北京昌平');
insert into student values(102,'田美丽',20,'女','北京昌平');

create table if not exists course(
	course_id int primary key,
	course_name varchar(20),
	course_hour int
);

insert into course values(1,'Java',200),(2,'MySQL',50),(3,'HTML',60);

[重点] 联合主键

语法: primary key(表1, 表2)

代码演示:

# 联合主键
create table if not exists score(
	stu_id int,
	course_id int,
	result double(5,2),
	exam_time datetime,
	primary key(stu_id,course_id)
);

insert into score values(101,1,90,'2024-1-25');
insert into score values(101,2,90,'2024-1-25');
1.2 唯一约束

语法: unique

作用: 唯一,标识表中的一行数据,不可重复,可以为NULL

代码演示:

create table if not exists student(
	stu_id int primary key,
	stu_name varchar(20),
	stu_age int,
	stu_gender char(2),
	stu_address varchar(100),
	identitycard varchar(18) unique
)charset=utf8mb4;

insert into student values(101,'张三',20,'男','北京昌平','111111111111111111');
insert into student values(102,'田美丽',20,'女','北京昌平',null);
1.3 自动增长列

语法: AUTO_INCREMENT

代码演示:

# 1.3 自动增长列
-- 不能单独使用,给主键数值列添加自动增长;每个表只能有一个。
-- 默认从1开始,每次加1;可以使用auto_increment=100修改初始值
-- 只会增加, 即使将数据删除也不会倒退

# 需求: 为编号添加自动增长
create table if not exists course(
	course_id int primary key auto_increment,
	course_name varchar(20),
	course_hour int
);

insert into course(course_name,course_hour) values('JAVA',200),('MySQL',50),('HTML',60);

注意:

  • 不能单独使用,给主键数值列添加自动增长;每个表只能有一个。
  • 默认从1开始,每次加1;可以使用auto_increment=100修改初始值

2 域完整性约束

**概念: **限制列的单元格的数据正确性。

**包括: **

  • 数据类型:
    • 数值类型、字符串类型、日期时间类型
  • 非空约束:
    • 语法:NOT NULL。
    • 作用:非空
  • 默认值约束:
    • 语法:DEFAULT 值。
    • 作用:为列赋予默认值,新增数据不指定值或书写DEFAULT,使用默认值进行填充。

代码演示:

drop table student; # 删除原有student表

create table if not exists student(
	stu_id int primary key auto_increment,
	stu_name varchar(20) not null, #非空约束
	stu_age int,
	stu_gender char(2),
	stu_address varchar(100) default '地址不详', #默认值约束
	stu_born date default '2000-01-01'
)charset=utf8mb4;

insert into student values(null,'张三',20,'男','北京','2000-10-05'); 
insert into student values(null,'李四',20,'男',null,'2000-10-05');
insert into student values(null,'王五',20,'男',default,'2000-10-05'); 
insert into student (stu_name,stu_age,stu_gender) values('赵六',20,'女');

3 引用完整性约束

概念: 引用完整性约束也称为外键约束。

语法: constraint [外键名] foreign key(列名) references 主表(列名)。

作用:

  • FOREIGN KEY引用外部表的某个列的值。
  • 新增数据时,约束此列的值必须是引用表中已经存在的值。

代码演示:

# 引用完整性约束[外键约束]
drop table score; # 删除原有数据表

create table if not exists score(
	stu_id int,
	course_id int,
	result double(5,2),
	exam_time datetime,
	primary key(stu_id,course_id),
	constraint foreign key(stu_id) references student(stu_id),
	constraint foreign key(course_id) references course(course_id)
);

insert into score values(101,1,90,'2024-1-25');
insert into score values(101,2,93,'2024-1-25');
insert into score values(101,3,99,'2024-1-25');
insert into score values(102,3,99,'2024-1-25');

注意:当两张表存在引用关系,若要执行删除操作,一定要先删除从表(引用表),再删除主表(被引用表)

你可能感兴趣的:(从零学Java,sql,oracle,数据库)