 			let replaceValuesString = columns.map { _ in "?" }.joined(separator: ", ")
 			
 			// Generate the create table statement.
-			let createColumnsString = columns
+			var createColumnsString = columns
 				.map { "\($0.name) \($0.affinity) \($0.options.map { option in option.rawValue }.joined(separator: " "))" }
 				.joined(separator: ", ")
-			var tableCreateStatement = "CREATE TABLE \(name) (\(createColumnsString));"
+			if (!primaryKey.isEmpty) {
+				createColumnsString.append(", PRIMARY KEY (\(primaryKey.map { $0.name }.joined(separator: ", "))")
+			}
+			var tableCreateStatement = "CREATE TABLE IF NOT EXISTS \(name) (\(createColumnsString));"
 			
 			// Add a statement to create each index.
 			for index in indices {

		public let client: Client
		
		public let name: String
		public let primaryKeys: [SqliteColumnProtocol]
		public let columns: [SqliteColumnProtocol]
		public let indices: [Index]
		

		
		// MARK: - Inits
		
		public init(client: Client, name: String, primaryKey: [SqliteColumnProtocol], columns: [SqliteColumnProtocol], indices: [Index]) {
			self.client = client
			self.name = name
			self.primaryKey = primaryKey
			self.columns = columns
			self.indices = indices
			
