什么是数据库:
简而言之,就是存储数据,管理数据的仓库常见的数据库分为:
关系型数据库, Oracle、MySQL、SQLServer、Access
非关系型数据库, MongoDB、Redis、Solr、ElasticSearch、Hive、HBase
定义
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。
分类
DML(Data Manipulation Language)数据操纵语言
如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操新增Create、查询Retrieve、修改Update、删除Delete
DDL(Data Definition Language)数据库定义语言
如:create table之类
DCL(Data Control Language)数据库控制语言
如:grant、deny、revoke等,只有管理员才有相应的权限
数据查询语言(DQL:Data Query Language):
注意:SQL不区分大小写
数据库常用操作
创建数据库,数据库名称:cbg2105 create database cagb2105 default character set utf8;
删除名称是cbg2105的数据库 drop database cgb2105;
查看所有数据库 show databases;
使用数据库 use cgb2105;
表的常见操作
创建表 :create table 表名(字段名 字段类型(字段长度),字段2,字段3…)
String -> varchar
int -> int
double -> double
Create table abc(id int(3), name varchar(10), age int(3) );
Show tables; 显示所有表
删除表 : drop table 表名
Drop table abc;
修改表 --添加列
Alter table tb_door add column addr varcher (100);
Desc tb_door; 查看表的结构(描述表)
查看表
Show tables;
描述表
Desc tb_door; 查看表的结构
表里的记录的常见操作
新增:insert into 表名 values(‘字段1的值’ , “字段2的值” , …)
Insert into tb_door values (1000, ’first’, ‘0108888’, )
删除:delete from 表名
Delete from tb_door;
Select * from tb_door; 查询该表有没有被删除
删除tb_door表中id为2的数据
Delete from tb_door where id=2;
修改:update 表名 set 字段名=字段的新值
Update tb_door set address=’上海’;
修改tb_door表中id为1的记录
update tb_door set tel=555 where id=1;
查询:select 字段名 from 表名
select id from tb_door; --只查id列的值
select id,addr from tb_door; --查id和addr列的值
select * from tb_door; --查所有列的值 -- 低效
查询tb_door表中的所有记录
Select * from tb_door;
排序
将tb_door表记录按照tel排序
Select * from tb_door order by tel; 升序
Select * from tb_door order by tel desc; 降序
记录总数
查询tb_door表中的总记录数
Select count(*) from tb_door;
数据类型
命名规则:
• 字段名必须以字母开头,尽量不要使用拼音
• 长度不能超过30个字符(不同数据库,不同版本会有不同)
• 不能使用SQL的保留字,如where,order,group
• 只能使用如下字符az、AZ、0~9、$ 等
• Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name
• 多个单词用下划线隔开,而非java语言的驼峰规则
字符
• char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间
• varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2
• 大文本: 大量文字(不推荐使用,尽量使用varchar替代)
以utf8编码计算的话,一个汉字在u8下占3个字节
注:不同数据库版本长度限制可能会有不同
数字
• tinyint,int整数类型
• float,double小数类型
• numberic(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数
• decimal和numeric表示精确的整数数字
日期
• date 包含年月日
• time时分秒
• datetime包含年月日和时分秒
• timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数
图片
blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。
字段约束
没有约束,id的值可以重复,可以是null
create table a(id int)
主键约束,id的值不能重复,不能是null
create table b(id int PRIMARY key)
主键约束自动递增,id的值不能重复,不能是null,而且自动递增
create table c(id int PRIMARY key auto_increment)
没有非空约束:字段的值可以为空
create table d( name varchar(10) )
非空约束:字段的值不能为空
create table e( name varchar(10) not null )
不用唯一约束:字段的值可以重复
create table f( name varchar(10) )
唯一约束:字段的值不能重复
create table g( name varchar(10) unique )
Mysql的基础函数
常见函数
lower–全转小写
select dname from dept
select dname,lower(dname