阅读 89

Database

1.存储数据的方式有哪些

 特定的文件/内存/第三方云服务器/数据库服务器

2.什么是数据库

 数据库按照特定的形式来组织存放数据,目的是了更好的操作数据 —— 增删改查

 (1)数据库的发展历史

 网状数据库  ->  层次型数据库  ->  关系型数据库(RDBMS)  ->  非关系型数据库(NoSQL)

 (2)关系型数据库的逻辑结构

 Server   ->  Database  ->  Table  ->  Row  ->  Column 数据库服务器  数据库        数据表       行          列

 MySQL3.mysql数据库

 MariaDB

 Xampp:服务器套装,包含多款服务器端软件,例如:MySQL、Apache…

  服务器端负责存储/维护数据 —— 银行的数据库服务器

   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是mysql的管理员用户

  -p   password    密码    xampp下root的密码是空

  mysql   -uroot    简写形式

 结尾不能加分号

 (3)常用的管理命令

  quit;   退出服务器的连接

  show   databases;   显示当前数据库服务器下所有的数据库

  use   数据库名称;   进入到指定的数据库

  show  tables;   显示当前数据库下所有的数据表

  desc  数据表名称;   描述数据表中都有哪些列

 4.SQL命令

 结构化查询语言,用于操作关系型数据库服务器,主要是数据进行增删改查

 SQL命令的执行方式

 (1)交互模式

  客户端输入一行,点击回车,服务器端就会执行一行,适用于临时性的查看数据。

 (2)脚本模式

  客户端把要执行的命令写在一个脚本文件中,然后一次性的提交给服务器执行,适用于批量的操作数据

  在建立连接之前

     mysql  -uroot<拖拽要运行的脚本过来   

  (3)SQL命令的语法规范

  一行命令可以跨越多行,以英文的分号结束

  SQL命令不区分大小写,习惯上关键字大写,非关键字小写

  假设某一条命令出现语法错误,则此条命令以及后边所有命令不再执行

  分为单行注释(#..)和多行注释(/*…*/),注释的代码服务器不执行

5.SQL命令

 (1)丢弃数据库如果存在

  drop  database  if  exists  web;

 (2)创建新的数据库

  create  database  web;

 (3)进入数据库

  use  web;

 (4)创建数据表

  create  table  student(

id  int,

name  varchar(16),

sex  varchar(1),

score  int

);

 (5)插入数据

  insert  into  student  values(‘1’, … );

 (6)查询数据

  select  *  from  student;

(7)修改数据

  update  user  set  email=’tao@163.com’,….   where  uid=’3’;

 (8)删除数据

  delete  from  user  where  uid=’2’;

6.计算机如何存储字符

 (1)如何存储英文字符

  ASCII:对所有的英文字母及其符号进行了编码,总共有128个

  Latin-1:总共有256,对欧洲字符进行了编码,兼容ASCII码

 (2)如何存储中文字符

  GB2312:对常用的6000多汉字进行了编码,兼容ASCII码

  GBK:对2万多的汉字进行了编码,兼容GB2312

  BIG5:台湾繁体字编码

  Unicode:对世界上主流国家常用的语言进行了编码,总共有三种存储方案,分别是utf-8,utf-16,utf-32

 (3)mysql中文乱码产生的原因

  mysql默认使用Latin-1编码

 (4)解决mysql中文乱码

  脚本文件另存为的编码为utf-8

  客户端连接服务器端的编码为utf-8

      set  names  utf8

  服务器端创建数据库使用的存储编码为utf-8

      charset=utf8

 7.列类型

 创建表的时候,指定的类所能存储的数据类型

 create  table  news(

   nid  列类型

);

 (1)数值型 —— 引号可以省略

  tinyint  微整型,占1个字节,范围-128~127

  smallint  小整型,占2个字节,范围-32768~32767

  int  整型,占4个字节,范围-2147483648~2147483647

  bigint  大整型,占8个字节,范围很大

  float   单精度浮点型,占4个字节,比int存储的大得多,以牺牲小数点后的若干位为代价,存储的值越大精度越低

  double   双精度浮点型,占8个字节,比bigint存储的大得多,以牺牲小数点后的若干位为代价,存储的值越大精度越低

  decimal(M,D)   定点小数,小数点不会发生变化M代表总的有效位数,D代表小数点后的有效位数

  boolean/bool   布尔型,只有两个值,分别是true(真)false(假),用于存储只有那个值的数据,布尔型在使用的时候会自动转为tinyint,也可以直接插入1或者0

 true和false属于关键字,使用的时候不能加引号

 (2)日期时间型 —— 必须加引号

  date   日期型   ‘2020-12-25’

  time   时间型   ‘15:22:30’

  datetime   日期时间型  ‘2020-12-25  15:22:30’

 (3)字符串型 —— 必须加引号

  varchar(M)   变长字符串,几乎不会产生空间浪费,数据操作速度相对慢,常用于保存变化长度的数据,例如:姓名,标题,详情.. M的最大值是65535

  char(M)   定长字符串,可能产生空间浪费,数据操作速度相对快,常用于保存固定长度的数据,例如:手机号码.. M的最大值是255

  text(M)   大型变长字符串M的最大值是2

 

  12345.6789

  1234.56789e1

  123.456789e2

  12.3456789e3

  1.23456789e4

 TB   GB   MB   KB   byte(字节)   bit(位)

  1byte=8bit

  1   2   3    4    5    6     7

2进制

  1  10  11  100  101  110  111

选择合理的列类型

create table t1(

  id  int,

  age  tinyint,

  title  varchar(32),

  birthday  date,

  sex  boolean,  

  salary  decimal(7,2),    #99999.99

  phone  char(11)

);

 4.列约束

 mysql可以对要插入的数据进行验证,只有符合条件才允许插入

 例如:编号不允许重复、性别只能是男或者女、一个人的成绩在0~100之间…

 create  table  t1(

   lid  int  列约束

);

 (1)主键约束 —— primary key

  声明了主键约束的列上不允许出现重复的值,一个表中只能有一个主键约束,通常加在编号列,可以加快数据的查找速度

  主键约束的列上不允许插入null

 null:空,表示一个暂时无法确定的值,例如:无法确定一个新员工的手机号码、家庭住址

 null是关键字,使用的时候不能加引号

 (2)非空约束 —— not null

  声明了非空约束的列禁止插入null

1.列约束

 (1)唯一约束 —— unique

  声明了唯一约束的列不允许出现重复的值,一个表中可以使用多次

  (2)默认值约束

  可以使用default关键字设置默认值,具体两种应用方式

  insert  into  family  values(60, default);#通过default关键字调用列的默认值

  insert  into  family(fid) values(70); #没有出现的列自动应用默认值

  (3)检查约束 —— check

  也称为自定义约束,用户可以根据实际需求添加约束条件

  create  table  student(

    score  tinyint  check(score>=0 and score<=100)

);

 mysql不支持检查约束,会严重的影响数据的插入速度,后期可以通过JS实现

 (4)外键约束

  声明了外键约束的列,要插入的值必须在另一个表的主键列中出现才允许的插入

  外键列要和对应的主键列的列类型保持一致

  foreign key(familyid) references  family(fid)

 2.自增列 

 auto_increment:自动增长,声明了自增列,只需要赋值为null,就会获取最大值然后加1插入

 注意事项:

   必须添加在主键形式的整数列

   允许手动赋值

  10  研发部    20  市场部    30  运营部   40  测试部

 3.简单查询

 (1)查询特定的列

  示例:查询出所有员工的编号和姓名

  select eid,ename from emp;

   select ename,sex,birthday,salary from emp;

 (2)查询所有的列

  select eid,ename,sex,birthday,salary,deptId from emp;

  select * from emp;

 (3)给列起别名

  示例:查询出所有员工的编号和姓名,使用汉字别名

  select eid as 编号,ename as 姓名 from emp;

   select ename as a,sex as b,birthday as c,salary as d from emp;

  select ename a,sex b,birthday c,salary d from emp; 

 (4)显示不同的记录

  示例:查询出都有哪些性别的员工

  select distinct sex  from emp;

  示例:查询出员工都分布在哪些部门

  select distinct deptId from emp;

 (5)查询时执行计算

  示例:计算1+2+3+4

  select  1+2+3+4;

   select ename,salary*12 from emp;

   select ename 姓名,(salary+2000)*12+10000 年薪 from emp;

 (6)查询的结果排序

  示例:查询出所有的部门,结果按照编号升序排列

  select * from dept order by did asc; #ascendant升序

  示例:查询出所有的部门,结果按照编号降序排列

  select * from dept order by did desc; #descendant 降序

  示例:查询出所有的员工,结果按照工资降序排列

  select * from emp order by salary desc;

  示例:查询出所有的员工,结果按照生日的升序排列

  select * from emp order by birthday;

没有排序规则,默认是按照升序排列

按照字符串排列,是按照首个字符的Unicode码排列

 示例:查询出所有的员工,结果按照姓名排列

  select * from emp order by ename;

  示例:查询出所有的员工,结果按照工资的降序排列,如果工资相同按照姓名排列

  Select * from emp order by salary desc,ename;

  示例:查询出所有的员工,结果要求女员工显示在前,如果性别相同按照年龄从大到小排列

  select * from emp order by sex,birthday;

 (7)条件查询

  示例:查询出编号为5的员工

  select * from emp where eid=5;

  示例:查询出姓名为tao的员工

  select * from emp where ename=‘tao‘;

  示例:查询出30号部门的员工有哪些

  select * from emp where deptId=30;

比较运算符:>  <  >=  <=  =  !=(不等于)

  示例:查询出不在30号部门的员工有哪些

  select * from emp where deptId!=30;

  示例:查询出没有明确部门的员工有哪些

  select * from emp where deptId is null;

  示例:查询出有明确部门的员工有哪些

  select * from emp where deptId is not null;

  and / && 并且   两个条件都满足才可以

  or  / ||   或者   有一个条件满足就可以

  示例:查询出工资在8000以上女员工有哪些

  select * from emp where salary>8000 and sex=0;

  select * from emp where salary>8000 && sex=0;

  示例:查询出工资在6000~8000之间的员工有哪些

  select * from emp where salary>=6000 && salary<=8000;

  示例:查询出工资在6000以下或者8000以上的员工有哪些

  select * from emp where salary<6000 or salary>8000;

  select * from emp where salary<6000 || salary>8000;

  示例:查询出1993年出生的员工有哪些

  select * from emp where birthday>=‘1993-1-1‘ && birthday<=‘1993-12-31‘;

  示例:查询出20号或者30号部门的员工有哪些

  select * from emp where deptId=20 || deptId=30;

  select * from emp where deptId in(20,30);

  示例:查询出不在20号并且不在30号部门的员工有哪些

  select * from emp where deptId!=20 and deptId!=30;

  select * from emp where deptId not in(20,30);

 (8)模糊条件查询

  示例查询出姓名中含有a的员工有哪些

  select * from emp where ename like ‘%a%‘;

  示例:查询出姓名中以a结尾的员工有哪些

  select * from emp where ename like ‘%a‘;

  示例:查询出姓名中倒数第2个字符是a的员工有哪些

  select * from emp where ename like ‘%a_‘;

%  匹配任意个字符  >=0

_   匹配任意1个字符  =1

以上两个匹配的符号必须结合like关键字使用

 

原文:https://www.cnblogs.com/YJQN/p/15305954.html

文章分类
百科问答
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐