Sachverhalt: A. Nachdem er ab 8. Juli 1998 krankgeschrieben worden war, meldete sich Y._ im Januar 1999 bei der Invalidenversicherung zum Leistungsbezug an. Mit Verfügung vom 8. November 1999 sprach ihm die IV-Stelle des Kantons St. Gallen eine ganze Invalidenrente - nebst Zusatzrenten für die Ehefrau und zwei Kinder - ab 1. Juli 1999 bei einem Invaliditätsgrad von 100 % zu. In den Jahren 2002 und 2005 bestätigte sie einen unveränderten Invaliditätsgrad und Rentenanspruch. Die infolge Umzugs des Versicherten nunmehr zuständige IV-Stelle des Kantons Zürich leitete im September 2009 ein weiteres Revisionsverfahren ein. Nach Abklärungen und Durchführung des Vorbescheidverfahrens ermittelte die IV-Stelle unter Hinweis auf einen verbesserten Gesundheitszustand einen Invaliditätsgrad von 25 % und hob die Rente mit Verfügung vom 19. August 2010 auf das Ende des der Zustellung folgenden Monats auf. B. Die Beschwerde des Y._ wies das Sozialversicherungsgericht des Kantons Zürich mit Entscheid vom 16. März 2012 ab mit der substituierten Begründung, die ursprüngliche Rentenzusprache sei zweifellos unrichtig gewesen. C. Y._ lässt Beschwerde in öffentlich-rechtlichen Angelegenheiten führen und beantragen, der Entscheid vom 16. März 2012 und die Verfügung vom 19. August 2010 seien aufzuheben und es sei ihm weiterhin eine ganze Invalidenrente auszurichten.