欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库系统原理(第四章:SQL与关系数据库基本操作 )

程序员文章站 2024-02-01 17:44:16
嵌入式和动态SQL规则:规定了SQL语句在高级语言程序设计中 使用的规范方法,以便适应较为复杂的应用 ......

一、sql概述

sql是结构化查询语言(structured query language,sql)是专门用来与数 据库通信的语言,它可以帮助用户操作关系数据库。

sql的特点:

sql不是某个特定数据库供应商专有的语言; sql简单易学 ;sql强大、灵活,可以进行非常复杂和高级的数据库操作

sql的组成:

  • 数据查询
  • 数据定义语言(data definition language,ddl)
  • 数据操纵(dml)
  • 数据控制(dcl)

*******************数据定义语言**********************

create 创建数据库或数据库对象

alter 对数据库或数据库对象进行修改

drop 删除数据库或数据库对象

************数据操纵语言(data manipulation language,dml)***********

select 从表或视图中检索数据

insert 将数据插入到表或视图中

update 修改表或视图中的数据

delete 从表或视图中删除数据

***************数据控制语言(data control language,dcl)****************

grant 用于授予权限

revoke 用于收回权限

 

二、mysql预备知识

嵌入式和动态sql规则:规定了sql语句在高级语言程序设计中 使用的规范方法,以便适应较为复杂的应用

sql 调 用(以便提高sql的灵活性、有效性、共享性以及使sql具有更多的高级语言的特征):sql 例 程、调 用 规 则  

mysql使用基础:lamp模式 、wamp模式   l(linux) a(apache)m(mysql) p(php、perl、python)

 

 

关系数据库管理系统(rdbms):优点:体积小、速度快、开放源代码、遵循gpl

mysql扩展语言要素

常量:也称字面值或标量值 

  • 字符串常量:用单引号或双引号括起来的字符序列,分为ascii字符串常量和unicode字符串常量
  • 数值常量:整数常量、  浮点数常量
  • 十六进制常量:每对十六进制数字被转换为一个字符,其最前面有一个字母“x”(或“x”)
  • 时间日期常量:用单引号将表示日期时间的字符串括起来而构成的 例如:’2018-06-05’
  • 位字段值
  • 布尔值:true:1  ;false: 0
  • null值

变量:

  • 用户变量:用户变量前常添加一个符号@,用于将 其与列名区分开
  • 系统变量:大多数系统变量应用于其他sql语句中 时,必须在系统变量前添加两个@

数据库系统原理(第四章:SQL与关系数据库基本操作 )

 

 

 表达式 表达式是常量、变量、列名、复杂计算、运算符和函数的组合。

  • 字符型表达式
  • 数值型表达式
  • 日期型表达式

数据库系统原理(第四章:SQL与关系数据库基本操作 )

 

 

 三、数据定义(ddl)

创建数据库(create):使用create  database 或  create schema语句

create {database | schema} [if not exists] db_name
 [default]character set[=]charset_name
 |[default]collate[=]collation_name

例句:create database test_sy character set ="utf8" collation ="utf8_general_ci";     create database mysql_test;

  1. 字符集(character set):定义了字符以及字符的编码。
  2. 字符序(collation):指定字符集的 校对规则。

查看数据库(show):查看数据库的所有表

show {databases | schemas}
 [like’pattern’ | where expr]

like关键字用于匹配指定的数据库名称; where从句用于指定数据库名称查询范围的条件

例句:show databases;  show databases like "%test%";

show tables:查看数据库非系统表

 

选择数据库(use):use db_name;  从一个数据库“跳转”到另一个数据库。

修改数据库:alert

mysql>alter database mysql_test
 -> default character set gb2312
 -> default collate gb2312_chinese_ci;

删除数据库:

drop{database|schema}[if exists]db_name

例句:drop database hahaha;   drop database if exists hahaha;

*****************************表定义**********************************

创建表:数据表是关系数据库中最重要、最基本的数据对象, 也是数据存储的基本单位。

数据表, 被定义为字段的集合 按(行 )和(列 )的格式来存储的, 每一( 行)代表一条记录, 每一(列 )代表记录中一个字段的取值。

create[temporary]table tbl_name
 (
 字段名1 数据类型 [列级完整性约束条件][默认值]
 [,字段名2 数据类型 [列级完整性约束条件][默认值]]
 [,……]
 [,表级完整性约束条件]
 )[engint=引擎类型];

若添加“temporary”,则为临时表

在一个已有数据库mysql_test中新建一个包含客户姓名、性别、地址、 联系方式等内容的客户基本信息表,要求将客户的id号指定为该表的 主键。

数据库系统原理(第四章:SQL与关系数据库基本操作 )

 

 

primary key(cust_id):指定主键

数据类型:

  • 整型int
  • 浮点型double
  • 布尔型bool
  • 日期型date
  • 时间戳timestamp
  • 时间型time 定长
  • 字符类型char
  • 可变长字符varchar

更新表(alter):使用alter table语句,增加或删减列、创建或取消索引、更改原有列的 数据类型、重新命名列或表,更改表的评注和表的引擎类型,为表重新创 建触发器、存储过程、索引和外键等。

1、add column 

例如:向数据库mysql_test的表customers中添加一列,并命名为 cust_city,要求其不能为null,默认值为字符串“wuhan”,且该列位 于原表cust_sex列之后。

alter table mysql_test.customers ->add column cust_city char(10)not null default ‘wuhan’ after cust_sex;

2、change[column]子句 修改表中列的名称或数据类型

数据库系统原理(第四章:SQL与关系数据库基本操作 )

 

 3、alter[column]子句 修改或删除表中指定列的默认值

  alter table mysql_test.customers ->alter column cust_city set default ‘beijing’;

4、modify[column]子句 只修改指定列的数据类型,不会干涉它的列名

  alter table mysql_test.customers ->modify column cust_name char(20) first;

5、drop[column]子句 删除表中多余的列

alter table mysql_test.customers ->drop column cust_contact;

6、rename[to]子句 为表重新赋予一个表名

alter table mysql_test.customers ->rename to mysql_test.backup_customers;

给表重命名表的第二种写法:rename table db_a.old_table to db_b.new_table;

7、drop [temporary] table [if exists] tbl_name [ ,tbl_name ] … [restrict | cascade]

 

查看表结构:

show [full] columns {from | in} tbl_name[{from | in} db_name] [like’pattern’ | where expr]

例如:show columns from t_role;

{describe | desc} tbl_name [col_name | wild]

例如:desc t_role;

********************************************索引****************************************

 索引:索引是提高数据文件访问效率的有效方法

 索引存在的弊端: 1)索引是以文件的形式存储的,如果有大量的索引,索引文件可能比数据 文件更快达到最大的文件尺寸; 2)索引在提高查询速度的同时,会降低更新表的速度。

 索引的分类:索引通常被创建成单列索引和组合索引

  • 普通索引 index或key
  • 唯一性索引 unique
  • 主键 primary key

索引的创建 create index

数据库系统原理(第四章:SQL与关系数据库基本操作 )

 

 

 例如:在数据库mysql_test的表customers上,根据客户姓名列的前三个 字符创建一个升序索引index_customers。

create index  index_customers  on mysql_test.customers (name(3) asc);

在数据库mysql_test的表customers上,根据客户姓名列和客户id 号创建一个组合索引index_cust。

create index index_cust on mysql_test.customers (cust_name,cust_id);


2、语法项[constraint[symbol]] unique [index|key] [index_name] (index_col_name,…),
用于表示在创建新表的同时创建该表的唯一性索引;
3、语法项[constraint[symbol]] foreign key [index_name] (index_col_name,…),
用于表示在创建新表的同时创建该表的外键;

 索引的创建:使用alter table语句创建

  • 1)语法项add {index|key} [index_name](index_col_name,…), 用于表示在修改表的同时为该表添加索引;
  • 2)语法项add [constraint [symbol]] primary key (index_col_name,…), 用于表示在创建新表的同时为该表添加主键; 
  • 3)语法项add [constraint [symbol]] unique [index|key] [index_name] (index_col_name,…), 用于表示在修改表的同时为该表添加唯一性索引;
  • 4)语法项add [constraint [symbol]] foreign key (index_col_name,…), 用于表示在创建新表的同时为该表添加外键

例如:使用alter table语句在数据库mysql_test中表seller的姓名上添加一列 非唯一的索引,取名为index_seller_name。

 alter table mysql_test.seller   add index index_seller_name(seller_name);

 索引的查看(show index )

show {index | indexes | keys} {from | in} tbl_name [{from | in} db_name ] [where expr]

 show index from t_test.tb_dept;

索引的删除:使用drop index语句

drop index index_name on tbl_name;

索引的删除:使用alter table语句

  • 1)选用drop primary key子句用于删除表中的主键,由于一个表中只有 一个主键,其也是一个索引;
  • 2)选用drop index子句用于删除各种类型的索引;
  • 3)选用drop foreign key子句用于删除外键。

例如:使用alter table语句删除数据库mysql_test中表customers的主键和索引 index_customers。

数据库系统原理(第四章:SQL与关系数据库基本操作 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

数据更新

 

数据查询

 

 

视图