SELECT* FROM `student` WHERENOTEXISTS (SELECT* FROM `course` WHERENOTEXISTS (SELECT* FROM `elective` WHERE `student`.`id` = `elective`.`student_id` AND `course`.`id` = `elective`.`course_id`));
EXPLAIN returns a row of information for each table used in the SELECT statement. It lists the tables in the output in the order that MySQL would read them while processing the statement. This means that MySQL reads a row from the first table, then finds a matching row in the second table, and then in the third table, and so on. When all tables are processed, MySQL outputs the selected columns and backtracks through the table list until a table is found for which there are more matching rows. The next row is read from this table and the process continues with the next table.
fs.open('/tmp/cuckoo.log', function (err, fd) { console.log(`fd for cuckoo.log is ${fd}`); fs.open('/tmp/cuckoo.err', function (err, fd) { console.log(`fd for cuckoo.err is ${fd}`); }); });
比较奇妙的是,多次运行时拿到的文件描述符总是相同的
1 2 3 4 5 6 7 8
➜ /tmp date; node open.test.js Fri May 22 21:00:56 CST 2020 fd for cuckoo.log is 21 fd for cuckoo.err is 24 ➜ /tmp date; node open.test.js Fri May 22 21:00:59 CST 2020 fd for cuckoo.log is 21 fd for cuckoo.err is 24
@startuml left to right direction actor 员工 as yg actor 顾客 as gk actor 餐厅员工 as ctyg actor A2 as a2 actor 送餐员 as scy rectangle cos { note "没注册工资\n支付的采用\n送餐时收费" as mzc usecase 查看菜单 as ckcd usecase 注册 as zc usecase 登录 as dl usecase 订餐 as dc usecase "预约/覆盖预约" as yy usecase 备餐 as bc usecase 请求送餐 as qqsc usecase 记录送餐 as jlsc usecase 打印送餐说明 as dyscsm usecase 记录收费 as jlsf zc .> dl : <<extends>> dl .> dc : <<extends>> } actor A1 as a1 note bottom of a1 : 已注册工资支付