mysql锁:表级锁、行级锁、库级锁、事务锁
行级锁往往单独针对update,按操作了那些行上锁,
表级锁往往是增删查,Oracle默认的是行级锁
同步线程锁
底层存储结构:bTree
mysql:数据库管理系统(dbms)
库:存储数据的地方
表:定义一种关系,用于数据与关系的对应
视图:可以看作一个虚拟表,表结构和数据由定义的查询语句决定
作用:提高代码重用性,安全,对外接口统一
劣势:效率低下,在连表的基础上不能进行增删改
触发器:增删改操作的条件触发
作用:自动执行某些操作,减少流程
劣势:定义时不校验触发语句的有效性
insert:new
delete:old
update:new、old
存储过程:相当于void方法,但是可以有出参,注重的是过程
函数:相当于有返回值的方法,注重的是返回值
索引:主键primary key:不重复、查询检索速度快
唯一索引unique:基本同主键,但是可以有多个
普通索引index:提高查询效率
全文索引:提高查询效率,只能在MyISAM引擎的表中使用
语句的分类:
DDL:对库和表本身的操作:create、drop、alter
DML:对数据的增删改:insert、update、delete
DQL:对数据的查询:select
DCL:赋权和事务支持:grant、commit、rollback
库的结构:
create database [if not exists] 库名;
drop database [if exists] 库名;
show databases;
grant select/update/delete/drop on 库名.表名 to ‘用户名’@‘ip地址’ identified by ‘密码’
//在字符串里%是通配符,非字符串是通配符
表的操作:
create table [if not exists] 表名(
字段名 类型(长度) [属性 索引][注释],
…
)
drop table [if exists] 表名;
alter table 表名 rename to 新表名;
alter table 表名 add column 字段名 类型(长度) [属性 索引][注释];
show tables;
desc 表名;
show create table 表名;
数据操作:
update 表名 set 列名=值 [,…]where 条件;
delete from 表名 where 条件;
truncate [table] 表名;
insert into 表名 [(字段列表)] values(对应的值列表)[,…];
select [distinct] { |字段列表} from 表名 [xxx join 表名 on] [where 条件]
[group by 分组组队]
[having 分组条件]
[order by 排序字段]
[limit a,b];
事务:
备份:mysqldump [-h主机名] -u 用户名 -p [options] 库名 [表名列表]>文件路径;
恢复:mysql [-h主机名] -u 用户名 -p 库名<文件路径;
在命令行:source 文件路径;
改变结束符
delimiter @@
delimiter ;
取消自动提交
set autocommit=0;
恢复自动提交
set autocommit=1;
数据库设计:吃货联盟
商家
shop_id | shop_name | shop_type
商家详情
shop_id | shop_address | shop_phone | work_time
商家评价表
comment_id | shop_id | comment_person | comment_detail | comment_time | level
菜品
dish_id | dish_name | shop_id | price | dish_type | dish_detail | saled_num
菜品分类(字典表)
type_id | type_name
菜品评价表
comment_id | dish_id | comment_person | comment_detail | comment_time | level
用户表
user_id | user_name | phone | address | gender | birthday | pay_type
支付类型表(字典表)
pay_type_id | pay_type_name | support_brand
用户vip等级(字典表)
vip_id | user_id | charge_percent | vip_name | affect_time | deffect_time
订单(增量表)
bill_id | bill_name | user_id | dish_id | dish_num | total_price | send_person | start_time | end_time | finish_time | expire_time | status | bill_detail
订单历史(全量表)
bill_id | bill_name | user_id | dish_id | dish_num | total_price | send_person | start_time | end_time | finish_time | expire_time | status | bill_detail
配送
配送员
send_person_id | send_person_name | phone | gender
配送历史
send_history_id | send_person_id | bill_id | isSuccess |sent_time | send_distance
配送员评价
send_comment | comment_person | comment_detail | comment_time | level
mysql时间转换
1.获取当前时间戳:
select unix_timestamp(now());
select unix_timestamp();
mysql> select unix_timestamp(now());
+-----------------------+
| unix_timestamp(now()) |
+-----------------------+
| 1599030443 |
+-----------------------+
1 row in set (0.00 sec)
2.获取当前时间:
select now();
select date(now());
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2020-09-02 15:08:56 |
+---------------------+
1 row in set (0.00 sec)
3.时间转换成时间戳
mysql> select unix_timestamp('2020-07-26 00:00:00');
+---------------------------------------+
| unix_timestamp('2020-07-26 00:00:00') |
+---------------------------------------+
| 1595692800 |
+---------------------------------------+
1 row in set (0.00 sec)
4.时间戳转换成时间
mysql> select from_unixtime(785606400);
+--------------------------+
| from_unixtime(785606400) |
+--------------------------+
| 1994-11-24 00:00:00 |
+--------------------------+
1 row in set (0.00 sec)
5.时间戳转成时间同时格式化
mysql> select from_unixtime(785606400,'%Y-%m-%d %H:%i:%S');
+----------------------------------------------+
| from_unixtime(785606400,'%Y-%m-%d %H:%i:%S') |
+----------------------------------------------+
| 1994-11-24 00:00:00 |
+----------------------------------------------+
1 row in set (0.00 sec)
6.时间格式化
mysql> select date_format(now(),'%Y-%m-%d');
+-------------------------------+
| date_format(now(),'%Y-%m-%d') |
+-------------------------------+
| 2020-09-02 |
+-------------------------------+
1 row in set (0.00 sec)
7.字符串转时间
mysql> select str_to_date('2018-12-23', '%Y-%m-%d');
+---------------------------------------+
| str_to_date('2018-12-23', '%Y-%m-%d') |
+---------------------------------------+
| 2018-12-23 |
+---------------------------------------+
1 row in set (0.00 sec)
8.字符串转时间戳
mysql> select unix_timestamp('2020-02-22 22:22:22');
+---------------------------------------+
| unix_timestamp('2020-02-22 22:22:22') |
+---------------------------------------+
| 1582381342 |
+---------------------------------------+
1 row in set (0.00 sec)
SELECT s.worker_name ‘姓名’,DATE_FORMAT(s.sign_time,’%Y-%m-%d’) ‘考勤日期’, TIMESTAMPDIFF(SECOND,s.sign_time,STR_TO_DATE(CONCAT(DATE_FORMAT(s.sign_time,’%Y-%m-%d ‘),w.sign_time),’%Y-%m-%d %H:%i:%S’))/60 FROM sign_log s
JOIN work_plan w ON s.worker_name=w.worker_name