One early pitch was all that prevented John Lackey from throwing a perfect game. The Angels' right-hander set down 27 consecutive batters after allowing Mark Kotsay's leadoff double Friday night, winning his third straight start in Los Angeles' 3-0 victory at Oakland.

``John was as locked in as we've seen him,'' Angels manager Mike Scioscia said.

And just about as locked in as anyone can be. Lackey delivered the AL's most impressive pitching performance on a night that included three shutouts and dominant gems by Jeremy Bonderman, C.C. Sabathia and Jaret Wright.

Lackey (7-5) matched his career high with 10 strikeouts and threw a one-hitter to beat All-Star Barry Zito. It was the right-hander's fourth shutout, and first since a 1-0 win over Tampa Bay on May 7, 2004.

``I knew I was pitching well, but I wasn't aware that nobody got on base until after the game,'' said Lackey, who had to adjust his footing to keep from slipping. ``I knew I hadn't been in the stretch for a while.''

In other AL games, it was: Detroit 6, Seattle 1; Cleveland 9, Baltimore 0; New York 1, Tampa Bay 0; Boston 7, Chicago 2; Kansas City 13, Toronto 3; and Texas 9, Minnesota 4.

Robb Quinlan hit a two-run homer and Chone Figgins added a solo shot off Zito (8-6), who lost his third straight start.

Angels shortstop Orlando Cabrera went 0-for-4, ending his streak of reaching base safely in 63 consecutive games _ the longest run in the majors since at least 1960. Ted Williams holds the record with 84 straight games in 1949.

After Kotsay doubled to start the first inning, Lackey got 27 consecutive outs. He extended his scoreless streak to 17 2-3 innings in a game that lasted 2 hours, 1 minute.

The last pitcher to retire 27 batters in a row following a leadoff hit was Jerry Reuss of the Los Angeles Dodgers on June 11, 1982, against Cincinnati.

``Lackey had a career night,'' said Zito, who went eight innings. ``He was as dominant as he's ever been. You can't fight that.''

Booed when his name was announced before the game, Lackey faced the A's for the first time since May 2, when Oakland catcher Jason Kendall charged the pitcher after Lackey threw inside and yelled at him. Both players were ejected and Kendall was suspended four games.

Lackey, who combined on a five-hit shutout in a 4-0 win at Dodger Stadium last Sunday, worked ahead in the count all night and matched his strikeout high for the second consecutive outing. In an efficient, 109-pitch performance, he did not walk a batter and threw first-pitch strikes to 21 of his last 23 hitters.

``When he started retiring guys in the seventh inning, we realized we didn't have any baserunners,'' Kotsay said. ``He retired 27 in a row with guys giving away at-bats.''

Tigers 6, Mariners 1

At Seattle, Bonderman (8-4) came within one out of a shutout and Craig Monroe hit a long homer.

Bonderman, from Pasco, Wash., gave up six hits and walked none in 8 2-3 innings, striking out four. In 27 games since June 8, Detroit starters are 17-1 with a 2.83 ERA.

Magglio Ordonez, added to the AL All-Star team as an injury replacement, had three hits for the Tigers.

Indians 9, Orioles 0

Travis Hafner became the first player in major league history to hit five grand slams before the All-Star break, backing Sabathia's fourth career shutout to lead host Cleveland.

Left off the All-Star team, Hafner hit his 25th homer in the second inning against Kris Benson (9-7) to break the Indians' season record for grand slams. Al Rosen hit four in 1951.

Hafner is the fourth major leaguer to hit five slams in a season. Don Mattingly of the New York Yankees holds the record with six in 1987.

Sabathia (7-4) threw a career-best three-hitter _ all singles _ and didn't allow the Orioles to get a runner to second base.

Yankees 1, Devil Rays 0

Wright (5-5) matched a career high with 10 strikeouts in six sharp innings for visiting New York.

Bernie Williams drove in the only run with a fourth-inning single off Jae Seo (0-2), and Mariano Rivera earned his 19th save. Yankees pitchers retired their final 18 batters.

Red Sox 7, White Sox 2

At Chicago, David Ortiz became the first Red Sox player to hit 30 homers before the All-Star break, and rookie Jon Lester beat All-Star Mark Buehrle (9-6) in the first meeting this season between the past two World Series champions.

Ortiz leads the majors in homers and has seven in the last seven games. Mike Lowell and Coco Crisp also connected for Boston, and Alex Gonzalez had four hits. Lester (4-0) became the first Red Sox rookie to win his first four decisions since Aaron Sele went 6-0 in 1993.

Royals 13, Blue Jays 3

Luke Hudson (2-3) allowed one run over five innings in his first start this season to beat A.J. Burnett (1-3). John Buck and Matt Stairs homered for host Kansas City, which has won four straight.

David DeJesus and Doug Mientkiewicz each had three hits and three RBIs.

The Royals, who lost 47 of their first 63 games, are 14-6 over the past 20, and the winning streak matches their longest of the year. The Blue Jays have lost five of six.

Rangers 9, Twins 4

Michael Young and Gary Matthews Jr. homered for host Texas, which built a big lead for spot starter John Wasdin (2-1). Hank Blalock added three hits and three RBIs.

Joe Mauer, Jason Kubel and Justin Morneau each hit a solo homer for Minnesota, which has lost three straight after an 11-game winning streak. Carlos Silva (4-9) left early with a strained right knee.