A wide range of problems in Artificial Intelligence can be represented as instances of the Constraint Satisfaction Problem (CSP), and then be solved using some of the existing techniques for solving CSPs. In this paper, we start by defining the concept of CSP and showing how some combinatorial problems can be modelled as CSPs. Next, we give a detailed description of the basic techniques for constraint satisfaction: constraint propagation algorithms (node consistency, arc consistency, and kconsistency), search algorithms (generate and test, backtracking, backjumping, and conflict-directed backjumping), and hybrid algorithms (forward checking, and maintaining arc consistency).