数据库基础
1.存储数据库的方式有哪些
特定文件/内存/第三方云服务器/数据库服务器
2.什么是数据库
数据库是按照一定的形式组织存储数据,目的是为了更好的操作数据--增删改查
(1)数据库的发展历史
网状数据库 -> 层次型数据库 -> 关系型数据库 -> (非关系型数据库(NoSQL)
(2)关系型数据库逻辑结构
Server -> Database -> Table -> Row -> Column
服务器 数据库 数据表 行 列
3.mysql数据库
服务器端:负责存储、维护数据 —— 银行数据库服务器
(1)mysql部署结构
c:/xampp/mysql/bin/mysqld.exe 启动文件
占用端口3306
客户端:负责连接服务器,对数据进行增删改查 —— ATM机
c:/xampp/mysql/bin/mysql.exe
(2)使用客户端连接服务器端
mysql.exe -h127.0.0.1 -P3306 -uroot -p
-h host IP地址/域名 127.0.0.1/localhost (指向自己电脑)
-P port 端口号
-u user 用户名 root 管理员账户
-p password 密码 xampp下root密码为空
mysql -uroot 简写形式
连接命令的结尾不能加分号,否则是游客。 |
(3)常用的管理命令
quit; 退出连接
show databases; 显示当前服务器下所有的数据库
所有的管理命令都以英文的分号结尾 |
(4)标准的SQL命令分类
定义数据(DDL):create/drop/alter(修改) 操作数据(DML):insert/delete(删除)/update(修改数据) 查询数据(DQL):select 控制权限(DCL):grant(授权)/revoke(收权) |
4.列约束
(1)默认值约束 —— default
在插入值的时候使用默认值
可以使用default来设置默认值和应用默认值
具体应用默认值有两种方式
insert into laptop values(4, ‘小米Air’, default, ....);
insert into laptop(lid,title) values(5,’小新700’);
给特定的列提供值,没有出现的列自动应用默认值
(2)检查约束 —— check
称作自定义约束,可以自己添加约束条件
create table student(
score tinyint check( score>=0 and score<=100 )
);
mysql不支持检查约束,会极大的影响数据的插入速度,后期使用js代替。
(3)外键约束
声明了外键约束的列,取值范围会在另一个表的主键列
注意事项:外键列要和对应的另一个表主键列的列类型保持一致
foreign key(外键列) references 另一个表(主键列)
5.自增列
auto_increment:自动增长,在插入值的时候只需要赋值为null,就会自动获取最大值然后加1插入。
注意事项:
自增列必须添加在整数形式的主键列
允许手动赋值
6.简单查询
(1)查询特定的列
示例:查询出所有员工的编号和姓名
select eid,ename from emp;
(2)查询所有的列
select eid,ename,sex,birthday,salary,deptId from emp;
select * from emp;
(3)给列起别名
示例:查询出所有员工的编号和姓名,使用汉字别名
select eid as 编号,ename as 姓名 from emp;
as关键字可以省略,保留即可。 给列起别名的目的是为了简化列名称。 |
(4)显示不同的记录
示例:查询出都有哪些性别的员工
select distinct sex from emp;
(5)查询时执行计算
示例:计算 1+3+5+8*7.4+5*4.39
select 1+3+5+8*7.4+5*4.39;
(6)查询结果排序
示例:查询出所有的部门,结果按照部门编号升序排列
select * from dept order by did asc; #ascendant 升序的
示例:查询出所有的部门,结果按照部门编号降序排列
select * from dept order by did desc; #descendant 降序
按照字符串排序是按照字符的编码排列 不加排序规则,默认是按照升序排列 |
示例:查询出所有的员工,结果按照工资的升序排列,要求男员工显示在前女员工显示在后
select * from emp order by sex desc, salary;
(7)条件查询
示例:查询出编号为5的员工所有列
select * from emp where eid=5;
> < >= <= = !=(不等于) |
and (&&) 并且,两个条件都满足 or (||) 或者,两个条件满足其一 between and 在两者之间 not between and 不在两者之间 is null 值为null is not null 值不为null in( ) 满足其中一个 not in( ) 都不满足 |
(8)模糊条件查询
示例:查询出姓名中含有字母o的员工有哪些
select * from emp where ename like '%o%';
% 匹配任意个字符 >=0 _ 任意一个字符 =1 |
7.计算机如何存储字符
(1)如何存储英文字符
ASCII:总共有128个,对所有的英文字母及其符号进行了编码
Latin-1:总共有256个,对欧洲字符进行的编码,兼容ASCII
(2)如何存储中文字符
GB2312:对常用的6千多汉字进行了编码,兼容ASCII
GBK:对2万多汉字进行了编码,兼容GB2312
BIG5:台湾繁字体编码
Unicode:对世界上主流国家常用的语言进行了编码,兼容ASCII,具体存储方案utf-8,utf-16,utf-32
(3)mysql中文乱码产生的原因
mysql默认使用Latin-1编码,没有对中文进行编码
(4)解决mysql中文乱码
脚本文件另存为的编码为utf-8
客户端连接服务器端的编码为utf-8
服务器端创建数据库使用的存储编码为utf-8