【Mysql 一周速成Mysql】 第二篇SQL语法 -- 数据定义(SQL DDL)进阶提升
文章目录
前言
上篇博主带大家学习了数据库的基础知识,如果没学且感兴趣的的小伙伴可以点击前去了解一下:https://blog.csdn.net/qq_56022768/article/details/124929226。今天博主给大家带来SQL语法之查询(Select)。
1.SQL概述
(Structured Query Language)
–1974年Boyce和Chamberlin提出,首先在IBM 公司的关系数据库系统System R上实现。
–1986年10月,美国国家标准局ANSI颁布了SQL的国际标准,ISO随后也提出了同样的决定。
–SQL使用方便、功能丰富、语言简洁易学。
–SQL86 — SQL89— SQL92 — SQL2003—SQL2008—SQL2011。
SQL包含了所有对数据库的操作:
- 数据定义(SQL DDL):
定义数据库的逻辑结构——基本表、视图和索引。 - 数据操纵(SQL DML):
数据查询和数据更新(插入、删除和修改)。 - 数据控制:
对基本表和视图的授权,完整性规则描述和事务控制语句。 - 嵌入式SQL的使用:
SQL在宿主语言的程序中使用的规则。 - SQL语法:
SQL定义语法包括:创建(CREATE)、删除(DROP)、修改(ALTER)。
SQL操纵语法包括:增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)。
SQL当然还可以给用户赋予权限(GRANT)及收回权限(REVOKE)。
如下图:
SQL的特点:- 综合统一。
- 高度非过程化。
- 面向集合的操作方式。
- 以同一种语法结构提供两种使用方法。
- 语言简洁,易学易用。
2.SQL数据定义
博主通过几个例子让大家感受一下数据定义。
2.1数据库定义
首先是数据库的定义:
1、创建数据库
create database [databaseName];
例如:创建数据库studentdb,默认字符集是utf8,比较规则是 utf8_general_ci。
create database studentdb default charset utf8 collate utf8_general_ci;
2、删除数据库
drop database [databaseName];drop database studentdb;
3、查看数据库的创建语句
show create database [databaseName];show create database studentdb;
4、修改数据库的选项信息
alter database [databaseName];alter database studentdb charset gbk;alter database studentdb charset utf8;
5、选择数据库
useuse studentdb;
2.2表、视图和索引定义
当然上述是对数据库的定义,如果操作对象为表、视图或索引,又应该怎样定义的呢?如下图:
显表上述的定义操作。
2.2.1定义基本表
对表的定义(创建)语法总结为:
Create Table ( [ ] [, [ ] ] … [, ] );
其中, :组成该表的各个属性(列),:涉及相应属性列完整性约束条件,
:涉及一个或多个属性列的完整性约束条件 。
常用完整性约束:
1.主码约束:Primary Key
2.唯一性约束:Unique
3.非空值约束:Not Null
4.参照完整性约束
其中,Primary Key与 Unique都具备唯一性;那么,Primary Key与 Unique的区别是什么呢?
可使用 Unique约束确保在非主键列中不输入重复值;尽管二者都强制唯一性,但在强制下面的唯一性时应使用 。Unique约束而不是 Primary Key约束 ;一个表可以定义多个 Unique约束,而只能定义一个 Primary Key约束
允许空值的列上可以定义 Unique约束,而不能定义 Primary Key约束。
例1:建立一个“学生”表Student,由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。学号不能为空,值是唯一的,姓名取值也唯一。
Create Table Student( Sno Char(8) Not Null primary key, Sname Char (20) Unique, Ssex Char (2), Sage Int, Sdept Char (15) );
例2:建立课程表 Course
Create table Course ( Cno char(4) primary key, Cname char(20), Cpno char(4), Ccredit smallint, foreign key (Cpno) references Course(Cno) );
例3:建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。
Create Table SC( Sno Char(8), Cno Char(4), Grade int, Primary key (Sno,Cno), -- 注意,如果这里把主键定义分开就是错误的!!! foreign key (sno) references student(sno), foreign key (cno) references course(cno) );
2.2.2修改基本表
修改基本表的语法定义为:
Alter Table [ Add [ 完整性约束 ] ][ Drop ][ Alter Column ];
其中::要修改的基本表;Add子句:增加新列和新的完整性约束条件;Drop子句:删除指定的完整性约束条件;Alter Column子句:用于修改列名和数据类型。
基本语法了解后,通过几个例子联系一下:
例4:向Student表增加“入学时间”列,其数据类型为日期型。
Alter Table Student Add Scome DateTime;
不论基本表中原来是否已有数据,新增加的列一律为空值。
Alter Table Student add primary key(sno);
例5:将年龄的数据类型改为半字长整数(注:修改原有的列定义有可能会破坏已有数据).
Alter Table Student Alter Column Sage smallint;
例6:删除学生姓名必须取唯一值的约束。
Alter Table Student;drop CONSTRAINT st_chk_1;
2.2.3删除基本表
删除基本表的语法为:
Drop Table [ Restrict | Cascade];
其中,Restrict: 该表的删除是有限制条件的(缺省的)Cascade;该表的删除没有限制条件,相关的依赖对象一起删除。
例7:删除Student表(注:基本表定义一旦删除,数据、表上的索引、视图、触发器等都删除)。
DROP TABLE Student Cascade;
2.2.4建立索引
建立索引是加快查询速度的有效手段,DBA或表的属主(即建立表的人)根据需要建立,有些DBMS自动建立以下列上的索引。
建立索引的语句格式:
Create [Unique] [Clustered] Index On ([][,[] ]…)
用指定索引值的排列次序,升序:ASC,降序:DESC,缺省值:ASC,Unique:每一个索引值只对应唯一的数据记录,Clustered:要建立的索引是聚簇索引。
例8:为学生-课程数据库中的Student,Course,SC三个表建立索引。其中 Student表按学号升序建唯一索引
,Course表按课程号升序建唯一索引, SC表按学号升序和课程号降序建唯一索引。
Create Unique Index Stusno ON Student(Sno);Create Unique Index Coucno ON Course(Cno);Create Unique Index SCno ON SC(Sno ASC,Cno DESC);
唯一值索引:对于已含重复值的属性列不能建Unique索引,对某个列建立Unique索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值,相当于增加了一个Unique约束。
聚簇索引(了解):数据需要按指定的聚簇属性值的升序或降序存放,聚簇索引的索引项顺序与表中记录的物理顺序一致。
2.4.5删除索引
删除索引语法:
Drop Index ;
删除索引时,系统会从数据字典中删去有关该索引的描述 (mysql 中要在后面加上 on 表名)
[例7] 删除Student表的Stusname索引。
Drop Index Stusname;Drop Index Student.Stusname;
本期给大家带来的是Mysql的数据定义(SQL DDL),如有问题欢迎在下面评论区留言哦;下期博主给大家带来Mysql的数据操纵语法(SQL DML)。
注:本文章仅用于参考学习,如有错误,请大家指正。