数据库(DataBase):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
用户通过数据库管理系统(DataBase Management System)访问数据库中的数据。
常见的数据库管理系统:Oracle(甲骨文)、MySQL、DB2、Microsoft SQL Server。
什么是三大范式?
第一范式(1NF):无重复的列。
第二范式(2NF):属性完全依赖于主键[消除部分子函数依赖]。
第三范式(3NF):属性不依赖于其它非主属性[消除传递依赖]。
(面试)
SQL分类
DDL数据定义语言,用来定义数据库对象:库、表、列等。
DML数据操作语言,用来定义数据库记录。
DCL数据控制语言,用来定义访问权限和安全级别。
DQL数据查询语言,用来查询记录。
SQL以分号结尾(不区分大小写,关键字建议使用大写)
mysql -u (账号root) -p (密码123456)
DDL数据定义语言
创建数据库:create database if not exists 数据库名;(不存在时才创建)
创建库时,设置编码(UTF-8在MYSQL中使用:UTF8MB4替代):
create database 数据库名 character set UTF8MB4;
查看所有数据库:show databases;
删除数据库:drop database if exists 数据库名;(表存在时才删除)
查看当前使用的数据库:select database();
切换数据库:user 数据库名;
创建表:create table 表名(列名1 数据类型,列名2 数据类型...);
查看当前数据库的表:show tables;
查看表的字段信息:desc 表名;
查看表的创建细节:show create table 表名;
alter table 表名 add 列名 数据类型;
alter table 表名 change 列名 新列名 新的数据类型;
alter table 表名 rename 新表名;
alter table 表名 drop 列名;
alter table 表名 character set 编码方式;修改表的字符集(默认为UTF-8)
常用的数据类型:
1.int整型数字
2.bigint大整型数字
3.double浮点型数字
定义的格式:score double(5,2)--小数点前5位,小数点后2位。
4.date日期,只有年月日,使用时的格式:yyyy-MM-dd HH-mm-ss
5.datetime日期+时间,包含年月日时分秒,使用时的格式(同上)
6.timestamp时间戳,13位数字,从1970-01-01到现在的毫秒数
7.varchar变长字符串
定义的格式:name varchat(20)--姓名最大使用20个字符
在oracle中,varchar被废弃了,建议使用varchar2
(面试)
char(定长字符串)与varchar的区别在于:先扩充空间,再存放数据,即使用不完也要占着。
DML数据操作语言
插入操作:insert(非数值的列值两侧需要加上单引号)
insert into 表名(列名) values(数据值);
当给所有列添加数据的时候,可以将列名省略(数据值必须按顺序添加)。
多行新增:insert into 表名t1(列名1,列名2) values(第一行数据值1,值2),(第二行数据值1,值2);
查询表的所有数据:select * from 表名;
整列修改:update 表名 set 列1=值1,列2=值2...;
修改符合条件的数据:update 表名 set 列1=值2 where 列1=值1 and ...;
(面试)
清空表格的删除方式:
delete from 表名 where 列名=值;(表删除后可以找回)
不建议使用,原因是记录过多时,效率很低。
truncate from 表名;(表删除后不能找回)
先删除表格文件,再创建,效率较高。
DCL数据控制语言
创建用户:create user 用户名@localhost(当前电脑IP) identified by ‘密码’;
指定IP才能登录:create user 用户名@‘客户端IP’ identified by ‘密码’;
任意IP均可登录:create user 用户名@‘%’ identified by ‘密码’;
给指定用户授权指定数据库的指定权限:
grant 权限1、权限2~权限n on 数据库名.* to 用户名@‘IP’;
开放所有数据库权限:grant all on *.* to 用户名@‘IP’;
用户权限查询:show grants for 用户名@‘IP’;
删除用户:drop user 用户名@‘IP’;
撤销用户权限:revoke 权限1~权限n on 数据库名.* from 用户名@‘IP’;
DQL数据查询语言
范围查询:select * from 表名 where 列名 (加not取反) in (列值1,列值2);
区间查询:select * from 表名 where 列名 between 开始值 and 结束值;
模糊查询:select * from 表名 where 列名 like ‘表达式’;(表达式必须是字符串)
通配符:_(下划线)代表任意一个字符 %代表0~n个字符
字段控制查询
去除重复记录:select distinct 列名 from 表名;
计算两列之和(横向运算,若列2的值为null,则赋值为0):
select 列1+ifnull(列2,0) as 自定义列名 from 表名;
null的比较运算不是通过=和!=来判断,而是用is nu