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;