SQL结构化查询语言

时间:2022-09-22 09:42:22

SQL结构化查询语言
数据操作(管理)语言(DML,DataManipulationLanguage)(DQL+DML)
DQL 查询:获得数据。
DML 管理:增加,删除,修改数据。

数据定义语言(DDL,DataDefinitionLanguage)对保存数据的格式进行定义。

数据库控制语言(DCL,DataBaseControlLanguage)针对数据库软件服务进行操作。


SQL=DDL
,DML(DQL+DML),DCL

**数据库操作:**DDL

创建数据库

create database [if not exists]  数据库名 [数据库选项] ;
eg:create database liguodong;create database `1234`;    特殊字符串create database `create`;  关键字
set names GBK;create database `成都`;

数据库名:可以是任意字符(目录可以创建成功),但特殊的字符需要使用反引号包裹。标识符的大小写区别于操作系统的大小写特征。
If not exists
表示在数据库不存在时创建。
数据库选项中,可以设定数据库字符集(character set utf8)和校对集(collate utf8_general_ci)。

注:
语句要求要使用语句结束符 ;

标识符(数据库)命名规则:
大小写取决于当前操作系统(认为是区分的)
见名知意。推荐使用下划线方式。

标识符的字符:
使用任意字符,数字,符号甚至是中文。但是一些特殊的组合,例如纯数字组合,特殊符号,包括mysql是内部关键字,应该使用标识符限定符来包裹。
限定符:反引号。
中文可以,但是不建议使用。(字符集编码要正确)set namesGBK;

每当我们创建一个数据库,在mysql的数据目录,形成一个目录,目录名是数据库名(如果是特殊字符,则使用编码的形式保存)。目录内,存在一个文件,用于保存数据库的选项信息。db.opt

查询数据库

查询已经存在的数据库:

show databases [like 'pattern']
show databases;

like pattern指的是显示符合哪些命名规则的。不存在指的是所有的数据库。
查询创建数据库的语句:show create databasedb_name;

注意:并不是只有用户可以创建数据库,还有mysql内部维护自己的数据库。

删除数据库

drop database [if exists] db_name;  慎用
drop database test;

If exists表示数据库存在才删除。
当删除一个数据库时,同时删除该数据库相关的目录及其目录内容。

修改数据库

alter database db_name [修改指令]
alter database test character set gbk

指令:数据库属性的修改。

修改名字:
方式一、简单的可以直接修改目录名。(并不适用所用方式)
方式二、将数据库内容导出,新建一个数据库,将内容导入,删除旧数据库。

表操作

数据库是表的容器。
表必须数据某个数据库。
可以通过.语法指明所属的数据库。eg: 库.表database.table。如果任何的标识符,出现的特殊字符,需要使用反引号包裹。不同的标识符需要分别包裹。
进行表操作时,都会指定当前的默认数据库。
use db_name;
注意:选择了默认的数据库,只会影响默认行为。可以操作任何的数据库。

创建表

create table [if not exists] tbl_name (列定义) [表选项] create table [if not exists] tbl_name like old_tbl_name;create table [if not exists] tbl_name select 语句;
 
eg:create table liguodong.classroom(
stu_id varchar(20),
stu_name  varchar(20),
stu_data  date
);

每当创建一个表,会在数据目录创建对应的文件保存表信息。
先分析,需要保存的实体数据,拥有哪些属性,这些属性应该如何保存。
例如:学生信息
学号,姓名,出生日期
列定义:
列名:列的数据类型[列的属性 (约束)]

查看表

show tables [from db_name] [like ‘pattern’];
如果没有数据库名,则采用当前数据库,如果没有like,则获得所有表。
eg:
use liguodong;show tables;
show tables from liguodong;

表名前缀:
为了区分相同逻辑表名不同应用,给逻辑表名,增加前缀,形成真实表名。

/*学生管理系统*/create table info_student(
stu_name varchar(20),
stu_no varchar(20)
);/*在线考试系统*/create table exam_student(
stu_name varchar(20),
stu_no varchar(20)
);
show tables like 'exam_%';
%称之为通配符,表示任意字符的任意个数的组合。
show create table exam_student;

当一个数据非常多的时候,可以使用\G作为语句结束符。

describe liguodong.exam_student;

数据库对应目录,而数据库中的内容对应目录的内容,文件

删除表

drop table [if exists] tbl_name;
 
eg:drop table exam_student;
表不存在,不能删除,会报告错误。drop table if exists exam_student;
不会报错,因为已经做了一次判断。

修改表

重命名表名:rename tabletbl_name to new_tbl_name; 。可以同时针对多个表进行重命名,甚至可以跨数据库。
修改表结构:alter table。可以提供对表选项和列定义的修改。

重名名相当于剪切操作
eg:rename table classroom to stu_class;
 
支持同时修改多个表名。rename table classroom to stu_class,info_student to exam_user;
支持跨数据库重命名。rename table exam_user to `1234`.user;
 
重命名数据库(数据库不支持rename
创建一个新的数据库,就的数据库内的表,都rename到新的数据库内,删除旧的数据库。

交换两张表的表名

create table tab1(
tab1_id int
);
create table tab2(
tab2_id int
);
rename table tab1 to temp,tab2 to tab1,temp to tab2;
 
desc tab1;

修改列定义:

add     增加  可以同时增加多个列,使用括号括起来多个列的定义。
modify  修改
change  重命名drop    删除

修改表结构:

alter table exam [add|drop|change|modify]
 
eg:
添加:alter table info_student add age int;
desc info_student; 
删除:alter table info_student drop age;
desc info_student;
修改:alter table info_student modify stu_no varchar(40);
desc info_student;
重命名:alter table info_student change age stu_age int;
desc info_student;

修改表选项

alter table info_student character set gbk;