You're updating all the records that have columnA = 'a' each time you run the update, you need more criteria in your where clause to stop updating multiples rows at once.
You can easily see how many rows were updated by using the result attribute of cfquery, similar to the code below.
<cfloop index="i" from="1" to="3">
<cfquery name="query" datasource="datasource" result='updated'>
update mytable
set
columnB = #i#
where columnA = 'a'
</cfquery>
<cfdump var='#updated#' />
</cfloop>
Update: Given your updated question, an example updated query may look like so, as the combination of columnA and ColumnA1 make the row unique.
<cfloop index="i" from="1" to="3">
<cfquery name="query" datasource="datasource" result='updated'>
update mytable
set
columnB = #i#
where columnA = 'a'
AND ColumnA1 = <cfqueryparam value='#i#' />
</cfquery>
<cfdump var='#updated#' />
</cfloop>