SQL(Structured Query Language):即结构化查询语言,是在关系型数据库(诸如Mysql、SQL Server、Oracle等)里进行相关操作的标准化语言,可以根据sql的作用分为以下几种类型:
DDL(Data Definition Language): 数据定义语言
DML(Data Manipulation Language): 数据操纵语言
TCL(Transaction Control Language): 事务控制语言
DQL(Data Query Language): 数据查询语言
DCL(Data Control Language): 数据控制语言
DDL(Data Definition Language)主要用于对数据库对象进行操作的过程,主要由create(添加)、alter(修改)、drop(删除)和 truncate(删除) 四个关键字完成。
数据库对象是数据库的组成部分,常见的有以下几种:
1、表(Table )
数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row) 和列(Column)组成的。列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包括了若干列信息项。一行数据称为一个或一条记录,它表达有一定意义的信息组合。一个数据库表由一条或多条记录组成,没有记录的表称为空表。每个表中通常都有一个主关键字,用于惟一地确定一条记录。
2、索引(Index)
索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径,并且可监督表的数据,使其索引所指向的列中的数据不重复。
3、视图(View)
视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在数据库中并不实际存。在视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那些需要的数据信息。
4、图表(Diagram)
图表其实就是数据库表之间的关系示意图。利用它可以编辑表与表之间的关系。
5、缺省值(Default)
缺省值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值。
6、规则(Rule)
规则是对数据库表中数据信息的限制。它限定的是表的列。
7、触发器(Trigger)
触发器是一个用户定义的SQL事务命令的集合。当对一个表进行插入、更改、删除时,这组命令就会自动执行。
8、存储过程(Stored Procedure)
存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句,经编译后存储在数据库中的SQL 程序。
9、用户(User)
所谓用户就是有权限访问数据库的人。
#创建一个名为test的数据库
#create database 库名;
create database test;
#创建一个名为test的数据库并指定字符集和编码格式
create database test default charset utf8 collate utf8_general_ci;
#删除test数据库
drop database test;
#查看所有的库
show databases;
#切换到test数据库下
#use 库名;
use test
#查看该库下所有的表
show tables;
#创建一个表,并指定id为自增主键
create table test01 (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
name varchar(64) NOT NULL UNIQUE KEY COMMENT '姓名',
sex varchar(4) NOT NULL DEFAULT '1' COMMENT '性别,1男2女',
birthday timestamp(4) DEFAULT NULL COMMENT '生日',
modified_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY ( id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='信息表';
#删除表test01,并清除表中数据
drop table test01;
#清除表test01中的数据,保留表格式
truncate table test01;
#复制test01的表结构及约束到copyfromtest01,不会复制数据
#create table 新表名 like 原表名
create table copyfromtest01 like test01;
#复制test01的表结构及数据到copyfromtest02,不会复制约束
#create table 新表名 as 查询sql
create table copyfromtest02 as select * from test01;
#修改表名
#alter table 原表名 rename 新表名;
alter table test01 rename test02;
#查看test的建表语句
show create table test \G;
#给test01新增字段
#alter table 表名 add 字段名 类型属性
alter table test01 add `index` varchar(64) DEFAULT NULL COMMENT '索引';
#删除表test01中的name字段
#alter table 表名 drop 字段名;
alter table test01 drop name;
#给test01新增主键索引
#alter table 表名 add 索引+字段;
alter table test01 add PRIMARY KEY (`id`);
#给test01的name字段添加到test02的name外键索引
alter table test01 add foreign key (`name`) references test02(`name`);
#删除test01中name的主键索引
alter table test01 drop PRIMARY KEY
#删除test01中的索引
alter table 表名 drop index 索引名
#删除test01中的外键索引
#alter table 表名 drop foreign key 索引名
alter table test01 drop foreign key `name`
#修改test01中sex的默认值为null
alter table test01 alter sex default null;
#删除test01中sex的默认值
alter table test01 alter sex drop default;
#禁用test01中name的约束
alter table test01 name disable keys
#启用test01中name的约束
alter table test01 name enable keys