/* Create the trx sys file block in a new allocated file segment */
block = fseg_create(TRX_SYS_SPACE, 0, TRX_SYS + TRX_SYS_FSEG_HEADER,
mtr); //建立segment
buf_block_dbg_add_level(block, SYNC_TRX_SYS_HEADER);
ut_a(block->page.id.page_no() == TRX_SYS_PAGE_NO);
page = buf_block_get_frame(block); //获取内存位置
mlog_write_ulint(page + FIL_PAGE_TYPE, FIL_PAGE_TYPE_TRX_SYS, //写入block 的类型
MLOG_2BYTES, mtr);
...
/* Start counting transaction ids from number 1 up */
mach_write_to_8(sys_header + TRX_SYS_TRX_ID_STORE, 1); // 初始化TRX_SYS_TRX_ID_STORE
/* Reset the rollback segment slots. Old versions of InnoDB
define TRX_SYS_N_RSEGS as 256 (TRX_SYS_OLD_N_RSEGS) and expect
that the whole array is initialized. */
ptr = TRX_SYS_RSEGS + sys_header;
len = ut_max(TRX_SYS_OLD_N_RSEGS, TRX_SYS_N_RSEGS)
* TRX_SYS_RSEG_SLOT_SIZE;//TRX_SYS_OLD_N_RSEGS 为256个
memset(ptr, 0xff, len); //将slot的信息的全部初始化为ff
ptr += len;
ut_a(ptr <= page + (UNIV_PAGE_SIZE - FIL_PAGE_DATA_END));
/* Initialize all of the page. This part used to be uninitialized. */
memset(ptr, 0, UNIV_PAGE_SIZE - FIL_PAGE_DATA_END + page - ptr); //将剩下的空间设置为0x00
mlog_log_string(sys_header, UNIV_PAGE_SIZE - FIL_PAGE_DATA_END
+ page - sys_header, mtr);
/* Create the first rollback segment in the SYSTEM tablespace */
slot_no = trx_sysf_rseg_find_free(mtr, false, 0);
page_no = trx_rseg_header_create(TRX_SYS_SPACE, univ_page_size,
ULINT_MAX, slot_no, mtr); //将第一个slot固定在ibdata中
/** Transaction system header */
/*------------------------------------------------------------- @{ */
#define TRX_SYS_TRX_ID_STORE 0 /*!< the maximum trx id or trx
number modulo
TRX_SYS_TRX_ID_UPDATE_MARGIN
written to a file page by any
transaction; the assignment of
transaction ids continues from
this number rounded up by
TRX_SYS_TRX_ID_UPDATE_MARGIN
plus
TRX_SYS_TRX_ID_UPDATE_MARGIN
when the database is
started */ //最大的事物ID,下次实例启动会加上TRX_SYS_TRX_ID_UPDATE_MARGIN启动
#define TRX_SYS_FSEG_HEADER 8 /*!< segment header for the
tablespace segment the trx
system is created into */
#define TRX_SYS_RSEGS (8 + FSEG_HEADER_SIZE)
/*!< the start of the array of
rollback segment specification
slots *///指向rollback segment header的槽
/*------------------------------------------------------------- @} */
./myblock undo001 -d|more
current read blocks is : 0 --This Block is file space header blocks!
current read blocks is : 1 --This Block is insert buffer bitmap blocks!
current read blocks is : 2 --This Block is inode blocks!
current read blocks is : 3 --This Block is system blocks!
current read blocks is : 4 --This Block is system blocks!
current read blocks is : 5 --This Block is system blocks!
current read blocks is : 6 --This Block is system blocks!
current read blocks is : 7 --This Block is system blocks!
current read blocks is : 8 --This Block is system blocks!
current read blocks is : 9 --This Block is system blocks!
current read blocks is : 10 --This Block is system blocks!
current read blocks is : 11 --This Block is system blocks!
current read blocks is : 12 --This Block is system blocks!
current read blocks is : 13 --This Block is system blocks!
current read blocks is : 14 --This Block is system blocks!
current read blocks is : 15 --This Block is system blocks!
current read blocks is : 16 --This Block is system blocks!
current read blocks is : 17 --This Block is system blocks!
current read blocks is : 18 --This Block is system blocks!
current read blocks is : 19 --This Block is system blocks!
current read blocks is : 20 --This Block is system blocks!
current read blocks is : 21 --This Block is system blocks!
current read blocks is : 22 --This Block is system blocks!
current read blocks is : 23 --This Block is system blocks!
current read blocks is : 24 --This Block is system blocks!
current read blocks is : 25 --This Block is system blocks!
current read blocks is : 26 --This Block is system blocks!
current read blocks is : 27 --This Block is undo blocks!
current read blocks is : 28 --This Block is undo blocks!
current read blocks is : 29 --This Block is undo blocks!
current read blocks is : 30 --This Block is undo blocks!
current read blocks is : 31 --This Block is undo blocks!
current read blocks is : 32 --This Block is undo blocks!
current read blocks is : 33 --This Block is undo blocks!
current read blocks is : 34 --This Block is undo blocks!
current read blocks is : 35 --This Block is undo blocks!
current read blocks is : 36 --This Block is undo blocks!
current read blocks is : 37 --This Block is undo blocks!
current read blocks is : 38 --This Block is new allocate blocks!
current read blocks is : 39 --This Block is new allocate blocks!
current read blocks is : 40 --This Block is new allocate blocks!
current read blocks is : 41 --This Block is new allocate blocks!
current read blocks is : 42 --This Block is new allocate blocks!
package com.lipengge.mybatis.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.lipengge.mybatis.bean.User;
public class UserDaoImpl implements UserDao{
private SqlSessionFactory sfb;
public UserDaoImpl(SqlSessionFactory sfb) {
this.sfb=sfb;
}
//根据id查找用户
@Override
public User findUserById(int id) throws Exception {
SqlSession sqlSession = sfb.openSession();
User selectOne = sqlSession.selectOne("test.findUserById",id);
sqlSession.close();
return selectOne;
}
@Override
//根据姓名模糊查询用户
public List<User> findUserByName(String name) throws Exception {
SqlSession sqlSession = sfb.openSession();
List<User> selectList = sqlSession.selectList("test.findUserByName",name);
sqlSession.close();
return selectList;
}
@Override
////插入用户
public void insertUserById(User user) throws Exception {
SqlSession sqlSession = sfb.openSession();
sqlSession.insert("test.insertUserById", user);
sqlSession.commit();//提交
sqlSession.close();
}
@Override
///根据id删除用户
public void deleteUserById(int id) throws Exception {
SqlSession sqlSession = sfb.openSession();
sqlSession.delete("test.deleteUserById",id);
sqlSession.commit();
sqlSession.close();
}
}
package com.lipengge.mybatis.first;
import static org.junit.Assert.*;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.lipengge.mybatis.bean.User;
import com.lipengge.mybatis.dao.UserDaoImpl;
public class TestUserDaoImpl {
private SqlSessionFactory ssf;
@Before
//这里使用JUnit测试所以设置单例模式而是在测试之前生成SqlSessionFactory
public void setUp() throws Exception {
String resource="SqlMapConfig.xml";//全局配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
ssf=new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test() throws Exception {
UserDaoImpl udi=new UserDaoImpl(ssf);
System.out.println(udi.findUserById(6));
System.out.println(udi.findUserByName("振川"));
User user=new User();
user.setUser_name("小刘");
user.setUser_age(22);
user.setUser_sex("女");
udi.insertUserById(user);
System.out.println(user.getId());
udi.deleteUserById(20);
}
}create table `test` (
`id` varchar(10) not null,
`name` varchar(10) not null,
`age` tinyint not null,
`staffNo` tinyint not null,
`dept` varchar(5) not null,
`team` varchar(5) default null,
`gender` varchar(5) not null,
`home` varchar(30) default null,
`zipcode` varchar(6) not null,
`company` varchar(10) not null,
key(`company`),
unique key(`zipcode`),
primary key(`name`,`age`, `id`),
unique key(`dept`,`staffNo`,`team`),
key (`gender`,`home`)
);
from bs4 import BeautifulSoup
from selenium import webdriver
import time, csv, lxml
def open_url(url, browser): #模拟chrome打开网页#
browser.get(url)
time.sleep(0.5) #间隔0.5s,表格中没有数据就设置长一点#
html = browser.page_source
soup = BeautifulSoup(html, features='lxml')
return soup
def get_month(): #爬取月份#
monthlist = []
for i in range(1, 10):
monthlist.append(f'2018-0{i}')
for i in range(10, 13):
monthlist.append(f'2018-{i}')
return monthlist
def get_city(): #爬取城市#
citylist = []
city_url = 'https://www.aqistudy.cn/historydata/'
city_soup = open_url(city_url, chrome)
cityset = citysoup.findAll('div', {'class': 'all'})[0].findAll('li')
for city in cityset:
city = city.text.strip() #去掉空格
citylist.append(city)
return citylist
def main():
monthlist = get_month()
citylist = get_city()
for city in citylist:
#表头#
heads = ['date', 'AQI', '质量等级', 'PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3_8h']
with open(f'{city}.csv', 'a', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerow(heads)
for month in monthlist:
url = f'https://www.aqistudy.cn/historydata/daydata.php?city={city}&month={month}'
soup = open_url(url, chrome)
table = soup.find('table')
num = str(table).count('<tr')
for i in range(num):
if i != 0:
tdata = table.find_all('tr')[i].find_all('td')
data = []
for i in tdata:
data.append(i.text)
with open(f'{city}.csv', 'a', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerow(data)
chrome.quit()
if __name__ == '__main__':
chrome = webdriver.Chrome()
main()
#include<stdio.h>
#include<string.h>
typedef struct tm{
char id[15];
int tm_sec_0;
int tm_min_0;
int tm_hour_0;
int tm_sec_1;
int tm_min_1;
int tm_hour_1;
char start[8];
char end[8];
}tm;
int main()
{
int m;
scanf("%d", &m);
tm record[m];
for (int i = 0; i < m; ++i) {
scanf("%s %s %s", record[i].id, record[i].start, record[i].end);
record[i].tm_hour_0 = 10*(record[i].start[0]-'0') + (record[i].start[1] - '0');
record[i].tm_min_0 = 10*(record[i].start[3]-'0') + (record[i].start[4] - '0');
record[i].tm_sec_0 = 10*(record[i].start[6]-'0') + (record[i].start[7] - '0');
record[i].tm_hour_1 = 10*(record[i].end[0]-'0') + (record[i].end[1] - '0');
record[i].tm_min_1 = 10*(record[i].end[3]-'0') + (record[i].end[4] - '0');
record[i].tm_sec_1 = 10*(record[i].end[6]-'0') + (record[i].end[7] - '0');
}
int min[3] = {25, 25, 25};
int max[3] = {-1, -1, -1};
for (int i = 0; i < m; ++i) {
if (record[i].tm_hour_0 < min[0]) {
min[0] = record[i].tm_hour_0;
min[1] = record[i].tm_min_0;
min[2] = record[i].tm_sec_0;
}
else if (record[i].tm_hour_0 == min[0]) {
if ( record[i].tm_min_0 < min[1]) {
min[1] = record[i].tm_min_0;
min[2] = record[i].tm_sec_0;
}
}
else if (record[i].tm_hour_0 == min[0] && record[i].tm_min_0 == min[1]) {
if ( record[i].tm_sec_0 < min[2]) {
min[2] = record[i].tm_sec_0;
}
}
}
for (int i = 0; i < m; ++i) {
if (record[i].tm_hour_1 > max[0]) {
max[0] = record[i].tm_hour_1;
max[1] = record[i].tm_min_1;
max[2] = record[i].tm_sec_1;
}
else if (record[i].tm_hour_1 == min[0]) {
if ( record[i].tm_min_1 > max[1]) {
max[1] = record[i].tm_min_1;
max[2] = record[i].tm_sec_1;
}
}
else if (record[i].tm_hour_1 == max[0] && record[i].tm_min_1 == max[1]) {
if ( record[i].tm_sec_1 > max[2]) {
max[2] = record[i].tm_sec_1;
}
}
}
for (int i = 0; i < m; ++i) {
if (record[i].tm_hour_0 == min[0] && record[i].tm_min_0 == min[1] && record[i].tm_sec_0 == min[2]) {
printf("%s ", record[i].id);
}
if (record[i].tm_hour_1 == max[0] && record[i].tm_min_1 == max[1] && record[i].tm_sec_1 == max[2]) {
printf("%s", record[i].id);
}
}
return 0;
}
--创建信息系选修了1号课程的学生视图(包括姓名,学号,成绩),视图名为is_IS
create view is_IS as
select sname,student.sno,grade from student,sc
where sdept = 'IS' and cno = '1' and student.sno = sc.sno;
create view is_IS as
select sname,is_student2.sno,grade from is_student2,sc
where is_student2.sno = sc.sno;
--创建一个创建信息系选修了1号课程且成绩在90分以上的学生视图,视图名为is_IS2
create view is_IS2 as
select * from is_IS
where grade >= 90;
select * from is_IS2;
--创建一个反应学生出生年份的的视图BT_S
create view BT_S as
select sno,sname, 2019- sage "出生年份" from student;
--将学生学号及他的平均成绩定义为一个视图S_G
create view s_g(sno,avggrade) as
select sno,avg(grade) from sc group by sno;
create view s_g(sno,avggrade) as
select sno,avg(grade)avggrade from sc group by sno;
--将学生表中所有女生记录定义为一个视图F_student;
create view f_student as
select * from student where ssex = '女';
select * from f_student;