I think the inconsistency you see is just a misunderstanding. When he says you shouldn't mock the database he doesn't mean that all tests should run against a real persistent database. If that was the case, a test might change data in such a way it would affect the following tests. This is a no-go.
More likely means something like using the real database engine, but creating fresh data per test and reset the data after each test. For example you could have an SQL script which drops all tables and then recreated them in a known state, before each test. This is a common pattern for automated tests.
When he talks about shared state in the third quote, it is about isolating tests against each other, i.e. a test should not affect shared state in such a way that it might affect the outcome of other tests.