一、SQL简介
1.SQL语言
结构化查询语言SQL(Structured Query Language)是一种它是一个综合的、通用的、功能极强同时又简洁易学的语言,是使用关系模型的数据库应用语言。SQL语言集数据查询(data
query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(data control)功能于一体,充分体现了关系数据语言的特点和优点。
2.SQL语句分类
(1)DDL(Data manipulation language)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据对象,常用的语句关键字主要包括create、drop、alter等。
(2)DML(Data manipulation language)语句:数据库操作语句,用于添加、删除、更新和查询数据库纪录,并检查数据库的完整性。常用的语句关键字主要包括insert、delete、update、select等。
(3)DCL(Date Control Language)语句:数据库控制语句,用户控制不同的数据段直接的许可和访问级别的语句。这些语句定义了数据库、表字段、用户的访问权限和安全级别。主要的语句关键字包括grant、revike等。
注释:DDL是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改等操作的语言。它和DML语句的最大区别就是DML只是对内部数据操作,而不涉及表的定义、结构的修改,更不涉及其他对象。DDL语句更多的有数据库管理员(DBA)使用,开人员一般很少使用。
3.SQL基本语句
(1)库的基本操作
◆连接数据库(针对MySQL)
命令:mysql -h[IP地址/主机名] -u[用户名]
-p[密码]
说明:-h host主机(远程MySQL服务器IP地址)
-u 用户名
-p 密码
◆查看数据库
命令:show databases;
◆创建数据库
命令:create database [新建数据库的名称];
◆选择数据库
命令:use [数据库名称];
◆删除数据库
命令:drop database [删除数据库名称];
(2)表的基本操作
◆查看当前库中的表
命令:show tables;
◆创建表
命令:create table [创建的表名] (
[列(字段)名1]
[列类型] [约束条件] [默认值]
, [列(字段)名2] [列类型] [约束条件] [默认值]
...................
)engine = 存储引擎 charset = 字符集;
注意:创建表前必须进入到数据库中或者指定在哪个库中进行创建。
◆查看表的定义
命令:desc [表名]; 或者 select
* from [表名];
◆查看表的创建过程
命令:show create table [表名] \G;
◆删除表
命令:delete [表名];
◆修改表(表中的字段类型、字段名、添加字段、删除字段、修改表名)
①修改表中字段属性(不能修改字段名)
alter table [表名] modify [字段名] [字段类型] [约束条件] [fisrt|after 列名];
②修改表中字段名及属性
alter table [表名] change [源字段名] [修改后的字段名] [字段类型] [约束条件] [fisrt|after
列名];
③增加表字段
alter table [表名] add [字段名] [字段类型] [约束条件] [first|after 列名];
④删除表字段
alter table [表名] drop [字段名];
注意:[first|after 列名],用于修改字段的排序,其中,after将新增的字段添加在某一字段后;first表示将新建的字段放在该表第一列。
◆修改表名
命令:alter table [表名] rename to [新表名];
二、MySQL简介
1.MySQL简介
MySQL是一个小型关系型数据库管理系统,为一款著名、应用最广泛的开源数据库软件,MySQL的特点有:(1)适用于中小规模、关系型数据库系统;(2)支持Linux/Unix,Windows等多种操作系统;(3)使用C和C++编写,可移植性强;
(4)通过API支持Python/Java/Perl/PHP等语言。典型的应用环境为:与Apache HTTP Server组合的LAMP平台或者与Nginx组合的LNMP平台。
2.MySQL默认库
(1)information schema 虚拟库
用于保存当前数据库服务器已有库和表的统计信息,不占用物理磁盘空间其内的数据保存在系统内存里。
(2)mysql 授权库
保存用户的授权信息,占用物理磁盘空间
(3)performance schema
保存数据服务器,运行时的运行参占用物理磁盘空间
(4)test 公共库
任意一个用户连接到数据库服务器后,对此库都拥有完全权限占用物理磁盘空间
三、MySQL列类型
1.数值型(整型列,浮点型列)
(1)整型列:tinyint、smallint、mediumint、int、bigint
a)整型列存储范围与所占空间(1字节=8位)
b)整型列的可选属性
tinyint(M) unsigned zerofill
M:宽度,一个1到255 的整数,它表示用来显示列中值的字符数。(在0填充的时候才有意义)
unsigned:无符号类型(非负)
zerofill:0填充(默认无符号)
(2)浮点型与定点型
a)浮点型:float(M,D) b)定点型:decimal(M,D)
其中,M表示精度(总位数,不包含点);D表示标度(小数位数),decimal更高精度
2.字符串类型
在字符长度一定时char的性能比varchar好,而在长度不确定时,char类型的字段在使用时性能略差。
(1)char(M)与Varchar(M)区别
★char的长度是固定的,可存储的字符数(M<=255);varchar(M)的长度是可以变化的,可存储的字节数(M<=65535)。
比如,存储字符串“abc",对于char (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的varchar(20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比
varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
★char的效率比varchar的效率稍高; varchar比char节省空间,即要想获得效率,就必须牺牲一定的空间。
★char(M)实占M个字符,不够M个,右侧补空格,取出取出右侧空格;varchar(M)有1-2个字节来标记真实的长度。
(2)时间戳
我们在开发中,精确到秒的时间表示方式不是用datetime,而是用int来表示时间戳,用时间戳方便计算并方便格式化成不同的显示样式。
3.时期时间类型
注意:特殊的NULL类型
◇NULL 不是假,也不是真,而是"空" 任何运算符,
◇判断符碰到NULL,都得NULL
◇ NULL的判断只能用is null,is not null
◇NULL 影响查询速度,一般避免使值为NULL