> 文档中心 > 【Mysql 一周速成Mysql】 第二篇SQL语法 -- 数据定义(SQL DDL)进阶提升

【Mysql 一周速成Mysql】 第二篇SQL语法 -- 数据定义(SQL DDL)进阶提升

文章目录

    • 前言
    • 1.SQL概述
    • 2.SQL数据定义
      • 2.1数据库定义
      • 2.2表、视图和索引定义
          • 2.2.1定义基本表
          • 2.2.2修改基本表
          • 2.2.3删除基本表
          • 2.2.4建立索引
          • 2.4.5删除索引

前言

        上篇博主带大家学习了数据库的基础知识,如果没学且感兴趣的的小伙伴可以点击前去了解一下: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包含了所有对数据库的操作:

  1. 数据定义(SQL DDL):
    定义数据库的逻辑结构——基本表、视图和索引。
  2. 数据操纵(SQL DML):
    数据查询和数据更新(插入、删除和修改)。
  3. 数据控制:
    对基本表和视图的授权,完整性规则描述和事务控制语句。
  4. 嵌入式SQL的使用:
    SQL在宿主语言的程序中使用的规则。
  5. SQL语法:
    SQL定义语法包括:创建(CREATE)、删除(DROP)、修改(ALTER)。
    SQL操纵语法包括:增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)。
    SQL当然还可以给用户赋予权限(GRANT)及收回权限(REVOKE)。
    如下图:
    【Mysql 一周速成Mysql】 第二篇SQL语法 -- 数据定义(SQL DDL)进阶提升
    SQL的特点:
    1. 综合统一。
    2. 高度非过程化。
    3. 面向集合的操作方式。
    4. 以同一种语法结构提供两种使用方法。
    5. 语言简洁,易学易用。

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表、视图和索引定义

当然上述是对数据库的定义,如果操作对象为表、视图或索引,又应该怎样定义的呢?如下图:

【Mysql 一周速成Mysql】 第二篇SQL语法 -- 数据定义(SQL DDL)进阶提升
显表上述的定义操作。

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)。
注:本文章仅用于参考学习,如有错误,请大家指正。