学编程找星哥 WeChat:574373426
之前通过IO技术可以实现数据的增删改查操作,但是执行效率低,只能保存文本数据,所有功能都由程序员自己实现,开发效率低,使用现成的数据库软件,把数据库的具体操作交给数据库软件去处理,只需要学习如何使用数据库软件即可
经过数学理论验证,可以将显示生活中的任何关系进行保存,已表为单位保存数据
一般已键值对形式保存,一般用于处理一些特殊场景,如缓存数据,比如redis数据库
(1) Mysql:Oracle公司的产品,08年被sun公司收购,09年sun公司又被Oracle收购,开源数据库,原Mysql员工从Oracle公司辞职后创办了MariaDB
(2) Oracle:Oraccle公司产品,闭源,市场排名第二
(3) SqlServer:微软公司产品,主要用于在微软的整套解决方案中,市场排名第三
开源:开放原地阿玛,通过卖服务盈利,有大牛程序员对开源项目进行无偿的维护和升级
闭源:不开放源代码,通过卖产品+服务盈利,有大牛程序员为了刷存在感不断的去攻击
结构化查询语言,用于程序员和数据库软件进行交互
1.查看所有数据库 show databases;
2.创建数据库 create database db1;
3.查看数据库详情 show create database db1;
4.创建数据库指定字符集 create database db2 character set gbk;
5.删除数据库 drop database db2;
6.使用数据库 use db1;
7.导入sql文件 再黑框里执行 source C:\Users\57437\Desktop\emp.sql;
#1.创建表 create table person ( name char(10), #字段名 字段类型 age int(3) );
#练习 创建学生表student,字段:学号id 姓名name 语文chinese 数学math 英语english create table student( id tinyint, name varchar(10), chinese int, math int,
english int );
#2.查看所有表 show tables;
#3.查看表详情 show create table student;
#–表引擎 innoDB(默认)支持事务和外键的高级操作 myisam:只支持增删改查#4.创建表指定表引擎和字符集 create table teacher ( name varchar(10), age int(3) ) engine=innoDB charset gbk;
#1. 创建2个数据库分别是mydb1和mydb2(字符集为gbk) create database mydb1; create database mydb2 character set gbk;
#2. 在mydb1里面创建员工表emp 字段: 姓名 年龄 工资(sal) use mydb1; create table emp(name varchar(10),age int,sal int);
#3. 在mydb2里面创建英雄表hero 字段: 姓名 年龄 英雄类型(type) 引擎为myisam字符集为gbk use mydb2; create table hero(name varchar(10),age int, type
varchar(10))engine=myisam charset=gbk;
#4. 删除刚创建的两个数据库 drop database mydb1; drop database mydb2;#5.查看表字段 desc student;
#6.删除表 drop table teacher;
#7.修改表名 rename table student to mystudent;
#8.修改表引擎和字符集 alter table person engine=myisam charset=gbk;
#9.添加表字段
#在末尾添加 alter table person add addr varchar(20);
#在最前面添加 alter table person add id int first;
#在***后面添加 alter table person add sex char(1) after name;
#10.删除表字段 alter table person drop sex;
#11.修改表字段名和类型 alter table person change age gender varchar(1);
#12.修改字段类型和位置 alter table person modify gender varchar(5) after id;
#1. 创建数据库mydb3 指定字符utf8 并使用 create database mydb3 character set utf8; use mydb3;
#2. 创建temp表 只有id字段 指定引擎为myisam 字符集为gbk create table temp (id int) engine=myisam charset gbk;
#3. 修改表名为t_emp rename table temp to t_emp;
#4. 修改引擎为innodb 修改字符集为utf8 alter table t_emp engine=innodb charset utf8;
#5. 在最后面添加name字段 alter table t_emp add name varchar(10);
#6. 在name前面添加age字段 alter table t_emp add age int after id;
#7. 在age后面添加工资sal字段 alter table t_emp add sal double after age;
#8. 修改sal字段名称为salary alter table t_emp change sal salary double;
#9. 修改age字段到最后面 alter table t_emp modify age int after name;
#10. 删除salary字段 alter table t_emp drop salary;
#11. 删除表 drop table t_emp;
#12. 删除数据库 drop database mydb3;
类型 | 大小 | 范围 |
---|---|---|
tinyint | 1byte | -128,127 |
smallint | 2byte | ` |
mediumint | 3byte ` | |
int/integer | 4byte ` | |
bigint | 8yte ` | |
float | 4byte | ` |
double | 8yte ` |
类型 | 大小 | 用途 |
---|---|---|
char | ` 定长字符串 | |
varchar | ` 变长字符串 | |
text | ` 长文本数据 | |
longtext | ` 极大文本数据 |
char(n)和varchar(n)中括号中的n代表字符的个数,并不代表字节,比如
char(30)就是可以存储30个字符
char(n)是定长字符串,开辟固定大小的内存
varchar(n)是边长字符串,如果字符串个数没有达到n,实际开辟的内存空间为实际的字符串个数,节省内存
类型 | 大小 | 格式 |
---|---|---|
date | ` YYYY-MM-DD | |
time | ` HH:MM:SS | |
year | ` YYYY | |
datetime | ` YYYY-MM-DD HH:MM:SS |
create database mydb1 character set utf8; use mydb1; create table emp(
id int, name varchar(10), age int ) engine=innodb charset utf8;#插入数据
#全表插入 values insert into emp values (1,‘Tom’,18);
#指定字段插入 insert into emp (id,name) value (2,‘jerry’);
#中文问题 insert into emp values(3,‘刘备’,39);
#如果以上代码报错 需要执行以下命令 set names gbk;
#批量插入 insert into emp values(4,‘关羽’,25),(5,‘张飞’,25),(6,‘貂蝉’,17);
#查询数据 select name,age from emp; select * from emp; select * from emp where age<20;
#修改数据 update emp set age=29 where name=‘刘备’;
#修改数据时,由于数据库有安全模式无法修改数据
#关闭数据库安全模式 set sql_safe_updates=0; update emp set age=10 where id=2;
#删除数据 delete from emp where age<20; delete from emp;
#1. 创建hero表 id 名字name 类型type 价格money
#2. 保存以下数据#1,诸葛亮,法师,18888
#2,周瑜,法师,13888
#3,孙悟空,打野,18888
#4,小乔,法师,13888
#5,黄忠,射手,8888
#6,刘备,战士,6888
#3. 修改所有18888为28888
#4. 修改所有法师为战士
#5. 删除价格为6888的英雄
#6. 修改小乔为猪八戒
#7. 删除价格低于15000的英雄
#8. 添加性别gender字段在name的后面
#9. 修改所有英雄的性别为男
#10. 删除所有数据
#11. 删除表
#1.is null 和 is not null
#从员工表中查询 没有上级领导的员工姓名,工资 select ename,sal from emp where mgr is null;
#查询有领导的员工姓名和上级领导编号 select ename,mgr from emp where mgr is not null;#2.起别名
select ename from emp; select ename as ‘姓名’ from emp; select ename ‘姓名’ from emp; select ename 姓名 from emp; select ename 姓名 from
emp;#3.比较运算符 > < >= <= = != <>
#查询工资在2000以下的员工姓名和工资 select ename,sal from emp where sal<2000;
#查询职位(job)是 manager的员工姓名,工资,职位 select ename,job,sal from emp where job =‘manager’;
#查询工资小于等于1600的员工姓名,职位,工资 select ename,job,sal from emp where sal<1600;
#查询不是1号部门的员工姓名和部门编号 select ename,deptno from emp where deptno !=1; select ename,deptno from emp where deptno <>1;#4.去重 distinct
#查询emp表中所有员工的职位 select distinct job from emp;#5.and和or
#and 等效java的&& or 等效java的||
#查询不是10号部门,工资小于3000的员工编号,姓名,工资,部门编号 select empno,ename,sal,deptno from emp where deptno!=10 and sal<3000;
#查询部门是30或者上级领导为7698的所有员工的姓名,部门编号,上级领导编号 select ename,deptno,mgr from emp where deptno=30 or mgr=7698;#6.in
#如果查询字段的值为多个的时候可以使用In关键字
#查询员工工资是800,950,1600的员工信息; select * from emp where sal=800 or sal=950 or sal=1600; select * from emp where sal in(800,950,1600);#7.between x and y
#在两个数值之间,包含and两边的数值
#查询工资在500-1000的所有员工名字和工资 select ename,sal from emp where sal <=1000 and sal>=500; select ename,sal from emp where sal between 500 and
1000;#8.like 模糊查询
#_:代表单个未知字符
#%:代表多个未知字符
#查询名字以K开头的所有员工名字 select ename from emp where ename like ‘k%’;
#查询商品标题包含 笔记本 的商品 select title from t_item where title like ‘%笔记本%’;
#查询商品标题第二个字是心的商品标题 select title from t_item where title like ‘_心%’;
练习
#查询单价低于100的记事本 select * from t_item where title like ‘%记事本%’ and price<100;
#查询有图片的得力商品 select * from t_item where title like ‘%得力%’ and image is not null;
#查询单价介于50到200之间的得力商品 select * from t_item where title like ‘%得力%’ and price between 50 and 200;
#查询有赠品的dell商品(卖点sell_point中带赠字) select * from t_item where title like ‘%dell%’ and sell_point like ‘%赠%’;
#查询标题不包含得力的商品 select * from t_item where title not like ‘%得力%’;
#查询价格介于50到200之外的所有商品 select * from t_item where price not between 50 and 200;#9.查询结果排序 order by
#默认是升序:asc,降序:desc
#查询员工的名称和工资,按照工资降序排序 select ename,sal from emp order by sal desc;
#查询单价在100以下的商品名称和价格,按照价格降序排序 select title,price from t_item where price<100 order by price desc;
#多字段排序,当一个字段有相同值时,按照第二个字段排序
#查询所有员工名称,部门编号,工资,部门编号按照降序排序,工资按照升序排序 select ename,deptno,sal from emp order by deptno desc,sal;
#查询所有dell商品,按照分类id升序,单价降序排序 select title,category_id,price from t_item where title like ‘%dell%’ order by category_id,price desc;*#10.limit(m-1)n,n 分页查询
#limit 从第几条开始查,每页显示几条 m表示第几页 n表示每页显示几条
#查询商品表中商品名称和价格,第二页数据,每页显示5条 select title,price from t_item limit 5,5;
#查询所有商品,单价升序,显示第三页,每页显示3条数据 select title,price from t_item order by price limit 6,3;
#查询工资最高的员工信息 select * from emp order by sal desc limit 0,1;#11.数值计算 + - * / %(mod())
#查询又有商品的单价,库存,总价 select price,num,price*num 总价 from t_item;
#%和mod()都是取余 7%2 mod(7,2)#12.日期相关函数
#获取当前日期+时间 select now();
#获取当前日期 select curdate();
#获取当前时间 select curtime();
#从日期和时间中提取日期 select date(now());
#从日期和时间中提取时间 select time(now());
#查询商品创建的年月日 select date(created_time) from t_item;
#分别提取 年 月 日 时 分 秒 select extract(year from now()); select extract(month from now()); select extract(day from now()); select
extract(hour from now()); select extract(minute from now()); select
extract(second from now());
#查询入职的年份 select ename,extract(year from hiredate) from emp;
#日期格式化date_format(时间,格式)
#%Y 4位年2018 %y 2位年18
#%m 2位月04 %c 1位月 4
#%d 日
#%H 24小时制 %h 12小时制
#%i 分 %s 秒 select date_format(now(),’%Y年%m月%d日%H时%i分%s秒’) 当前时间;
#查询商品的创建日期 按照年月日显示 select date_format(created_time,’%Y年%m月%d日’) from t_item;
#把不规则日期转化成标准格式 select str_to_date(‘25号12月2016年’,’%d号%m月%Y年’);#13.ifnull
#判断是否为空,如果是修改成逗号后面的值,如果不是修改成逗号前面的值
#把员工表 没有奖金的奖金修改位0 update emp set comm=ifnull(comm,0);#14.聚合函数
#sum() avg() max() min() count()
#查询员工表的平均工资 select ename,avg(sal) from emp;
#查询10号部门最高工资 select ename,max(sal) from emp where deptno=10;
#查询dell商品的库存总和 select sum(num) from t_item where title like ‘%dell%’;
#查询得力商品的条数 select count() from t_item where title like ‘%得力%’;
#查询员工姓名中包含a的最低工资 select ename,min(sal) from emp where ename like ‘%a%’;#15.字符串相关函数
#concat(a,b)字符串连接函数
#查询每个员工的工资,工资后面显示元 select ename,concat(sal,‘元’) from emp;#16.数学相关函数
#向下取整 select floor(3.93);
#四舍五入 select round(3.1415926,3);
#非四舍五入 select truncate(3.1415926,3);#17.分组查询 group by
#分组查询一般都会结合聚合函数
#查询条件中每个xxx 就以xxx分组
#查询每个(各个)部门中工资最高的人 select deptno,max(sal) from emp group by deptno;
#查询每个分类下的商品的库存总量 select category_id,sum(num) from t_item group by category_id;
#查询每个部门下有多少人 select deptno,count() from emp group by deptno;
#查询每个部门工资大于2000的有多少 select deptno,count() from emp where sal>2000 group by deptno;
#查询每个分类下低于100元的商品数量 select category_id,sum(num) from t_item where price<100 group by category_id;
#查询emp表中每个部门的编号,人数,工资总和,
#–最后根据人数进行升序排序,如果人数一致,根据工资总和降序排序 select deptno,count() c,sum(sal) s from emp group by deptno order by c,s desc;
#查询工资再1000-3000之间的员工信息,每个部门的编号,
#–平均工资 最高工资 根据平均工资进行升序排序 select ename,deptno,avg(sal),max(sal) from emp where sal between 1000 and 3000 group by deptno order by
avg(sal);
#查询有上级领导的员工,每个职业的人数 工资总和 平均工资 最低工资
#–最后根据人数进行降序排序,如果人数一致根据平均工资升序排序 select job,count() c,sum(sal),avg(sal) a,min(sal) from emp where mgr is not null group
by job order by c desc , a;
#查询每个部门,每个主管的手下人数 select deptno,mgr,count() from emp where mgr is not null group by deptno,mgr;
#每年的入职人数 select extract(year from hiredate) year,count() from emp group by year;#18.Having 有条件的分组
#where后面只能对普通的字段进行筛选
#having卸载group by后面,通常是和group by 结合使用
#普通条件写在where后面,聚合函数条件写在hanving后面
#查询每个部门的平均工资要求平均工资大于2000 select deptno,avg(sal) a from emp group by deptno having a>2000;
#查询所有分类的所对应的库存总量,要求库存总量大于1000 select category_id,sum(num) s from t_item group by category_id having s>1000;
#查询所有分类对应的平均单价,平均单价低于100 select category_id,avg(price) a from t_item group by category_id having a<100;
#查询每个部门中名字里面包含a的员工的平均工资,
#–只显示平均工资高于500的,按照升序排序 select ename,avg(sal) a from emp where ename like ‘%a%’ group by deptno having a>500 order by a;
#19.单表查询各个关键字的顺序
#select…from 表名 wher…group by…having…order by…limit
#查询emp表中,每个部门的平均工资高于2000的部门编号,部门人数,
#–平均工资,根据平均工资降序排序 select deptno,count(),avg(sal) a from emp group by deptno having a>2000 order by a desc;
#查询emp表中,名字不是以k开头的信息,每个部门的最低工资高于1000
#–的部门编号,工资总和,平均工资以及最低工资,根据平均工资排序 select deptno,sum(sal),avg(sal) a,min(sal) m from emp where ename not like ‘k%’ group by deptno having
m>1000 order by a;
#查询emp表中,工资再1000-3000的员工信息,每个部门编号,工资总和,平均工资
#–过滤掉平均工资低于2000的部门,平均工资升序排序,如果一致工资总和降序 select deptno,sum(sal) s,avg(sal) a from emp where sal between 1000 and 3000 group by
deptno having a<2000 order by a,s desc;
#查询emp表中,部门编号是10,30的部门员工,每个职业的最高工资低于5000的
#–职业名称,人数,平均工资,最高工资,根据人数排序,如果人数一致最高工资降序 select job,count() c,avg(sal) a,max(sal) m from emp where deptno in (10,30) group by job
having m<5000 order by c,m desc;
当一个查询语句的结果当作另一个查询语句的条件时,我们叫子查询嵌套再sql与距离的查询sql语句,子查询可以多层嵌套,可以写在where或者having后面,做查询条件还可以写在创建表的时候
#查询拿最高工资的员工姓名 select max(sal) from emp; select ename from emp where sal=(select max(sal) from emp);
#查询工资高于平均工资的员工姓名和工资 select avg(sal) from emp; select ename,sal from emp where sal>(select avg(sal) from emp);
#查询最后入职的员工信息 select max(hiredate) from emp; select * from emp where HIREdate = (select max(hiredate) from emp);
#查询出有员工的部门信息 select distinct(deptno) from emp; select * from dept where deptno in(select distinct(deptno) from emp);
#查询工资高于20号部门里面最高工资的所有员工信息 select max(sal) from emp where deptno=20; select * from emp where sal>(select max(sal) from emp where
deptno=20);
#查询和jones一样工作的员工信息 select job from emp where ename = ‘jones’; select * from emp where job=(select job from emp where ename = ‘jones’) and
ename !=‘jones’;
#查询部门平均工资最高的部门信息 select deptno,avg(sal) a from emp group by deptno order by a desc limit 1;
#-- select deptno from emp group by deptno having avg(sal)= (select avg(sal) a from emp group by deptno order by a desc limit 1);
#-- select * from dept where deptno in(select deptno from emp group by deptno having avg(sal)= (select avg(sal) a from emp group by deptno
order by a desc limit 1));#将查询出来的结果创建为一张新表 select ename,sal from emp; create table newemp as(select ename,sal from emp);
同时查询多张表的数据成为关联查询
#查询每一个员工姓名和对应的部门名称 select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
#查询每个商品的标题,商品单价,商品分类名称 select t.title,t.price,c.name from t_item t,t_item_category c where t.category_id=c.id;
#查询在new york工作的所有员工信息 select e.* from emp e,dept d where e.DEPTNO=d.DEPTNO and d.LOC=‘new york’;
关联查询如果不写关联关系,则查询结果为两个表的乘积,这个乘积为笛卡尔积
笛卡尔积是一种错误的查询结果,工作中不可出现
等值连接和内连接都是关联查询方式,效果相同 等值连接格式:select * from A,B where A.x=B.x; 内连接格式:
select * from A join B on A.x=B.x; 内连接可读性高,以后推荐使用内连接
#查询在new york工作的所有员工信息 select e.* from emp e join dept d on e.DEPTNO=d.DEPTNO and d.LOC=‘new york’;
关联查询时只查询两张表有关的数据,往往不能满足需求,如果需要查询某一张表的所有数据(包含没有关系的),则使用外连接
左外连接:以Join左边为主表查询所有数据,右边表只查询有关系的数据
右外连接:以Join右边为主表查询所有数据,左边表只查询有关系的数据
update emp set deptno=null where EMPNO=7369;
#查询所有员工的名字和对应部门名(使用左外) select e.ename,d.dname from emp e left join dept d on e.DEPTNO=d.DEPTNO;
#查询所有部门和对应的员工名称(使用右外) select e.ename,d.dname from emp e right join dept d on e.DEPTNO=d.DEPTNO;
#每个部门中,每个主管的手下人数
#每种工作的平均工资
#每年的入职人数
#少于等于3个人的部门
#拿最低工资的员工信息
#只有一个下属的主管信息
#平均工资最高的部门编号
#下属人数最多的人,查询其个人信息
#拿最低工资的人的信息
#最后入职的员工信息
#工资多于平均工资的员工信息
#查询员工信息,部门名称
#员工信息,部门名称,所在城市
#DALLAS 市所有的员工信息
#按城市分组,计算每个城市的员工数量
#查询员工信息和他的主管姓名
#员工信息,员工主管名字,部门名
#员工信息,部门名,和部门经理
#员工和他所在部门名
#案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,根据工资的等级进行升序排列
#案例:查询emp表中所有员工的编号,姓名,职位,工资以及该员工上级领导的编号,姓名,职位,工资
#案例:查询emp表中名字中没有字母’K’的所有员工的编号,姓名,职位以及所在部门的编号,名称,地址
#案例:查询dept表中所有的部门的所有的信息,以及与之关联的emp表中员工的编号,姓名,职位,工资
#案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,该等级的最低工资,按照员工的编号进行升序排列。
#每个部门中,每个主管的手下人数 select deptno,mgr,count() from emp where mgr is not null and deptno is not null group by deptno,mgr;
#每种工作的平均工资 select job,avg(sal) from emp group by job;
#每年的入职人数 select extract(year from hiredate) year,count() from emp group by year;
#少于等于3个人的部门 select deptno,count() c from emp group by DEPTNO having c<=3;
#少于等于三个人的部门信息,子查询括号里只能输出一个字段 select * from dept where DEPTNO in (select deptno from emp where DEPTNO is not null group by DEPTNO
having count()<=3);
#拿最低工资的员工信息 select * from emp where sal =(select min(sal) from emp);
#只有一个下属的主管信息
#1.子查询 select * from emp where empno in (select mgr from emp where mgr is not null group by mgr having count()=1);
#2.内连接 select mgr from emp where mgr is not null group by mgr having count()=1; select e.* from emp e join (select mgr from emp where mgr
is not null group by mgr having count()=1) c on e.empno = c.mgr;
#3.内连接 select e. from emp e join emp m on e.EMPNO = m.MGR group by m.MGR having count()=1;
#平均工资最高的部门编号 select deptno,avg(sal) from emp group by deptno order by avg(sal) desc limit 1;
#下属人数最多的人,查询其个人信息
#-查询最多的人数 select count() c from emp group by mgr order by c desc limit 1;
#-查询最多人数的上级编号 select mgr from emp group by mgr having count() = (select count() c from emp group by mgr order by c desc limit 1);
#-查询详细信息 select * from emp where empno in (select mgr from emp group by mgr having count() = (select count() c from emp group by mgr
order by c desc limit 1));
#拿最低工资的人的信息 select * from emp where sal=(select min(sal) from emp);
#最后入职的员工信息 select * from emp where HIREdate = (select max(HIREdate) from emp);
#工资多于平均工资的员工信息 select * from emp where sal>(select avg(sal) from emp);
#查询员工信息,部门名称 select e.,d.DNAME from emp e join dept d on e.DEPTNO = d.DEPTNO;
#员工信息,部门名称,所在城市 select e.,d.DNAME,d.LOC from emp e left join dept d on e.DEPTNO = d.DEPTNO;
#DALLAS 市所有的员工信息 select e.* from emp e join dept d on e.DEPTNO = d.DEPTNO where d.LOC = ‘DALLAS’;
#按城市分组,计算每个城市的员工数量 select d.LOC,count() from emp e join dept d on e.DEPTNO = d.DEPTNO group by d.LOC;
#查询员工信息和他的主管姓名 select e.,m.ENAME from emp e join emp m on e.MGR=m.EMPNO;
#员工信息,员工主管名字,部门名 select e.,m.ENAME,d.DNAME from emp e join emp m on e.MGR=m.EMPNO join dept d on e.DEPTNO=d.DEPTNO;
#员工和他所在部门名 select e.,d.DNAME from emp e join dept d on e.DEPTNO=d.DEPTNO;
#案例:查询emp表中所有员工的编号,姓名,职位,工资以及该员工上级领导的编号,姓名,职位,工资 select e.ENAME,m.EMPNO 领导编号,m.ename 领导姓名 from emp e left join emp m on e.MGR
= m.EMPNO;
#案例:查询emp表中名字中没有字母’K’的所有员工的编号,姓名,职位以及所在部门的编号,名称,地址 select * from emp e left join dept d on e.DEPTNO=d.DEPTNO where e.ENAME not like ‘%K%’;
#案例:查询dept表中所有的部门的所有的信息,以及与之关联的emp表中员工的编号,姓名,职位,工资 select * from emp e right join dept d on e.DEPTNO = d.DEPTNO;
是创建表时给字段添加的限制条件
表示数据唯一性,且不为空的字段称为主键
#创建表时添加主键约束 create table base_info( id bigint primary key, name varchar(50), age tinyint(3) );
#再原有表添加主键约束 create table base_info2( id bigint, name varchar(50), age tinyint(3) ); alter table base_info2 add constraint pk__base_info2_id
primary key(id);
表示该字段的值不能为空
#非空约束
#创建表的同时添加 create table base_info( id int primary key, name varchar(20) not null, age tinyint(3) );
#修改原有表添加 create table base_info2( id int, name varchar(20), age tinyint(3) ); alter table base_info2 modify name varchar(20) not null;
字段值不能重复
#唯一性约束 create table base_info( id int primary key, name varchar(20) not null unique, age tinyint(3) );
create table base_info2( id int, name varchar(20), age tinyint(3) );
alter table base_info2 add constraint uq__base_info2_name
unique(name);
如果该字段值为空,默认插入一个值
create table base_info( id bigint primary key, name varchar(20) not
null unique, age tinyint(3) default 18 );create table base_info2( id bigint, name varchar(20), age tinyint(3)
); alter table base_info2 alter age set default 19;
字段值如果不填则默认自增1
#自增约束 create table base_info( id int primary key auto_increment, name varchar(20), age tinyint(3) );
alter table base_info modify id int auto_increment;
外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接
一张表的一个字段受限于另外一张表的一个字段对应的值。这里涉及到两张表:被引用的表叫主表(父表),另外一张叫从表(子表)。
create table base_info( id int primary key, name varchar(20) not null
unique, age tinyint(3) default 18 );create table score( id int primary key, mysql tinyint(3), java
tinyint(3), constraint fk__score_id__base_info_id foreign key(id)
references base_info(id) on delete cascade #主表数据删除,从表对应的数据也随之删除 );
insert into base_info values(1,‘zs’,18); insert into score values
(1,60,60); delete from base_info where id =1;#添加外键 alter table score add constraint fk__score_id__base_info_id foreign key(id) references base_info(id) on delete cascade;
#删除外键操作 alter table score drop foreign key fk__score_id__base_info_id;drop table score; #先删从表 drop table base_info;#再删主表
事务是数据库中执行同一业务多条sql语句的工作单元,可以保证多条sql语句全部执行成功或全部执行失败
-事务相关指令
1.开启事务:begin;
2.提交事务:commit
3.回滚:rollbackcreate database db3; use db3;
#模拟转账流程 create table user( id int primary key auto_increment, name varchar(10), money int, status varchar(5) );insert into user values(null,‘郭德纲’,50,‘冻结’), (null,‘于谦’,5000,‘正常’),
(null,‘岳云鹏’,20,‘正常’);set sql_safe_updates=0;
#开始转账 update user set money=money-2000 where id=2 and status=‘正常’; update user set money=money+2000 where id=1 and status=‘正常’;
#有事务保护的情况下,回滚流程
#1.开启事务 begin;
#2.执行转账-于谦-200 update user set money=money-200 where id=2 and status=‘正常’;
#此时(开启事务以后)在当前终端查询数据时,
#数据已经改变(因为查询到的是内存中的改动)
#开启另外一个终端查询数据发现数据时没有改变的
#因为新的终端查询到的是磁盘的数据
#3.执行转账-郭德纲+200 update user set money=money+200 where id=1 and status=‘正常’;
#此时执行结果中发现一条成功一条失败,应该执行回滚操作 rollback;#有事务保护的情况下,提交流程
#1.开启事务 begin;
#2.执行转账-于谦-200 update user set money=money-200 where id=2 and status=‘正常’;
#3.执行转账操作-岳云鹏+200 update user set money=money+200 where id=3 and status=‘正常’;
#此时两次改动都是在内存中改完,发现两次全部成功,所以提交执行 commit;#保存回滚点 begin; update user set money=1 where id=2; savepoint s1; update user set money=2 where id=2; savepoint s2; update user set money=3
where id=2;rollback;#默认回滚到事务开始处 rollback to s1;#指定回滚到哪儿
保证事务正确执行的四大基本要素
Create drop alter truncate 不支持事务
Insert update delete select 支持事务
Select
Begin commit rollback savepoint
负责分配用户权限的相关sql
有两张表A和B,A表中有一条数据对应B表中的一条数据成为一对一关系
应用场景:用户表和用户信息扩展表/商品表和商品信息扩展表
如何建立关系:在从表中添加一个字段记录主表的id,主表中的id成为主键,从表中记录主表id的字段成为外键,主键用来表示数据的唯一性,外键用来和其他表简历关系
练习:
#创建user表 create table user( id int primary key auto_increment, username varchar(20), password varchar(20) );
#创建userinfo create table userinfo( id int, age int, phone varchar(15), addr varchar(15) );
#插入数据 insert into user values(null,‘libai’,‘admin’),(null,‘liubei’,‘123’); insert into
userinfo values(1,25,‘13333333333’,‘唐’),(2,26,‘18888888888’,‘三国’);
#查询每一个用户所有信息 select * from user u join userinfo i on u.id=i.id;
AB两张表A表中一条数据对应B表中的多条数据,并且B表中一条数据对应A表中一条数据,两张表的关系成为一对多
应用场景:部门和员工,商品和分类等
部门id | 部门名称 | 部门地址 |
---|---|---|
1098 | ||
1097 | ||
1096 |
员工id | 部门id | 员工姓名 | 员工工资 |
---|---|---|---|
1 | 1098 | ||
2 | 1098 | ||
3 | 1097 | ||
4 | 1097 | ||
5 | 1096 |
AB两张表,A表中的一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的多条数据,这种关系成为多对多
应用场景:老师表和学生表/用户表和角色表
注意:多对多设计表 要有三张表 AB两张表和AB关系表
老师id | 老师姓名 | 课程 |
---|---|---|
1 | ||
2 | ||
3 |
学生id | 学生姓名 |
---|---|
1 | |
2 | |
3 |
关系表id | 老师id | 学生id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 2 | 3 |
5 | 2 | 2 |
6 | 2 | 1 |
7 | 3 | 1 |
练习:
#创建老师表 create table teacher(id int primary key auto_increment,name varchar(20));
#创建学生表 create table student(id int primary key auto_increment,name varchar(20));
#创建老师学生关系表 create table ts(tid int,sid int);
#插入数据 insert into teacher values (null,‘唐僧’),(null,‘刘备’),(null,‘女娲’); insert into student values (null,‘悟空’),(null,‘关羽’),(null,‘小明’);
#向关系表中插入数据
#唐僧是悟空和小明的老师,刘备是关羽的老师,女娲是所有人的老师 insert into ts values (1,1),(1,3),(2,2),(3,1),(3,2),(3,3);
#查询老师和学生表中 每个学生对应的老师名字 select s.name,t.name from teacher t join ts ts on t.id = ts.tid join student s on s.id =ts.sid;
#查询女娲老师的所有学生名字 select t.name,s.name from teacher t join ts ts on t.id=ts.tid join student s on s.id=ts.sid where t.name=‘女娲’;
#查询小明的所有老师 select t.name,s.name from teacher t join ts ts on t.id=ts.tid join student s on s.id=ts.sid where s.name=‘小明’;
#采用子查询方式: select name from teacher where id in( select tid from ts where sid in( select id from student where name=‘小明’
) );
#自关联 select e.ename,m.ename from emp e join emp m on e.MGR=m.EMPNO;
创建 用户表,角色表,权限表
drop database db5; create database db5; use db5;
#创建用户表 create table user( id int primary key auto_increment, name varchar(10) );
#创建角色表 create table role( id int primary key auto_increment, name varchar(10) );
#创建用户角色关系表 create table ur( uid int, rid int );
#创建权限表 create table module( id int primary key auto_increment, name varchar(10) );
#角色权限关系表 create table rm( rid int, mid int );#插入数据 user: 刘德华,张学友,凤姐 insert into user values(null,‘刘德华’),(null,‘张学友’),(null,‘凤姐’);
#role:男游客,男会员,女游客,女管理员 insert into role values(null,‘男游客’),(null,‘男会员’),(null,‘女游客’),(null,‘女管理员’);
#module:男浏览,男发帖,女浏览,女发帖,女删帖 insert into module values(null,‘男浏览’),(null,‘男发帖’),
(null,‘女浏览’),(null,‘女发帖’),(null,‘女删帖’);#建立关系
#刘德华是男游客 张学友是男会员 凤姐是女游客和男会员 insert into ur values(1,1),(2,2),(3,3),(3,2); insert into rm
values(1,1),(2,1),(2,2),(3,3),(4,3),(4,4),(4,5);
#1.查询每个用户所对应的权限 select u.name,m.name from user u join ur ur on u.id=ur.uid join rm rm on ur.rid = rm.rid join module m on
rm.mid=m.id;
#2.查询刘德华所对应的权限 select u.name,m.name from user u join ur ur on u.id=ur.uid join rm rm on ur.rid = rm.rid join module m on
rm.mid=m.id where u.name = ‘刘德华’;
#3.男发帖的用户有哪些 select u.name,m.name from user u join ur ur on u.id=ur.uid join rm rm on ur.rid = rm.rid join module m on
rm.mid=m.id where m.name=‘男发帖’;
连接方式:内连接和外连接(左外和右外),是指通过sql查询两张数据表时使用的查询方式
关联关系:一对一,一对多,多对多,是指设计表时两张表的逻辑关系
首先理解什么是范式:数据据设计对数据存储的性能,还有开发人员对数据库的操作有很大的关系,所以建立科学规范的数据库
两列的属性相近或相似,尽量合并属性一样的列
12.2 第二范式
每一行的数据只能与其中一列相关,即一行数据只做一件事情,只要数据列中出现重复,就要把表拆分开来
如果一个人同时订几间房,就会产生一个订单号,多条数据,这样联系人都是重复的,造成数据重复,我们应该把他们拆分
这样便实现了一条数据只做一件事,不参杂复杂的逻辑关系,同时对表数据更新维护也更容易操作
数据不能存在 传递关系,即每个属性都跟主键有之间关系而不是间接关系
ABC 属性之间含有这样的关系不符合第三范式
什么是视图:数据库中存在多种对象,表和视图都是数据库中的对象,
创建试图时名称不能和表的名称重名,视图实际上代表一段sql查询语句,可以理解成视图是一张虚拟的表,表中的数据会随着原表改变而改变
为什么使用视图:因为有些数据的查询需要大量的sql语句,每次书写比较麻烦,使用视图可以起到sql重用的作用,还可以隐藏敏感字段
创建视图:
Create view 视图名 as 查询语句;
#视图-复用sql
select * from emp where deptno = 1;
create view vemp1 as (select * from emp where deptno = 1);
select * from vemp1;
#隐藏敏感字段
create view vempsal as (select empno,ename,job,mgr from emp where deptno = 1);
select * from vempsal;
简单视图:创建视图的查询中不包含:去重,函数,分组,关联查询的视图成为简单视图,简单视图可以进行增删改查操作
复杂视图:和简单视图相反
use db3;
create view vuser as (select * from user);
select * from vuser;
#视图中插入数据 – 删除修改同理
insert into vuser values (4,‘孙越’,220,‘正常’);
#视图污染 往视图中插入一条视图中不显示,但原表会显示的数据
insert into vuser values (5,‘烧饼’,220,‘正常’);
#如果需要避免数据污染的出现,创建视图的时候使用 with check option
create view vuser1 as (select * from user) with check option;
drop view vuser;
drop view vuser1;
视图是数据库中的对象,代表一段sql语句
作用:重用sql,隐藏敏感信息
分类:简单视图,复杂视图
工作中一般使用视图时只进行查询操作,如果需要增删改数据直接对原表进行操作
索引用于快速找出某个列种有一特定值的行,不使用索引,mysql必须从第一条记录开始读完整个表(全表扫描),直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表种查询的列有一个索引,mysql能够快速到达一个位置去搜索数据文件,而不必要查看所有数据,那么将会节省很大一部分时间。(新华字典举例)
例如:有一张表person,有2W行记录,仙子啊要查询出电话好吗为xxx的人,如果没有索引将从表种第一条记录一条一条往下查找,如果有了索引,那么会将phone字段通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应数据
索引可以添加到某一个字段
Mysql种的索引的存储类型有两种
Btree Hash
也就是使用树或者Hash值来存储该字段,底层都是数据结构算法,现在只需要知道索引的作用即可
优点:所有Mysql列(字段)都可以加索引,大大提高数据查询速度
缺点:创建,维护索引需要耗费时间,索引会占用空间,当表里的数据增删改时索引需要动态的维护
1、索引我们分为四类来讲 单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引、
1.1、单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引。 这里不要搞混淆了。
1.1.1、普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
1.1.2、唯一索引:索引列中的值必须是唯一的,但是允许为空值,
1.1.3、主键索引:是一种特殊的唯一索引,不允许有空值。
1.2、组合索引 在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。这个如果还不明白,等后面举例讲解时在细说
1.3、全文索引 全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有"你是个靓仔,靓女 …" 通过靓仔,可能就可以找到该条记录。这里说的是可能,因为全文索引的使用涉及了很多细节,我们只需要知道这个大概意思,如果感兴趣进一步深入使用它,那么看下面测试该索引时,会给出一个博文,供大家参考。
1.4、空间索引 空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。在创建空间索引时,使用SPATIAL关键字。要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL。
#创建普通索引
#给emp表种 ename字段添加索引 索引名为empEname
create index empEname on emp(ename);
select * from emp where ENAME=‘MILLER’;
#删除索引
drop index empEname on emp;
https://blog.csdn.net/qq_38789941/article/details/83744271
我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
6.下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’
7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
8.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)=‘abc’–name以abc开头的id
应改为:
select id from t where name like ‘abc%’
9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
11.不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(…)
12.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
13.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
14.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,
因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
15.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
16.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,
其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
17.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
18.避免频繁创建和删除临时表,以减少系统表资源的消耗。
19.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。
20.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,
以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
21.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
22.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
23.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。
24.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。
在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。
25.尽量避免大事务操作,提高系统并发能力。
26.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
mysql员工建表语句
create table emp(
EMPNO int(4) primary key,
ENAME varchar(10) not null,
JOB varchar(9),
MGR int(4),
HIREdate date,
SAL double(7,2),
COMM double(7,2),
DEPTNO int(4)
);
create table dept(
DEPTNO int(4) primary key,
DNAME varchar(14) not null unique,
LOC varchar(13)
);
insert into dept VALUES (10,‘ACCOUNTING’,‘NEW YORK’);
insert into dept VALUES (20,‘RESEARCH’,‘DALLAS’);
insert into dept VALUES (30,‘SALES’,‘CHICAGO’);
insert into dept VALUES (40,‘OPERATIONS’,‘BOSTON’);
SELECT * FROM dept;
insert into emp VALUES
(7369,‘SMITH’,‘CLERK’,7902,str_to_date(‘17-12-1980’,’%d-%m-%Y’),800,null,20);
insert into emp VALUES
(7499,‘ALLEN’,‘SALESMAN’,7698,str_to_date(‘20-2-1981’,’%d-%m-%Y’),1600,300,30);
insert into emp VALUES
(7521,‘WARD’,‘SALESMAN’,7698,str_to_date(‘22-2-1981’,’%d-%m-%Y’),1250,500,30);
insert into emp VALUES
(7566,‘JONES’,‘MANAGER’,7839,str_to_date(‘2-4-1981’,’%d-%m-%Y’),2975,NULL,20);
insert into emp VALUES
(7654,‘MARTIN’,‘SALESMAN’,7698,str_to_date(‘28-9-1981’,’%d-%m-%Y’),1250,1400,30);
insert into emp VALUES
(7698,‘BLAKE’,‘MANAGER’,7839,str_to_date(‘1-5-1981’,’%d-%m-%Y’),2850,NULL,30);
insert into emp VALUES
(7782,‘CLARK’,‘MANAGER’,7839,str_to_date(‘9-6-1981’,’%d-%m-%Y’),2450,NULL,10);
insert into emp VALUES
(7839,‘KING’,‘PRESIDENT’,NULL,str_to_date(‘17-11-1981’,’%d-%m-%Y’),5000,NULL,10);
insert into emp VALUES
(7844,‘TURNER’,‘SALESMAN’,7698,str_to_date(‘8-9-1981’,’%d-%m-%Y’),1500,0,30);
insert into emp VALUES
(7900,‘JAMES’,‘CLERK’,7698,str_to_date(‘3-12-1981’,’%d-%m-%Y’),950,NULL,30);
insert into emp VALUES
(7902,‘FORD’,‘ANALYST’,7566,str_to_date(‘3-12-1981’,’%d-%m-%Y’),3000,NULL,20);
insert into emp VALUES
(7934,‘MILLER’,‘CLERK’,7782,str_to_date(‘23-1-1982’,’%d-%m-%Y’),1300,NULL,10);
commit;
mysql商城建表语句
DROP TABLE IF EXISTS t_item
;
CREATE TABLE t_item
(
id
varchar(200) NOT NULL COMMENT ‘商品id’,
category_id
bigint(20) DEFAULT NULL COMMENT ‘分类id’,
item_type
varchar(100) DEFAULT NULL COMMENT ‘商品系列’,
title
varchar(100) DEFAULT NULL COMMENT ‘商品标题’,
sell_point
varchar(150) DEFAULT NULL COMMENT ‘商品卖点’,
price
bigint(20) DEFAULT NULL COMMENT ‘商品单价’,
num
int(10) DEFAULT NULL COMMENT ‘库存数量’,
barcode
varchar(30) DEFAULT NULL COMMENT ‘条形码’,
image
varchar(500) DEFAULT NULL COMMENT ‘图片路径’,
status
int(1) DEFAULT ‘1’ COMMENT ‘商品状态 1:上架 2:下架 3:删除’,
priority
int(10) DEFAULT NULL COMMENT ‘显示优先级’,
created_time
datetime DEFAULT NULL COMMENT ‘创建时间’,
modified_time
datetime DEFAULT NULL COMMENT ‘最后修改时间’,
created_user
varchar(50) DEFAULT NULL COMMENT ‘创建人’,
modified_user
varchar(50) DEFAULT NULL COMMENT ‘最后修改人’,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO t_item
VALUES
(‘10000000’,238,‘牛皮纸记事本’,‘广博(GuangBo)10本装40张A5牛皮纸记事本子日记本办公软抄本GBR0731’,‘经典回顾!超值特惠!’,23,99999,NULL,’/images/portal/00GuangBo1040A5GBR0731/collect.png’,1,53,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000001’,238,‘牛皮纸记事本’,‘广博(GuangBo)10本装40张A5牛皮纸记事本子日记本办公软抄本GBR0731’,‘经典回顾!超值特惠!’,23,99999,NULL,’/images/portal/00GuangBo1040A5GBR0731/collect.png’,1,62,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000002’,238,‘皮面日程本’,‘广博(GuangBo)皮面日程本子 计划记事本效率手册米色FB60322’,‘经典回顾!超值特惠!’,46,99999,NULL,’/images/portal/001GuangBo)FB60322/collect.png’,1,49,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000021’,238,‘皮面日程本’,‘广博(GuangBo)皮面日程本子 计划记事本效率手册蓝色FB60321’,‘经典回顾!超值特惠!’,22,99999,NULL,’/images/portal/001GuangBo)FB60322/collect.png’,1,73,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000003’,238,‘记事本日记本笔记本’,‘广博(GuangBo)16K115页线圈记事本子日记本文具笔记本图案随机’,‘经典回顾!超值特惠!’,13,99999,NULL,’/images/portal/01GuangBo16K115FB60506/collect.png’,1,58,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000004’,241,‘计算器’,‘得力(deli)1548A商务办公桌面计算器 太阳能双电源’,‘经典回顾!超值特惠!’,58,99999,NULL,’/images/portal/002calculator1548A/collect.png’,1,42,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000005’,241,‘圆珠笔’,‘施耐德(Schneider) K15 经典款圆珠笔 (5支混色装)’,‘经典回顾!超值特惠!’,29,99999,NULL,’/images/portal/03SchneiderK15/collect.png’,1,36,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000006’,236,‘票据网格拉链袋’,‘三木(SUNWOOD) C4523 票据网格拉链袋/文件袋 12个装 颜色随机’,‘经典回顾!超值特惠!’,28,99999,NULL,’/images/portal/04_SUNWOODC452312/collect.png’,1,53,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000007’,163,‘燃 7000经典版’,‘戴尔Dell 燃700金色’,‘下单赠12000毫安移动电源’,32999,99999,NULL,’/images/portal/11DELLran7000gold/collect.png’,1,59,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000008’,163,‘燃 7000经典版’,‘戴尔Dell 燃700R1605银色’,‘仅上海,广州,沈阳仓有货!预购从速!’,4549,99999,NULL,’/images/portal/11DELLran7000R1605Ssilvery/collect.png’,1,32,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000009’,163,‘燃 7000学习版’,‘戴尔Dell 燃700金色’,‘下单赠12000毫安移动电源’,39929,99999,NULL,’/images/portal/11DELLran7000gold/collect.png’,1,84,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000010’,163,‘燃 7000学习版’,‘戴尔Dell 燃700R1605银色’,‘仅上海,广州,沈阳仓有货!预购从速!’,5559,99999,NULL,’/images/portal/11DELLran7000R1605Ssilvery/collect.png’,1,21,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000011’,163,‘燃 7000高配版’,‘戴尔Dell 燃700金色’,‘下单赠12000毫安移动电源’,3994,99999,NULL,’/images/portal/11DELLran7000gold/collect.png’,1,56,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000012’,163,‘燃 7000高配版’,‘戴尔Dell 燃700R1605银色’,‘仅上海,广州,沈阳仓有货!预购从速!’,6559,99999,NULL,’/images/portal/11DELLran7000R1605Ssilvery/collect.png’,1,16,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000013’,238,‘A5优品商务笔记本’,‘齐心(COMIX)C5902 A5优品商务笔记本子记事本日记本122张’,‘下单即送10400毫安移动电源!再赠手机魔法盒!’,41,99999,NULL,’/images/portal/02COMIXC5902A5122blue/collect.png’,1,10,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000014’,163,‘XPS13-9360’,‘戴尔(DELL)XPS13-9360-R1609 13.3’,‘仅上海,广州,沈阳仓有货!预购从速!’,4600,99999,NULL,’/images/portal/12(DELL)XPS13gold/collect.png’,1,1,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000015’,163,‘XPS13-9360’,‘戴尔(DELL)XPS13-9360-R1609 13.3’,‘仅上海,广州,沈阳仓有货!预购从速!’,4601,99999,NULL,’/images/portal/12DELLXPS13-silvery/collect.png’,1,73,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000016’,163,‘XPS13-9360’,‘戴尔(DELL)XPS13-9360-R1609 13.3’,‘仅上海,广州,沈阳仓有货!预购从速!’,4602,99999,NULL,’/images/portal/12(DELL)XPS13gold/collect.png’,1,64,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000017’,163,‘XPS13-9360’,‘戴尔(DELL)XPS13-9360-R1609 13.3’,‘仅上海,广州,沈阳仓有货!预购从速!’,4604,99999,NULL,’/images/portal/12DELLXPS13-silvery/collect.png’,1,100,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000018’,163,‘XPS13-9360’,‘戴尔(DELL)XPS13-9360-R1609 13.3’,‘仅上海,广州,沈阳仓有货!预购从速!’,4605,99999,NULL,’/images/portal/12(DELL)XPS13gold/collect.png’,1,7,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000019’,163,‘XPS13-9360’,‘戴尔(DELL)XPS13-9360-R1609 13.3’,‘仅上海,广州,沈阳仓有货!预购从速!’,4899,99999,NULL,’/images/portal/12DELLXPS13-silvery/collect.png’,1,34,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000020’,163,‘IdeaPad310低配版’,‘联想(Lenovo)IdeaPad310低配版’,‘清仓!仅北京,武汉仓有货!’,5119,99999,NULL,’/images/portal/13LenovoIdeaPad310_black/collect.png’,1,50,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000021’,163,‘IdeaPad310低配版’,‘联想(Lenovo)IdeaPad310低配版’,‘清仓!仅北京,武汉仓有货!’,5129,99999,NULL,’/images/portal/13LenovoIdeaPad310_silvery/collect.png’,1,48,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000022’,163,‘IdeaPad310经典版’,‘联想(Lenovo)IdeaPad310经典版’,‘清仓!仅北京,武汉仓有货!’,5119,99999,NULL,’/images/portal/13LenovoIdeaPad310_black/collect.png’,1,90,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000023’,163,‘IdeaPad310经典版’,‘联想(Lenovo)IdeaPad310经典版’,‘清仓!仅北京,武汉仓有货!’,5129,99999,NULL,’/images/portal/13LenovoIdeaPad310_silvery/collect.png’,1,6,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000024’,163,‘IdeaPad310高配版’,‘联想(Lenovo)IdeaPad310高配版’,‘清仓!仅北京,武汉仓有货!’,5119,99999,NULL,’/images/portal/13LenovoIdeaPad310_black/collect.png’,1,60,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000025’,163,‘IdeaPad310高配版’,‘联想(Lenovo)IdeaPad310高配版’,‘清仓!仅北京,武汉仓有货!’,5129,99999,NULL,’/images/portal/13LenovoIdeaPad310_silvery/collect.png’,1,80,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000026’,163,‘YOGA710’,‘联想(Lenovo)YOGA710 14英寸触控笔记本(i7-7500U 8G 256GSSD 2G独显 全高清IPS 360°翻转 正版office)金’,’【0元献礼】好评过万,销量传奇!经典蓝光电视,独有自然光技术专利,过大年带最好的回家!【0元白条试用,1001个拜年计划】’,59999,99999,NULL,’/images/portal/14LenovoYOGA710 _gold/collect.png’,1,19,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000027’,163,‘YOGA710’,‘联想(Lenovo)YOGA710 14英寸触控笔记本(i7-7500U 8G 256GSSD 2G独显 全高清IPS 360°翻转 正版office)银’,’【0元献礼】好评过万,销量传奇!经典蓝光电视,独有自然光技术专利,过大年带最好的回家!【0元白条试用,1001个拜年计划】’,59999,99999,NULL,’/images/portal/14LenovoYOGA710 _silvery/collect.png’,1,55,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000028’,163,‘310低配版’,‘联想(Lenovo)小新310低配版’,‘清仓!仅北京,武汉仓有货!’,4939,99999,NULL,’/images/portal/15Lenovo_xiaoxin_310_black/collect.png’,1,19,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000029’,163,‘310低配版’,‘联想(Lenovo)小新310低配版’,‘清仓!仅北京,武汉仓有货!’,4839,99999,NULL,’/images/portal/15Lenovo_xiaoxin_310_silvery/collect.png’,1,27,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000030’,163,‘310经典版’,‘联想(Lenovo)小新310经典版’,‘清仓!仅北京,武汉仓有货!’,4739,99999,NULL,’/images/portal/15Lenovo_xiaoxin_310_black/collect.png’,1,78,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000031’,163,‘310经典版’,‘联想(Lenovo)小新310经典版’,‘清仓!仅北京,武汉仓有货!’,4639,99999,NULL,’/images/portal/15Lenovo_xiaoxin_310_silvery/collect.png’,1,9,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000032’,163,‘310高配版’,‘联想(Lenovo)小新310高配版’,‘清仓!仅北京,武汉仓有货!’,4539,99999,NULL,’/images/portal/15Lenovo_xiaoxin_310_black/collect.png’,1,9,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000033’,163,‘310高配版’,‘联想(Lenovo)小新310高配版’,‘清仓!仅北京,武汉仓有货!’,4439,99999,NULL,’/images/portal/15Lenovo_xiaoxin_310_silvery/collect.png’,1,18,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000034’,163,‘YOGA900’,‘联想(Lenovo)YOGA900绿色’,‘青春的活力 清新漂亮高端大气上档次’,5200,99999,NULL,’/images/portal/16LenovoYOGA900green/collect.png’,1,63,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000035’,163,‘YOGA900’,‘联想(Lenovo)YOGA900粉色’,‘青春的活力 清新漂亮高端大气上档次’,5200,99999,NULL,’/images/portal/16LenovoYOGA900pink/collect.png’,1,62,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000036’,163,‘YOGA900’,‘联想(Lenovo)YOGA900红色’,‘青春的活力 清新漂亮高端大气上档次’,5200,99999,NULL,’/images/portal/16LenovoYOGA900red/collect.png’,1,21,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000037’,163,‘小新13旗舰版’,‘联想(Lenovo)小新Air13 Pro 13.3英寸14.8mm超轻薄笔记本电脑’,‘青春的活力 青年专属’,6439,99999,NULL,’/images/portal/17Lenovo)xiaoxinAir13Pro_gold/collect.png’,1,16,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000038’,163,‘小新13旗舰版’,‘联想(Lenovo)小新Air13 Pro 13.3英寸14.8mm超轻薄笔记本电脑’,‘青春的活力 青年专属’,6439,99999,NULL,’/images/portal/17Lenovo)xiaoxinAir13Pro_silvery/collect.png’,1,17,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000039’,163,‘XPS15’,‘戴尔(DELL) XPS15 银色’,‘限时特价!好评过万条优秀产品!’,3333,99999,NULL,’/images/portal/18(DELL)XPS15_silvery/collect.png’,1,37,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000391’,163,‘XPS15’,‘戴尔(DELL) XPS15 金色’,‘限时特价!好评过万条优秀产品!’,3333,99999,NULL,’/images/portal/18(DELL)XPS15_silvery/collect.png’,1,81,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000040’,163,‘DELL 15MF Pro’,‘戴尔(DELL)魔方15MF Pro-R2505TSS灵越’,‘15.6英寸二合一翻转笔记本电脑 (i5-7200U 8GB 1TB IPS Win10)触控银’,4443,99999,NULL,’/images/portal/19DELL15MF Pro/collect.png’,1,35,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000401’,163,‘DELL 15MF Pro’,‘戴尔(DELL)魔方15MF Pro-R2505TSS灵越’,‘15.6英寸二合一翻转笔记本电脑 (i5-7200U 8GB 1TB IPS Win10)触控白’,4443,99999,NULL,’/images/portal/19DELL15MF Pro/collect.png’,1,86,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000402’,163,‘DELL 15MF Pro’,‘戴尔(DELL)魔方15MF Pro-R2505TSS灵越’,‘15.6英寸二合一翻转笔记本电脑 (i7-7200U 8GB 512GB IPS Win10)触控银’,6443,99999,NULL,’/images/portal/19DELL15MF Pro/collect.png’,1,84,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000403’,163,‘DELL 15MF Pro’,‘戴尔(DELL)魔方15MF Pro-R2505TSS灵越’,‘15.6英寸二合一翻转笔记本电脑 (i7-7200U 8GB 512GB IPS Win10)触控白’,6443,99999,NULL,’/images/portal/19DELL15MF Pro/collect.png’,1,63,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000041’,163,‘DELL XPS15-9550’,‘戴尔(DELL) XPS15升级版 ‘,‘15.6英寸二合一翻转笔记本电脑 (i5-7200U 8GB 1TGB IPS Win10)触控’,8443,99999,NULL,’/images/portal/20DellXPS15-9550/collect.png’,1,61,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000411’,163,‘DELL XPS15-9550’,‘戴尔(DELL) XPS15升级版 ‘,‘15.6英寸二合一翻转笔记本电脑 (i5-7200U 8GB 256GB IPS Win10)触控’,8443,99999,NULL,’/images/portal/20DellXPS15-9550/collect.png’,1,60,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000412’,163,‘DELL XPS15-9550’,‘戴尔(DELL) XPS15升级版 ‘,‘15.6英寸二合一翻转笔记本电脑 (i7-7200U 8GB 1TB IPS Win10)触控’,8443,99999,NULL,’/images/portal/20DellXPS15-9550/collect.png’,1,13,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000413’,163,‘DELL XPS15-9550’,‘戴尔(DELL) XPS15升级版 ‘,‘15.6英寸二合一翻转笔记本电脑 (i7-7200U 8GB 256GB IPS Win10)触控’,8443,99999,NULL,’/images/portal/20DellXPS15-9550/collect.png’,1,83,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000042’,163,‘ThinkPad New s1’,‘联想ThinkPad New S2(01CD) i5 6代 红色’,‘经典回顾!超值特惠!’,4399,99999,NULL,’/images/portal/21ThinkPad_New_S1/collect.png’,1,99,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000421’,163,‘ThinkPad New s1’,‘联想ThinkPad New S2(01CD) i7 6700 红’,‘经典回顾!超值特惠!’,6399,99999,NULL,’/images/portal/21ThinkPad_New_S1/collect.png’,1,74,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000422’,163,‘ThinkPad New s1’,‘联想ThinkPad New S2(01CD) i5 6代 黄’,‘经典回顾!超值特惠!’,4399,99999,NULL,’/images/portal/21ThinkPad_New_S1/collect.png’,1,23,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000424’,163,‘ThinkPad New s1’,‘联想ThinkPad New S2(01CD) i5 6代 蓝’,‘经典回顾!超值特惠!’,4399,99999,NULL,’/images/portal/21ThinkPad_New_S1/collect.png’,1,87,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘100000425’,163,‘ThinkPad New s1’,‘联想ThinkPad New S2(01CD) i7 6700 蓝’,‘经典回顾!超值特惠!’,6399,99999,NULL,’/images/portal/21ThinkPad_New_S1/collect.png’,1,59,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000043’,917,‘书包 bag’,‘乐尚书包 电脑包 bag黑色’,‘给你满载而归的喜悦!’,89,99999,NULL,’/images/portal/22_LEXON_LNE6025B06T/collect.png’,1,12,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’),
(‘10000044’,917,‘书包 bag’,‘乐尚书包 电脑包 bag粉色’,‘给你满载而归的喜悦!’,89,99999,NULL,’/images/portal/22_LEXON_LNE6025B06T/collect.png’,1,62,‘2017-10-25 15:08:55’,‘2017-10-25 15:08:55’,‘admin’,‘admin’);
DROP TABLE IF EXISTS t_item_category
;
CREATE TABLE t_item_category
(
id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键’,
parent_id
bigint(20) DEFAULT NULL COMMENT ‘父分类id’,
name
varchar(150) DEFAULT NULL COMMENT ‘名称’,
status
int(1) DEFAULT ‘1’ COMMENT ‘状态 1:正常 2:删除’,
sort_order
int(4) DEFAULT NULL COMMENT ‘排序号’,
is_parent
tinyint(1) DEFAULT NULL COMMENT ‘是否是父分类 1:是 0:否’,
created_time
datetime DEFAULT NULL COMMENT ‘创建时间’,
modified_time
datetime DEFAULT NULL COMMENT ‘最后修改时间’,
created_user
varchar(50) DEFAULT NULL COMMENT ‘创建人’,
modified_user
varchar(50) DEFAULT NULL COMMENT ‘最后修改人’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=1183 DEFAULT CHARSET=utf8;
INSERT INTO t_item_category
VALUES
(163,162,‘笔记本’,1,1,0,‘2017-10-25 15:00:55’,‘2017-10-25 15:00:55’,‘admin’,‘admin’),
(236,229,‘文件管理’,1,7,0,‘2017-10-25 15:00:55’,‘2017-10-25 15:00:55’,‘admin’,‘admin’),
(238,229,‘本册/便签’,1,9,0,‘2017-10-25 15:00:55’,‘2017-10-25 15:00:55’,‘admin’,‘admin’),
(241,229,‘笔类’,1,12,0,‘2017-10-25 15:00:55’,‘2017-10-25 15:00:55’,‘admin’,‘admin’),
(917,913,‘双肩包’,1,4,0,‘2017-10-25 15:00:55’,‘2017-10-25 15:00:55’,‘admin’,‘admin’)