菜鸟的Linux历程-MySQL知识摘要
2015-10-13 12:34
387 查看
mysql知识摘要:
基本认识:
数据库(database)仅仅是存放用户数据的地方。当用户访问、操作数据库中的数据时,就需要数据库管理系统。数据库管理系统的全称是database management system,简称DBMS,习惯上常常把数据库管理系统笼统称为数据库。DBMS中存在一个数据字典,用于存储数据的信息,这种关于数据的数据称为元数据。数据表:对于数据库而言,最基本的数据存储单元是数据表。数据表是存储数据的逻辑单元,可以把表想象成由行和列组成的表格。每一行称为一条记录,每一列称为一个字段。为数据库创建表时,需要指定该表包含多少列,每列的数据类型。其中能用来唯一标识每一条记录的一列或者多列,则称为主键。
MySQL基本命令:
show databases; //查看数据库 create database [IF NO EXISTS] 数据库名; //创建新的数据库 drop database 数据库名; //删除指定的数据库 use 数据库名; //进入指定的数据库 show tables; //进入数据库后可以查看数据库中存在的数据表 describ 表名; //查看指定数据表的表结构
SQL语句基础:
SQL的全程:Structured Query Language(结果化查询语言),通常可以分为以下几种类型:查询语句:主要有select关键字完成,查询语句是SQL中最复杂、功能最全的语句。
DML(data manipulation language,数据操作语言)语句:主要由insert、update和delete三个关键字完成。
DDL(data definition language,数据定义语言)语句:主要由create、 - - alter、drop和truncate四个关键字完成。
DCL(data control language,数据控制语言)语句:主要由grant和revoke两个关键字完成。
数据库的命名规则:
标识符通常以字母开头。
标识符包括字母、数字和三个特殊字符(# _ $)。
不允许使用当前数据库系统的关键字、保留字,通常建议使用多个单词连缀,单词之间以_分割。
DDL语句:
数据表是存储数据的逻辑单元,但数据库中还包含几种常见的数据库对象:
对象名称 | 对应关键字 | 描述 |
---|---|---|
表 | table | 存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录。 |
数据字典 | 系统表,存放数据库的相关信息的表。 | |
约束 | constraint | 执行数据校验的规则,用于保证数据库完整性的规则。 |
视图 | view | 一个或多个数据表里的数据的逻辑显示,视图并不存在数据。 |
索引 | index | 用于提高查询性能,相当于书的目录 |
函数 | function | 用于完成一次特定的计算,具有返回值。 |
存储过程 | procedure | 用于完成一次完整的业务处理,没有返回值。 |
触发器 | trigger | 相当于一个事件监听器。 |
创建表的语法:
//创建一张新的空表 create table [模式名.]表名 ( mysql_test_id int, mysql_test_name varchar(30), mysql_test_img blob ); //根据已经存在的表创建一张表 create table [模式名.]表名 [colum[,colum...]] as subquery;
修改表结构的语法:
alter table tablename add ( colum_name datatype [default expt], ... ); //为test表增加一个字段para alter table test add para int; //为test表增加多个字段,并指定字段类型 alter table test add ( para1 varchar(255) default 'para1', para2 varchar(255) ); //为test表的字段para1修改类型,mofify后每次只允许修改一个字段 alter table test modify para1 int; //删除表中的字段 alter table table_name drop column_name; //重命名表 alter table table_name rename to new_table_name; //修改字段名 alter table table_name change old_colum_name new_colum_name type [default expr];
删除表的语法:
//删除表和表结构 drop table table_name; //删除表数据,但是保留表结构 truncate table_name;
数据库的约束:
大部分数据库支持一下5种完整性约束。NOT NULL:非空约束,指定某列不能为空。
//创建一张新的空表,并指定mysql_test_id字段不能为空 //该约束同时还可以用于修改表结构的时候 create table [模式名.]表名 ( mysql_test_id int not null, mysql_test_name varchar(30), mysql_test_img blob );
UNIQUE:唯一约束,指定某列或者几列组合不能重复值。注意:虽然唯一约束的列不可以出现重复的值,但是可以出现多个null值。
//创建一张新的空表,并指定mysql_test_id字段为唯一约束 //该约束同时还可以用于修改表结构的时候 create table [模式名.]表名 ( mysql_test_id int unique, mysql_test_name varchar(30), mysql_test_img blob ); //如果需要为多列组合建立唯一约束,则需要使用表级约束语法。 //通用格式 [constraint 约束名] 约束定义; //为table1指定两列唯一约束 create table table1 ( mysql_test_id int, mysql_test_name varchar(30), mysql_test_img blob, //使用表级约束语法建立唯一约束 unique(mysql_test_name), //使用表级约束语法建立唯一约束并指定约束名 constraint table1_uk unique(mysql_test_id) ); //为table2指定两列的组合为唯一约束 create table table2 ( mysql_test_id int, mysql_test_name varchar(30), mysql_test_img blob, constraint table2_uk unique(mysql_test_id,mysql_test_name) );
PRIMARY KEY:主键,指定该列的值可以唯一标识该记录。相当于非空约束和唯一约束做”&&”运算,即主键列既不能存在非空值也不可以出现重复值。
//使用行级约束语法创建主键约束 create table table_name ( mysql_test_id int primary key, mysql_test_name varchar(30), mysql_test_img blob ); //使用表级约束语法创建单列主键约束 create table table_name ( mysql_test_id int, mysql_test_name varchar(30), mysql_test_img blob, constraint table_pk primary key(mysql_test_id) ); //使用表级约束创建多列组合的主键约束 create table table_name ( mysql_test_id int primary key, mysql_test_name varchar(30), mysql_test_img blob, primary key(mysql_test_id,mysql_test_name) ); //删除主键约束语法 alter table table_name drop primary key; //使用表级约束语法增加主键约束 alter table table_name add primary key(mysql_test_img); //修改主键约束语法 alter table table_name modify mysql_test_id varchar(255) primary key;
FOREIGN KEY:外键,该表中的某列或几列的组合可以唯一标识另一个表中的每一条记录。
注:由于外键在理解上存在一定难度,笔者将抽出外键这部分,做深入讨论。
CHECK:检查,指定一个布尔表达式,检查是否满足表达式。
语法格式:
create table table_name ( mysql_test_id int, mysql_test_name varchar(30), mysql_test_img blob, primary key(mysql_test_id,mysql_test_name), check(mysql_test_id>0) );
索引:
索引作为数据库对象,在数据字典中独立存放,但是不能独立存在,必须属于某个表。索引的创建有两种方式:
自动:当在表上指定主键约束,唯一约束和外键约束时,系统将会为该数据列自动创建对应的索引。
手动:通过create index…语句手动创建索引。
create index mysql_test_id_and_name_idx on table_name(mysql_test_id,mysql_test_name);
索引的删除有两种方式:
自动:数据表被删除,对应的索引也将删除。
手动:通过drop index…语句手动删除索引。
drop index mysql_test_id_and_name_idx on table_name;
视图:
视图的本质就是一条被命名的SQL查询语句。注意:由于视图并不是真正存在的数据,因而在视图中对数据的修改并不会保存到数据库中。//创建一个简单的视图 create or replace view table_name_viw as select mysql_test_img blob from table_name //指定不允许修改视图的数据 with check option; //删除视图则用drop drop view 视图名
DML语句(操作的对象主要为数据表中的数据):
//插入新数据,语法格式为: insert into table_name [(column [,(column...)])] values(value [,value...]); //修改已有数据,语法格式为: update table_name set column1=value1 [,column2=value2] ... //添加修改范围限制 [where condition]; //删除不用数据,语法格式为: delete from table_name [where condition];
到此为止,数据库常用的知识已经总结了大部分,关于外键约束,单表查询,数据库函数的内容将在”菜鸟的Linux历程-mysql知识摘要(中)”和大家进行深入探讨。关于分组和分组函数,多表连接查询,子查询,集合运算的内容将在”菜鸟的Linux历程-mysql知识摘要(下)”和大家进行深入探讨。
相关文章推荐
- MySQL中的integer 数据类型
- Linux socket 初步
- MySQL存储过程
- Android之获取手机上的图片和视频缩略图thumbnails
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- Ubuntu Linux使用体验